本文简要介绍iOS中Network Extension在提供安全科学(双s)使用G高级搜索、Y视频等App简单应用,同时使用了第三方库NEKit提供路由规则支持。
demo代码已适配swift5,点击GitHub链接查看。
demo运行需要有开发者账号,修改bundle id,在自己的开发者账号进行注册。
在创建应用之前我们需要安装NEProviderTargetTemplates.pkg,在xcode10.12之后苹果在xcode中删除了这个文件,为什么?可能和中国区被下架的那些VXN一样的原因吧。好在我们还可以从老版本的xcode中提取这个文件,链接在此点击下载 ,提取码:18ek,要低调,安装好后重启xcode。
创建工程
接下来我们开始创建工程,首先和创建普通App一样创建一个Project
创建好后我们在当前Project中创建一个Target
选择Network Extension,Next
语言选择swift,因为NEKit是swift写的,并且对oc支持不是很好,所以这里就用swift来写了。
创建好后,目录下会出现一个新的文件夹
有关代理的代码在PacketTunnelProvider.swift中编写。
在工程创建完毕后,需要在Target的Capabilities中开启Network Extensions和Personal VXN功能,注意项目本身主Target及PacketTunnel都需要开启这两项功能。
好了,到此工程就创建好了。
NEKit集成
由于项目中使用的NEKit这个第三方库只支持Carthage进行集成管理,所以demo使用的集成工具也是Carthage,没有用过的可以自行Google,安装使用难度不高,一看即会。
但是注意在第三方库编译的时候需要使用NEKit提供的编译方式,直接carthage update项目无法运行。
carthage update --no-use-binaries --platform mac,ios
第三方库编译好后会在Carthage目录下Build/iOS中生成.framework文件,我们需要把这些framework添加到项目中去,下图的两个位置都要需要添加,与Net无关的包在packetTunnel中可以不需要添加。
至此相关环境配置就已经搞定了,下面开始看代码如何建立VXN链接
创建VXN Manager
首先需要创建一个NETunnelProviderManager
fileprivate func createProviderManager() -> NETunnelProviderManager {
let manager = NETunnelProviderManager()
let conf = NETunnelProviderProtocol()
conf.serverAddress = "BearFree"
manager.protocolConfiguration = conf
manager.localizedDescription = "BearFree"
return manager
}