gpt4 book ai didi

ios - PacketTunnelProvider 网络扩展未调用 Swift 3

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:50 28 4
gpt4 key购买 nike

我正在尝试将 PacketTunnerProvider 网络扩展添加到我的项目中。方法 startTunnelWithOptions(options: [String : NSObject]?, completionHandler: (NSError?) -> Void) 永远不会被调用

但是,我能够使用 providerBundleIdentifier 的网络扩展包 ID 成功建立 VPN 连接

这是我用来建立连接的代码

let vpnManager = NETunnelProviderManager.shared()

func initVPNTunnelProviderManager() {

let config = NETunnelProviderProtocol()

config.providerBundleIdentifier = self.tunnelBundleId
config.providerConfiguration = ["lol": 1]
config.serverAddress = self.serverAddress
config.username = self.username
config.passwordReference = passwordRef

vpnManager.loadFromPreferences {
(error: Error?) in

self.vpnManager.protocolConfiguration = vpnProtocol
self.vpnManager.localizedDescription = "Connect_1.0.0"
self.vpnManager.isEnabled = true

self.vpnManager.saveToPreferences {
(error: Error?) in
do {
try self.vpnManager.connection.startVPNTunnel()
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
}
}
}

这是我的 PacketTunnel 授权文件

`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.networking.vpn.api</key>
<array>
<string>allow-vpn</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.touchcore.Connectionapp</string>
</array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)touchcore.Connectionapp.PacketTunnel</string>
</array>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>packet-tunnel-provider</string>
<string>app-proxy-provider</string>
<string>content-filter-provider</string>
</array>
</dict>
</plist>`

最佳答案

The method startTunnelWithOptions(options: [String : NSObject]?, completionHandler: (NSError?) -> Void) Never gets called

However, I am able to succesfully establish a VPN connection using the network extensions bundle id for the providerBundleIdentifier

它永远不会被调用到底是什么意思?如果您能够成功建立连接,则会调用 startTunnelWithOptions

如果您试图确定它是通过使用 NSLog() 调用的,请记住,只有当您将调试器附加到提供程序时,它才会显示在调试日志中您的容器应用程序。

这会很困难,因为在您有机会附加调试器之前,已初始化提供程序并调用了 startTunnelWithOptions 函数。

在这种情况下,一个有用的解决方法是休眠,以便为调试器提供附加时间。

- (void) startTunnelWithOptions:(NSDictionary *) options
completionHandler:(void (^)(NSError *)) completionHandler
{

// Give debugger time to attach, 10 seconds is usually enough
// Comment this out before you release the app or else you
// will be stuck with a 10 second delay on all connections.
sleep(10);

// Continue with execution
. . .
}

然后,当您初始化 PacketTunnelProvider 时,它将等待 10 秒,然后在 startTunnelWithOptions 函数中完全输入您的逻辑。

因此,在此期间,您可以在 XCode 中转到 Debug->Attach To Process->YourVPNProviderProcess 并等待它完全初始化。

Attach the debugger to a running process

关于ios - PacketTunnelProvider 网络扩展未调用 Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42701530/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com