50a336538b17d78b088f453add6fb7fa
开发者所需要知道的 WWDC 2018 新特性

一直阅读我的博客的朋友可能知道,我在每年 WWDC 之后都会写 (水) 一篇关于新 SDK 和开发工具的文章。之前这个系列叫做《开发者所需要知道的 iOS SDK 新特性》,但是最近虽然 Craig 嘴上说着不要,身体却很诚实地将 iOS 和 macOS 带到一起,所以今年我觉得可以改一改题目,就总览一下作为 Apple 生态圈的开发者,在今年 WWDC 上我个人的一些观察,以及可能应该注意的有趣的地方。

在会前,Apple 就已经放出消息要放慢增加新功能的脚步,转而提升软件稳定性和可靠性。所以 iOS 12 和 macOS 10.14 中对开发者来说并没有特别大的新功能,这也是意料之中。在一片“平平淡淡”的评论中,也许我们会更有时间和信息来打磨一款 app,正如前几天 deno 项目下的哥们儿说得:“求别更新了,老子学不动了”。

当然这是一句戏谑,作为程序员或者开发者,应该是这个星球上最需要学习的职业 (之一),我们就来看看今年的 WWDC 带给了我们哪些东西吧。

Machine Learning

这算是时代的潮流。前几天 Google I/O 所展示的 AI 打电话当然令人印象深刻,不过其实 Apple 也很早就押宝 AI 和 ML 了。区别在于,Apple 家的天赋分配和 Google 不太一样,Google 更多地是用“集中式”的方式,通过第一方资源完成训练和模型部署,用户进行使用,在此期间第三方开发者能做的事情十分有限。今年 Google 推出了基于 Firebase 的 ML Kit,让移动开发者可以处理一些现成的常见 ML 任务 (比如文本识别,面部检测等),这部分任务在 iOS 中其实很早就已经在 Foundation 中有提供,之后又抽离出了像是 Vision 之类的专用框架。而第三方开发者自行训练模型的部分,Google 今年则给出了 TensorFlow Lite 和 Firebase 进行 host 的组合。

而 Apple 与之不同,从一开始 Apple 就寄希望于“复制” App Store 的成功模式,也就是将 ML 相关的功能提供给开发者,去年的 Core ML 框架就是一个这样的尝试。当然 Core ML 本身比较简陋,它通过将已有的其他格式的模型“转换”为自己能够理解的模型,然后对新的输入进行求值。模型训练在 Mac 平台上一直是一个软肋,因为最近 Mac 已经不再配置 Nvidia 的显卡,TensorFlow 甚至都已经不再为 macOS 提供带 GPU 支持的版本,对于日常工作在 Apple 平台的开发者来说,训练一个自己的模型一度是相当困难的事情。

2016 年 Apple 曾经收购了一家 ML 的初创公司 Turi,在今年这一收购案终于是开花结果。基于 Turi 的模型训练框架 Create ML 可以利用 Mac 的 GPU (以及 Metal) 进行训练,并直接得到 Core ML 可用的模型。结合自家 Playground 的更新,Apple 更是祭出了 CreateMLUI 这种“傻瓜式”但效果还很不错的可视化方式,现在开发者只需要将训练数据和测试数据拖拽到 Playground UI 中,就能在 Apple 自家的模型的基础上,得到很好的结果。这大大降低了一般开发者在第三方 app 中集成 AI 特性的门槛,有很多时候用户并不一定需要 Google Assistant 那样复杂的应用,而在一般的各类 app 中集成的 AI,对 app 易用性的提升会相当显著。

另外,去年的 Vision 框架在结合 CoreML 使用时表现很不错,让不少第三方 app 可以很简单地利用计算机视觉的一些成果。而今年 Apple 在这方面更进一步,带来了自然语言处理的框架。这也是今年 WWDC 在系统中新增的少数几个框架之一。

Apple 虽然在 Keynote 上一句 AI 都没有提过,但是它却“润物细无声”,贯穿在照片搜索,Finder,Shortcuts 等方方面面。不管你是否承认,Apple 也已经从移动导向逐渐过度到了 AI 导向,而对于移动开发者来说,也许基本的 AI 开发将是不可回避的话题。虽然对模型的训练现在的业界主流依然是 TensorFlow,或者说套上 Keras 的前端,但 Apple 的出现和对 Turi 的持续投资,让它成为了另一种可能。

推荐观看的相关 Session

Xcode

暗色的 Xcode 果然是大家的最爱!但是除了“科技以换色为本”以外,在一段不长的时间的试用后,我已经决定把 Xcode 10 beta 作为日常使用的工具了。Apple 看起来是确实履行了改善软件质量的承诺,相比于前几个版本的 Xcode beta,这次的稳定性相当值得称赞。新的编译系统和更加顺滑的编辑器,以及一些深度集成的小功能 (边栏的 git status indicator,或者多光标编辑模式等),让 Xcode 的编辑功能追上了主流。另外,语法高亮和自动补全的处理显然也得到了照料,即使是 beta 版本,也比 Xcode 9 正式版本身要稳定得多。

基本上现在开始将 Xcode 10 作为日常主力工具,使用 Swift 4.1 兼容的语法进行开发,这样可以让自己每天过得舒服一点,并且可以保持用 CI 上的 Xcode 9 进行测试构建和提交。我想这大概会是我到九月前这段时期的选择了。

Playground 在推出时被寄予厚望,但是实际表现却非常一般:响应速度慢,经常崩溃无响应,

推荐观看的相关 Session

Swift

Swift 4.2 的编译器同时支持 Swift 3 (虽然应该是最后一个支持 3 的版本了) 和 Swift 4 的代码,所以不需要预先进行代码迁移。新版本继续向着更易用的 Swift 的方向进行努力,比如将更多的 C-like 的代码 (比如 CoreAnimation 的一整套 API) 改成更 modern 的形式,比如为数字和数组添加 random,比如将很多 String-base 的 API 加上强类型或者 KeyPath 等等。

top Created with Sketch.