3

我正在调用 startVPNTunnel() ,然后在 PacketTunnelProvider 类中,我执行了 completionBlock 并出现错误。对 startVPNTunnel() 的调用在 try-catch 块内,但似乎没有什么可捕获的。我只想提醒用户连接是否成功。其他人能够捕捉到这些错误吗?

相关代码很简单:

do {
       try vpnManager!.connection.startVPNTunnel()
   }
catch {
       NSLog("roee: Failed to start vpn: \(error)")
}

在 PacketTunnelProvider 内部:

 let error = NSError(domain: NEVPNErrorDomain, code: NEVPNError.ConfigurationInvalid.rawValue, userInfo: nil)
            PacketTunnelProvider.pendingStartCompletionHandler!(error)
            PacketTunnelProvider.pendingStartCompletionHandler = nil
4

1 回答 1

1

我相信startVPNTunnel与操作系统对话并让它知道需要启动 VPN。

操作系统将围绕 VPN 配置进行几次检查,并立即返回肯定结果(如果配置良好)或错误(如果有问题)。如果返回错误,则此 API 将抛出。

但是,您的网络扩展将在返回后启动。 startVPNTunnel

所以不能这样交流。

您可以注册NSNotification.Name.NEVPNStatusDidChange以查看 VPN 状态更改。

于 2017-05-26T18:02:48.233 回答