1

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)"

4

4 に答える 4

2

VPNTunnel を開始する前に、次のように loadFromPreferences をロードする必要があると思います。

manager.saveToPreferences(completionHandler: { (error) -> Void in
                if error != nil{
                }
                else{
                    manager.loadFromPreferences(completionHandler: { (error) -> Void in
                        if error != nil{
                        }
                        else{
                            do{
                                try manager.connection.startVPNTunnel(options: nil)
                            }
                            catch{
                            }
                        }
                    })
                }
            })
于 2016-11-04T04:43:50.727 に答える
0

あなたの設定は無効だと思います。特に、ロードする VPN プラグインのバンドル ID を使用してプロトコルを構成する必要があります。

出発点として、いくつかのサンプル コードを取得することを強くお勧めします。これらのビーストの 1 つを構成するのは非常に複雑な作業であり、小さなミスが原因で失敗した理由についての明らかなヒントなしに完全に失敗する可能性がある鋭いエッジがたくさんあります。

于 2015-09-16T06:19:59.473 に答える
0

Apple が提供するドキュメントによると、エラー コードは、以下のシナリオでスローされる NEVPNErrorConfigurationInvalid に対応します。

「NEVPNManager オブジェクトに関連付けられた VPN 構成が無効です。このエラーは、構成に欠落している、または無効な構成プロパティがあるときに構成を保存しようとした場合、またはネットワーク拡張設定に正常に保存される前に構成を使用しようとした場合に発生する可能性があります。または、ネットワーク拡張設定から正常にロードされる前に」

providerProtocol と manager のすべてのプロパティを入力して保存します。構成を manager に割り当てず、 manager.loadFromPreferencesWithCompletionHandler メソッド内に保存しない場合は、問題が解決するはずです。

于 2015-10-16T02:52:04.080 に答える