I'm trying to use Network Extension to develop a VPN tool for iOS devices. I used a NETunnelProviderManager to create VPN configuration and created extension target conaining a subclass of NEPacketTunnelProvider.
But when I use NETunnelProviderManager.connection.startVPNTunnel() to enable the extension, I got a error output: "Failed to fetch info with type 2: Connection interrupted".
I checked my entitlements for both app and extension and they both contains PacketTunnel capability. And the info.plist for extension is correct with a principal class $(PRODUCT_MODULE_NAME).PacketTunnelProvider (which is identical to my provider class).
I want to know which configuration could cause the problem and how can I fix it. Thank for any helping.
Post
Replies
Boosts
Views
Activity
In some particular situation, Xcode debugger or lldb cli cannot correctly extract some value that returned by a async throw function and handled by guard let try?.
Here is the minimum example:
import Dispatch
func test() async throws -> [Int] {
return [369]
}
let group = DispatchGroup()
group.enter()
let task = Task {
guard let res = try? await test() else { return }
print(res)
group.leave()
}
group.wait()
If added a break point at print(res), the debugger cannot show the value of res.
Due to forum limitation, I cannot paste a screenshot here...
if use p res or po res at lldb cli, it shows:
(lldb) p res
error: expression failed to parse:
error: <EXPR>:3:1: error: cannot find 'res' in scope
res
^~~
(lldb) po res
error: expression failed to parse:
error: <EXPR>:3:1: error: cannot find 'res' in scope
res
^~~
If test() returns a dict, or a costom struct, the issue retains. But if returned a trivial value like Int, it acts normally.
Also, if remove the guard statement, make res a optional value(use let res = try? await test()), debugger can extract the value.
Above results are compiled and run in this environment:
Swift 5.6.1
Xcode 13.4.1 (13F100)
lldb-1316.0.9.46
macOS 12.4
x86_64 arch
I'm now developing a iOS project and a SPM package project, which both depend on another swift package stored in a private repo.
Our private repo has a non-default ssh port, so for commandline tools, I configured like this:
// .ssh/config
Host repo.private.com
User git
Port 20022
IdentityFile ~/.ssh/id_rsa
PreferredAuthentications publickey
AddKeysToAgent yes
And I modified defaults to disable xcode integrated git:
defaults write com.apple.dt.Xcode IDEPackageSupportUseBuiltinSCM YES
For the Package project, I can simply use:
.package(url: "git@repo.private.com:some-repo.git", from: "0.0.1"),
and it works well.
But for iOS project, I tried to add the dependency, and finally find out I have to configure the port, then the project packages shows as:
ssh://git@repo.private.com:20022/some-repo.git
So does xcode treat these project differently and use different toolchains?
Is it possible to configure xcode and make these situation behave exactly?