Shr*_*t K 4 vpn tunnel ios nevpnmanager networkextension
我只是第一次连接到VPN服务器时出现"Error Domain = NEVPNErrorDomain Code = 1 \"(null)\"",以后它可以正常工作.
我在尝试启动类似于我的问题的TunnelProvider网络扩展时检查了NEVPNErrorDomain错误1,并按照其在此解决方案中说的方式但仍然得到相同的错误.
所以这是我使用网络扩展连接到VPN服务器的代码.
func initVPNTunnelProviderManager(){
self.vpnManager.loadFromPreferences { (error) -> Void in
if((error) != nil) {
print("VPN Preferences error: 1")
}
else {
let p = NEVPNProtocolIKEv2()
p.username = "******"
p.remoteIdentifier = "*****"
p.serverAddress = "******"
let keychain = KeychainSwift()
let data = keychain.getData("vpnPassword")
p.passwordReference = data
p.authenticationMethod = NEVPNIKEAuthenticationMethod.none
p.useExtendedAuthentication = true
p.disconnectOnSleep = false
self.vpnManager.protocolConfiguration = p
self.vpnManager.isEnabled = true
self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
if((error) != nil) {
print("VPN Preferences error: 2")
}
else {
var startError: NSError?
do {
try self.vpnManager.connection.startVPNTunnel()
}
catch let error as NSError {
startError = error
print(startError)
}
catch {
print("Fatal Error")
fatalError()
}
if((startError) != nil) {
**// Here it comes first time later onwards it goes to else block. (Which I'm expecting first time too)
print("VPN Preferences error: 3")**
let alertController = UIAlertController(title: "Oops..", message:
"Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))
self.present(alertController, animated: true, completion: nil)
print(startError)
}
else {
print("Start VPN")
}
}
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我为什么第一次进去,如果?
if((startError) != nil) {
// Here is control coming for first time
}
else {
// Which should always come here //later onwards its coming here, not first time.
}
Run Code Online (Sandbox Code Playgroud)
注意:我在GitHub上找到了相关的帖子但是如果我尝试这个解决方案它给出Optional(错误域= NEVPNErrorDomain Code = 4"(null)")问题,因为,配置是陈旧的,需要加载.您应该调用loadFromPreferencesWithCompletionHandler:并在完成处理程序中修改您要修改的值,然后调用saveToPreferencesWithCompletionHandler:.
提前致谢.
解决方案是:
在saveToPreferences之后再次调用loadFromPreferences并在加载完成后启动连接将解决问题.它听起来很愚蠢.
self.vpnManager.saveToPreferences(completionHandler: { (error) -> Void in
if ((error) != nil) {
print("VPN Preferences error: 2")
}
else {
self.vpnManager.loadFromPreferences(completionHandler: { (error) in
if ((error) != nil) {
print("VPN Preferences error: 2")
}
else {
var startError: NSError?
do {
try self.vpnManager.connection.startVPNTunnel()
}
catch let error as NSError {
startError = error
print(startError)
}
catch {
print("Fatal Error")
fatalError()
}
if ((startError) != nil) {
print("VPN Preferences error: 3")
let alertController = UIAlertController( title: "Oops..", message: "Something went wrong while connecting to the VPN. Please try again.", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction( UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default,handler: nil))
self.present(alertController, animated: true, completion: nil)
print(startError)
}
else {
self.VPNStatusDidChange(nil)
print("Start VPN")
}
}
})
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2496 次 |
| 最近记录: |