iOS 11 的最新技术发布在 6月6号,由于小编在工作上的原因只能在今天把 iOS 11的相关信息整理出来对后面的开发便利以及在实际开发过程中可以更好的避免踩过的坑。
新增的框架
对于上一个版本总体来说新增加两个主要大的框架 Core ML 和 ARKit
Core ML 框架
只从去年的时候 AlphaGo 打败李世石,今年的升级版的 AlphaGo 也战胜中国的柯洁,到最近前端时间升级版的 AlphaZero 也战胜了前代的 AlphaGo。感觉后面 AI 只能是最近最火的科技,而且目前也可以看出来后面科技更新替代可能是对依据重复性训练获取技能重复单样工作的人员优化(这是后话)。
不过 Core ML 是 Apple 提供的已经训练好的模型,也就是说是根据数据进行相关训练好可以直接使用的一个数据匣子。小编讲的直白一点,就是你往匣子中输入数据然后获取相应的结果数据。
Core ML 背后是对 iOS 的视觉识别 Vision 框架和 Foundation 中语义相关分析的 API。一般移动端的开发者可以使用相关的接口来获取相关人脸识别或者是文字的识别结果。
ARKit 框架
ARKit 在小编的上一家公司是做产品公司,对一些新技术都有自己的积累。对 ARKit 在 Apple 上发布感觉还是听好玩的。因为在刚刚毕业时候和好室友一起做视频播放器,由于播放内容来源的版权问题被 App Stroe 拒接上架,接着我们开始做 AR 相关 App 因为技术原因在模型上搁置。就这一样大半年过去(囧)。
不过苹果正式发布之后,反应平平,最后沦落为家居相关 APP。
在 ARKit 中使用的 View 均是作为 SceneKit 相关的延伸,在开发过程中我们见到的真实的世界都是归于系统来进行相关处理。作为开发者只需要界面相框中事物放到合适的位置,并且让他们进行相关的互动即可。
新增的功能
iOS 11除在框架外有所更新相关的内容,在功能的方面也做了些相关升级和更改。比如在网络方面、Xcode 9、32 位处理器支持和 WebKit 的特性等。
网络部分
ECN (显示拥堵通知)
网络拥堵发生时因为发送方无法及时知晓网络情况,在发现丢包时就会不断的重新重发,间接导致网络会更加拥堵使网络情况更加糟糕。目前 ECN 的出现就解决此问题, ECN 作为 TCP 和 IP 的协议扩展,存在于 IP 的头文件中 1 bit 的拥塞值的状态值,是由接收方回复给发送方,发送方接受到此消息的请求后停止继续发送数据包,直到拥塞的状态停止才开始继续发送数据。
不过是实际情况中使用时 ECN 需要结合客户端、服务端和网络端三个方面的支持,目前 ECN 属于 Linux 内核,只需要升级 Linux 就可以获取支持,Apple 给出了 Server 对 ECN 的支持率:

客户端方面, iOS 10.3 开始,有过半的通过 wifi 和少量通过移动网络进行的 TCP 连接已经打开了 ECN,没有收到相关的问题报告。
下面是搜集的一些国家网络拥堵的数据:

客户端从 iOS 11 开始,所有 TCP 请求都会支持 ECN(全部 Wifi 和部分白名单移动运营商);服务端有 74% 的网站支持了 ECN,也会有越来越多的网络服务商开始支持 ECN 来进一步提升用户体验;(服务商只需要在你的网络接入点支持 ECN 即可)。
使用 ECN 实现标记连接拥塞,可以更加高效:
- 减少重发次数;
- 降低延迟;
- 提升用户体验。
在使用 ECN 的同时,需要在结合使用 SQM(Smart Queue Management) 来实现数据缓存,这样可以实现提前告知发送者当前的网络zhekuai,可以最大程度上实现避免拥塞出现。
WKWebView Cookie 管理
URLSession Adaptable Connectivity API
现在可以通过 urlSession(_:taskIsWaitingForConnectivity:) 让请求等待网络正常后再自动尝试。

URLSessionTask Scheduling API
通过 URLSessionTask Scheduling API 可以在 App 没有运行的时候下载内容,而手机也会结合实际电量,使用状态去决定是否执行。

iOS 11开发新特性之 WebKit 支持 WebRTC
iOS 11 的 WebKit 中支持了 WebRTC 相关的接口:
目前 WKWebView 还没有支持 getUserMedia 无法获取 MediaStream,无法传输音视频流,所以 App 嵌套的 WebView 还无法使用 WebRTC,必须得用 Safrai App 才可以。
一旦 WKWebView 支持 MediaStream (getUserMedia),之后朋友圈里面的 Web 会有更多可能性,比如直接音视频的合成,还有实时视频通信、WebAR 的东西进行传播。借助小程序的入口,想象空间还是比较多的。
参考资料:
《WebRTC在iOS端的实现》
《苹果终于入伙 WebRTC,新一代移动 Web 应用爆发路上还有哪些坑?》
iOS 11 开发新特性 Xcode9 新特性
添加 GitHub 功能
在 Xcode 9 引入了 Github 源代码的管理,可以展示在开发过程中 Branch 和 Tag。

双击可以看出 Commit 的具体内容:

可以直接查看本次具体提交的内容:

创建新的颜色 Asset Catalog
可以 zai Asset Catalog 中使用颜色来创建图片,然后根据颜色填充来实现图片展示:

iOS 开发新特性 Tips
DeviceCheck
DeviceCheck 允许开发者可以通过公司自己的服务器和 Apple 服务器通讯,并为两个设备设置两个 Bit 数据。
在设备上使用 DeviceCheck API 来生成 token,然后把此 token 发送给公司的服务器,在由公司的服务器发送到 Apple 的 API 进行通讯,可以来做更新或者是查询该设备的值。根据这两个字节的数据可以用来追踪用户。
根据此功能,可以用在发欺诈的领域:
- 使用 7 天;
- 使用者封号后防止重新注册账号接单;
- 手机
App用户是否是第一次领取红包; - 防止用户打开多个
App,例如:在同一款手机上开 5 个 App;
在 iOS 10.3 正式版本之后,App 删除后 keychain 不会被清理。
iOS 11 开发新特性停止支持 32 位 App
iOS11 放弃支持 iPhone5、iPhone5c、iPad4 ,标志着在硬件层面,32位设备退出了历史舞台,iOS 系统不再兼容32位设备。
同时 iOS11 也将不再支持 32位 APP 运行, 32位 APP 在 APPStore 无法被搜到,已经下载的 APP 无法在“已购”项目中安装。
iOS 11 只兼容 64-bit 设备,也就是搭载 A7 以上处理器的设备。