自iOS 9测试版发布以来,Apple开放了NetworkExtension.framework,让开发人员可以在设备上实现自定义协议VPN客户端。
当我尝试使用以下代码连接自定义VPN
时 let providerProtocol = NETunnelProviderProtocol()
providerProtocol.serverAddress = "example.com"
let manager = NETunnelProviderManager()
manager.protocolConfiguration = providerProtocol
manager.enabled = true
manager.saveToPreferencesWithCompletionHandler({ error in
guard error == nil else {
print("saveToPreferencesWithCompletionHandler \(error)")
return
}
do {
try manager.connection.startVPNTunnel()
} catch {
print("startVPNTunnel \(error)")
}
})
startVPNTunnel Error Domain=NEVPNErrorDomain Code=1 "(null)"
答案 0 :(得分:2)
在启动VPN之前,您必须先致电loadFromPreferencesWithCompletionHandler
。
答案 1 :(得分:2)
我认为在你启动VPNNTunnel之前你需要像这样loadFromPreferences:
./gradlew app:dependencies
答案 2 :(得分:0)
我认为您的配置无效。除此之外,协议必须配置您要加载的VPN插件的包标识符。
我强烈建议抓一些示例代码作为起点。配置这些野兽中的一个是一项相当复杂的任务,并且存在许多尖锐的边缘,其中一个微小的错误可能导致它完全失败,而没有任何明显暗示它失败的原因。
答案 3 :(得分:0)
根据Apple提供的文件,错误代码对应NEVPNErrorConfigurationInvalid,在下面的场景中引发
“与NEVPNManager对象关联的VPN配置无效。在配置缺少配置属性或配置属性无效时尝试保存配置时,或尝试在配置成功保存到配置之前使用配置时,可能会发生此错误网络扩展首选项或在从网络扩展首选项“
成功加载之前填写providerProtocol和manager的所有属性并保存它们。如果不将配置分配给manager并将它们保存在manager.loadFromPreferencesWithCompletionHandler方法中,那么应解决您的问题。