IOS11新特性

一 新增框架

新加入SDK的大的框架有两个,分别是负责简化和集成机器学习的 Core ML 和用来创建增强现实 (AR) 应用的 ARKit。

Core ML

1.机器学习

机器学习是一种人工智能,计算机会“学习”而不是被明确编程。不用编写算法,机器学习工具通过在大量数据中寻找模式,使计算机能够开发和优化算法。

神经网络尝试用节点层来模拟人脑流程,并将节点层用不同的方式连接在一起。GPU 来处理会非常有效。GPU 成本的下降使我们能够创建多层深度神经网络,此为深度学习。

训练模型意味着给神经网络提供训练数据,并让它计算公式,此公式组合输入参数以产生输出。训练是离线的,通常在具有多个 GPU 的机器上。

要使用这个模型,就给它新的输入,它就会计算输出:这叫做推论。推论仍然需要大量计算,以从新的输入计算输出。因为有了 Metal 这样的框架,现在可以在手持设备上进行这些计算。

机器学习模型的训练是一项很重的工作,Core ML 所扮演的角色更多的是将已经训练好的模型转换为 iOS 可以理解的形式,并且将新的数据“喂给”模型,获取输出。Apple 提供了一系列的工具用来将各类机器学习模型转换为 Core ML 可以理解的形式。这样就可以轻松地在 app 里使用前人训练出的模型。

2.iOS对机器学习的支持

iOS 5 里引入了 NSLinguisticTagger 来分析自然语言。iOS 8 出了 Metal,提供了对设备 GPU 的底层访问。去年,在 Accelerate 框架添加了 Basic Neural Network Subroutines (BNNS),使开发者可以构建用于推理(不是训练)的神经网络。iOS11 提供了 Core ML 和 Vision。

  • Core ML 让我们更容易在 App 中使用训练过的模型。支持神经网络、树组合、支持向量机、广义线性模型、特征工程和流水线模型。

  • Vision 让我们轻松访问苹果的模型,用于面部检测、面部特征点、文字、矩形、条形码和物体。还可以在 Vision 模型中包装任意的图像分析 Core ML 模型。

Core ML 在背后驱动了 iOS 的视觉识别的 Vision 框架和 Foundation 中的语义分析相关 API。普通开发者可以从这些高层的 API 中直接获益,比如人脸图片或者文字识别等。这部分内容在以前版本的 SDK 中也存在,不过在 iOS 11 SDK 中它们被集中到了新的框架中,并将一些更具体和底层的控制开放出来。

ARKit

ARKit 极大降低了普通开发者玩 AR 的门槛,也是 Apple 现阶段用来抗衡 VR 的选项。ARKit 是一套并不很复杂的 API。涉及的 View 几乎是作为 SceneKit 的延伸,再加上在真实世界的定为也已经由系统帮助处理,开发者需要做的大抵就是将虚拟物体放在屏幕的合适位置,并让物体之间互动。

二 Xcode

编辑器和编译器

速度就是生命,而开发者的生命都浪费在了等待编译上。Xcode 9 中编辑器进行了重写,支持了对 Swift 代码的重构,将 VCS 提到了更重要的位置,并添加了 GitHub 集成,可以进行同局域网的无线部署和调试。

新的编译系统是使用 Swift 重写的,编译速度有了提升。Xcode 9 中的索引系统也使用了新的引擎。

Named Color

现在你可以在 xcassets 里添加颜色,然后在代码或者 IB 中引用这个颜色了。颜色进行替换时只需要在 xcassets 里改一下,就能反应到代码和IB的所有地方了。

三 其他值得注意的变更

列举一下剩下的小变化。

  • 拖拽 - 可以对任意 UIView 子类定义拖拽行为.

  • 新的 Navigation title 设计 - iOS 11 的大多数系统 app 都采用了新的设计,放大了导航栏的标题字体。app可以设置 navigation bar 的 prefersLargeTitles 来使用同样的设计。

  • FileProvider 和 FileProviderUI - 提供一套类似 Files app 的界面,可以获取用户设备上或者云端的文件。

  • 不再支持 32 位 app - 虽然在 beta 1 中依然可以运行 32 位 app,但是 Apple 明确指出了将在后续的 iOS 11 beta 中取消支持。

  • DeviceCheck - 每天要用广告 ID 追踪用户的开发者现在有了更好地选择。DeviceCheck 允许通过服务器与 Apple 服务器通讯,并为单个设备设置两个 bit 的数据。简单说,在设备上用 DeviceCheck API 生成一个 token,然后将这个 token 发给自己的服务器,再由自己的服务器与 Apple 的 API 进行通讯,来更新或者查询该设备的值。这两个 bit 的数据可以用来追踪用户行为。

  • PDFKit - 这是一个在 macOS 上已经长期存在的框架,但却在 iOS 上姗姗来迟。可以使用这个框架显示和操作 pdf 文件。

  • IdentityLookup - 可以自己开发一个 app extension 来拦截系统 SMS 和 MMS 的信息。系统的信息 app 在接到未知的人的短信时,会询问所有开启的过滤扩展,如果扩展表示该消息应当被拦截,那么这则信息将不会传递给你。扩展有机会访问到事先指定的 server 来进行判断 (可以光明正大地获取用户短信内容了,不过这些访问都是匿名加密的,Apple 也禁止这类扩展在 container 里进行写入)。

  • Core NFC - 在 iPhone 7 和 iPhone 7 Plus 上提供基础的近场通讯读取功能。只要你有合适的 NFC 标签,手机就可以进行读取

  • Auto Fill - 从 iCloud Keychain 中获取密码,然后自动填充的功能现在开放给第三方开发者了。UITextInputTraits 的 textContentType 中添加了 username 和 password,对适合的 text view 或者 text field 的 content type 进行配置,并填写 Info.plist 的相关内容,就可以在要求输入用户名密码时获取键盘上方的自动填充,帮助用户快速登录。