NetworkExtension connectOnDemand规则不起作用

我有一个由新的NetworkExtension框架创build的VPNconfiguration的应用程序。 它工作得很好,但现在我只需要添加一些规则来打开这个VPN只有当我想连接到一个特定的URL。 我计划使用NEVPNManager的connectOnDemandfunction,但它似乎没有为我工作。 当我在safari中打开http://some-site.com时 ,我的VPN连接应该build立,但由于某种原因,它不会。 我尝试了不同types的configuration以及使用生成的.mobileconfig文件来使connectOnDemand工作,但没有运气。 它出什么问题了? 我正在testing这样的代码:

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

我使用了下一个规则:

 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] 

你需要添加行

 manager.onDemandEnabled = true