为App Proxy Provider应用程序扩展创建一个主要类。
概述
NEAppProxyProvider类以NEAppProxyFlow对象的形式提供对网络数据流的访问。 每个NEAppProxyFlow对象对应于由当前应用程序代理配置中指定的应用程序规则匹配的应用程序打开的套接字。 您的App Proxy Provider作为其接收的网络数据流的透明网络代理。
重要:
需要使用com.apple.developer.networking.networkextension授权才能使用NEAppProxyProvider类。 在开发者帐户中创建应用程序ID时启用此权限
DNS处理
除了来自应用程序的原始网络数据流之外,App Proxy Provider还以从NEAppProxyUDPFlow对象的形式接收DNS查询流。 仅对使用低级DNS解析API( 例如DNSServiceGetAddrInfo())的应用程序接收DNS查询流。 App Proxy Provider可以使用setTunnelNetworkSettings:completionHandler:方法指定这些应用程序将使用的DNS解析器配置。
使用更高级网络API(如NSURLSession和NSURLConnection)的应用程序不会生成DNS查询。而是连接的目标主机名包含在NEAppProxyFlow对象的端点信息中。
创建App Proxy Provider扩展
App Proxy Provider以com.apple.networkextension.app-proxy扩展指示App Extensions运行。
要创建App Proxy Provider扩展,请先在项目中创建一个新的App Extension目标。
有关此应用程序扩展的Xcode构建目标的示例,请参阅SimpleTunnel: Customized Networking Using the NetworkExtension Framework示例代码项目的自定义网络。
一旦你有一个App Proxy Provider扩展目标,创建一个NEAppProxyProvider的子类。 然后,将扩展名的Info.plist中的NSExtensionPrincipalClass键设置为子类的名称。
如果尚未完成,请将扩展名的Info.plist中的NSExtensionPointIdentifier键设置为com.apple.networkextension.app-proxy。
以下是App Proxy Provider扩展的Info.plist中的NSExtension字典示例:
NSExtension
NSExtensionPointIdentifier
com.apple.networkextension.app-proxy
NSExtensionPrincipalClass
MyCustomAppProxyProvider
最后,将您的App Proxy Provider扩展目标添加到应用程序的“嵌入应用程序扩展”构建阶段。
子类注释
为了创建App Proxy Provider扩展,您必须创建NEAppProxyProvider的子类,并覆盖下列方法。
startProxyWithOptions:completionHandler:
启动网络代理。stopProxyWithReason:completionHandler:
停止网络代理。handleNewFlow:
从App Proxy Provider停止网络代理。
- handleNewFlow:
处理新的网络数据流。