添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文简要介绍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

好了,到此工程就创建好了。

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 Manager

首先需要创建一个NETunnelProviderManager

fileprivate func createProviderManager() -> NETunnelProviderManager {
    let manager = NETunnelProviderManager()
    let conf = NETunnelProviderProtocol()
    conf.serverAddress = "BearFree"
    manager.protocolConfiguration = conf
    manager.localizedDescription = "BearFree"
    return manager
                    本文简要介绍iOS中Network Extension在提供安全科学(双s)使用G高级搜索、Y视频等App简单应用,同时使用了第三方库NEKit提供路由规则支持。demo代码已适配swift5,点击GitHub链接查看。demo运行需要有开发者账号,修改bundle id,在自己的开发者账号进行注册。在创建应用之前我们需要安装NEProviderTargetTemplates.pkg,在...
Swift的扩展,有点类似于OC的分类(Category)
扩展可以为枚举、结构体、类、协议添加新功能
可以添加方法、计算属性、下标、(便捷)初始化器、嵌套类型、协议等等
扩展不能办到的事情
不能覆盖原有的功能
不能添加存储属性,不能向已有的属性添加属性观察器
不能添加父类
不能添加指定初始化器,不能添加反初始化器
计算属性、下标、方法、嵌套类型
extension Double {
    var km: Double { self *   1_000.0 }
 NEKit已弃用。
 它仍然应该工作,但我不再打算对其进行维护。 它具有许多缺陷,需要进行改造才能成为高质​​量的库。
 由于我在编写NEKit时缺乏经验,因此NEKit的体系结构并不理想。 更糟糕的是,它并不是最有效的形式,因为没有一个好的异步io库,而人们将其滥用为应直接实现或使用其他轻量级库的简单功能。
 NEKit不是,从来没有打算过,而且可能永远不会成为一个简单的即装即用的库,如果不了解钩子在做什么,它就是开箱即用的。 这些年来,我学到的一件事是对于这个低水平的功能,开发人员应该了解自己在做什么。 我一直担心,由于该库的存在,人们正在创建不必要地降低用户电话速度的应用程序,我对此感到负责。
 感谢所有对这个库有贡献,使用或感兴趣的人。
 如果满足以下条件,则允许以源代码和二进制形式进行重新分发和使用,无
				
本例需求 : iOS通过NetworkExtension实现本地连接并成功拦截IP数据包pakcet. 建议:建议阅读本文前先仔细阅读并理解下App extension原理,有助于在项目解决很多问题。App extension总结 注意:由于简大叔对XXX关键字过敏,而本文只是苹果App extension一个重要内容,他们自然无法理解,所以本文均用XXX代替VPN,建议可以去本人个人博客...
```swift // 创建一个AVPlayerViewController实例 let playerViewController = AVPlayerViewController() // 添加到视图层次结构 addChild(playerViewController) view.addSubview(playerViewController.view) playerViewController.didMove(toParent: self) 4.在AVPlayerViewController实例,使用AVPictureInPictureController的`playerViewController(_:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:)`方法,在画画结束后恢复自定义视图: ```swift // 在画画结束后恢复自定义视图 func playerViewController(_ playerViewController: AVPlayerViewController, restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping (Bool) -> Void) { // 创建自定义视图 let customView = CustomView(frame: playerViewController.view.bounds) // 添加到视图层次结构 playerViewController.view.addSubview(customView) playerViewController.view.bringSubviewToFront(customView) completionHandler(true) 请注意,您需要在info.plist文件添加“Supported external accessory protocols”键,并将其设置为“com.apple.avfoundation.tunnel”的值,以便在iOS 14及更高版本启用画画功能。