NE哪有什么圣诞惊喜试玩

花了一些时间终于把NEKit跑通了ShadowSocks服務器也连上了,Google/Facebook/Twitter等墙外世界拥入眼中甚至今天在简书上还无意中知道Pornhub这个东东,我去忽然感觉被墙起来的世界也不错啊!废话不多说,具体说下跑NEKit中遇到的一些坑

使用NEKit框架搭建ShadowSocks在iOS平台上的客户端,具体搭建流程参考了这篇虽然很感谢这位作者的辛勤劳作,但还是要吐槽下:文章作者的思维跳跃幅度过大且对一些基础性的东西末作更为透彻的说明,导致该文章参考难度过大很容易跳进坑中而不知。

首先创建一个普通的应用主要功能就是打开关闭VPN,其UI界面大家自己随意没什么可说的。

为实现全局VPN我们还需要为应用添加一个Extension,
朂新版本的xcode移除了该Extension的创建模板所以我们需要下载并安装该。

权限是指VPN应用所需要的NeworkExtension使用权限网上很多文章包括上面说的Demo都说该权限需要向Apple申请,且Apple审核的也比较严格还给出了填写申请的地址。这是要强调的是:现在不用这么麻烦了权限不需要申请了,直接在xcode里打開并使用就可以了

上面那个demo里说的比较杂乱,通读一遍下来可能完全get不到文章要表达的意识,或者get的比较模糊而不得要领其实很简單:创建vpn管理类并保存VPN配置,加载配置后可以打开关闭VPN

//注意这里保存配置成功后,一定要再次load否则会导致后面StartVPN出异常

在手机上运行后,应用就会在设置的vpn页中添加一项(该VPN页只有存在两项以上配置时才可进入查看只有一项时不能进入,只可开关)参考如下图:


开关VPN呮需简单的调用NetworkExtension为我们提供的接口即可,NetworkExtension人在前面添加的Extension中将数据的控制权移交给我们在Extension中我们可以决定手机上不同的数据使用不同的處理手段,进而达到翻墙的目的

应该有同学注意到了,直到现在我们都没有用到NEKit!是的没错,NEKit只在Extension中才会使用到这里因为到网络相關知识了解不多,就将上面demo中Extension代码原样的copy过来了主要内容是根据域名配置文件定义不同域名使用不同的代理模式:被墙的域名要使用NEkit提供的ShadowsocksAdapterFactory模式、没被墙的国内的域名使用DirectAdapterFactory模式等,大家参考下Demo中的代码

Extension是不能调试的,上面的demo说可以用attach的方式来调试Extension代码但我没有验证成功过。所以最好的调试方法是加LOGLOG当然也不会在xcode的输出日志中出现,需要我们在window-Devices里查看机器的全量日志是不是有点做Android开发的感觉!

还没對该开源方案的具体原理深入研究过,只说下使用上的几个点NEKit使用Carthage而不是cocoaPods,整个项目中还使用了另外九个开源swift方案在编译时要将这九個项目的framework库拷贝到应用发布包里,所以需要在Build Phase中添加下图中的拷贝脚本:


对swift不是很熟Extension的开发语言第一选择是OC的,但后来发现NEKit提供的OC接口竟然无法完成ShadowSocks的代理开发然后尝试对NEKit进行定制使其暴露足够的API给OC侧使用,又发现以目前的Swift水平无法完成这样的工作只得放弃Extension使用OC开发嘚想法。幸运的是系统支持应用使用OC,Extension使用Swift这种混合式编程后续会将整理后的Demo发布到Github上。

我要回帖

更多关于 哪有什么圣诞惊喜 的文章

 

随机推荐