Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NetworkExtension connectOnDemand规则不';行不通_Ios_Objective C_Swift_Vpn_Networkextension - Fatal编程技术网

Ios NetworkExtension connectOnDemand规则不';行不通

Ios NetworkExtension connectOnDemand规则不';行不通,ios,objective-c,swift,vpn,networkextension,Ios,Objective C,Swift,Vpn,Networkextension,我有一个应用程序,其VPN配置由新的NetworkExtension框架创建。它工作得很好,但现在我需要添加一些规则,以便仅当我尝试连接到特定URL时才打开此VPN。我计划使用NEVPNManager的connectOnDemand功能,但它似乎对我不起作用。当我在safari中打开时,我的VPN连接应该建立,但由于某些原因,它没有建立。我尝试了不同类型的配置,并使用生成的.mobileconfig文件使connectOnDemand工作,但没有成功。怎么了? 我正在测试这样的代码: let m

我有一个应用程序,其VPN配置由新的NetworkExtension框架创建。它工作得很好,但现在我需要添加一些规则,以便仅当我尝试连接到特定URL时才打开此VPN。我计划使用NEVPNManager的connectOnDemand功能,但它似乎对我不起作用。当我在safari中打开时,我的VPN连接应该建立,但由于某些原因,它没有建立。我尝试了不同类型的配置,并使用生成的.mobileconfig文件使connectOnDemand工作,但没有成功。怎么了? 我正在测试这样的代码:

let manager = NEVPNManager.sharedManager()

manager.enabled = true

manager.loadFromPreferencesWithCompletionHandler { (err) -> Void in
    manager.removeFromPreferencesWithCompletionHandler { (err0) -> Void in
                print("err0 \(err0)")
                print("err \(err)")
                let config = NEVPNProtocolIPSec()
                config.localIdentifier = "NEVPNProtocolIPSec"
                config.remoteIdentifier = "NEVPNProtocolIPSecRemote"
                config.disconnectOnSleep = true
                config.serverAddress = server
                config.authenticationMethod = .Certificate
                //configurating here
                manager.protocolConfiguration = config
                let onDemandRule1 = NEOnDemandRuleConnect()
                onDemandRule1.DNSSearchDomainMatch = ["some-site.com", "*.some-site.com"]

                manager.onDemandRules = [onDemandRule1]
                manager.onDemandEnabled = true
                manager.saveToPreferencesWithCompletionHandler({ (err2) -> Void in
                    print("err2 \(err2)")
                })
            }
        }

您需要添加行

manager.onDemandEnabled = true

您需要添加行

manager.onDemandEnabled = true

我让它与下一个规则一起工作:

let onDemandRule = NEOnDemandRuleEvaluateConnection()
let evaluateRule = NEEvaluateConnectionRule(matchDomains: ["*.some-site.com"], andAction: .ConnectIfNeeded)
evaluateRule.probeURL = NSURL(string: "https://a.url.accecable.only.from.vpn")

onDemandRule.connectionRules = [evaluateRule]
manager.protocolConfiguration = config
manager.onDemandRules = [onDemandRule]

我让它与下一个规则一起工作:

let onDemandRule = NEOnDemandRuleEvaluateConnection()
let evaluateRule = NEEvaluateConnectionRule(matchDomains: ["*.some-site.com"], andAction: .ConnectIfNeeded)
evaluateRule.probeURL = NSURL(string: "https://a.url.accecable.only.from.vpn")

onDemandRule.connectionRules = [evaluateRule]
manager.protocolConfiguration = config
manager.onDemandRules = [onDemandRule]

@NikeshK可能你有什么要添加的吗?@NikeshK可能你有什么要添加的吗?谢谢你的回复,我忘记复制粘贴这行了,不管怎么说,这都没用谢谢你的回复,我忘记复制粘贴这行了,不管怎么说,这都没用谢谢你。将“匹配域”设置为我想要的,随机的“probeul”使得VPN最终在访问“匹配域”时按需启动。你知道这为什么有效吗?看起来不是很直观,但我可能只是不明白一些事情。有没有办法匹配所有域。像卡纳姆,模特?谢谢。将“匹配域”设置为我想要的,随机的“probeul”使得VPN最终在访问“匹配域”时按需启动。你知道这为什么有效吗?看起来不是很直观,但我可能只是不明白一些事情。有没有办法匹配所有域。像carname,模特?