一直阅读我的博客的朋友可能知道,我在每年 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
- Machine Learning Get-Together
- Introducing Create ML
- What’s New in Core ML Part 1 Part 2
- A Guide to Turi Create
- Introducing Natural Language Framework
- Vision with Core ML
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 等等。
Swift 5 被延期到了明年,ABI 稳定显然是最近 Swift 的主攻方向,因为只有 ABI 稳定,Apple 才可能开始在自家框架中使用 Swift。
除了自家平台之外,可能值得一提的是 Swift for TensorFlow 的分支。这是 Swift 的创始人 Chris Lattner 在加入 Google 后所主导的一样项目,希望使用 Swift 来操作 TensorFlow 来构建 tensor graph 模型,由于有编译阶段的支持,可以纵览全局,所以往往可以比 Python 提供更好的性能。它使用了 dynamicMember 来提供 Python 兼容的代码形式,思路非常有趣。鉴于 Chris 在 Swift 社区的影响力,以及 Apple 本身想要把 Swift 打造成多平台,多用途的语言,这个分支最终合并也非不可能。
推荐观看的相关 Session
性能调优和工具支持
优化是没有极限的,这部分属于内力比拼了。每年的性能相关或者偏底层的内容,可能不能理解给你带来什么收益,但是却是作为一个技术者,在成长道路上不可或缺的部分。今年因为新的 feature 比较少,所以优化部分的内容要比以往都多。
推荐观看的相关 Session
- What’s New in Testing
- Measuring Performance Using Logging
- Practical Approaches to Great App Performance
- Understanding Crashes and Crash Logs
- iOS Memory Deep Dive
- Embracing Algorithms
Siri with Shortcuts
和 ML 领域类似,另一个开花结果的案子是对 Workflow 的收购:Shortcuts app 整个就是 Siri 版的 Workflow。Siri 在面对 Amazon 和 Google 这样的“后来者”挑战时,确实显得力不从心,而从 Keynote 的演示来看,Shortcuts 可能会是一剂良药。
和近几年的其他很多功能一样,开发者通过操作 NSUserActivity
来配置简单的 Shortcuts 以获取 Siri 的推荐。如果你想要更加自定义的行为和表现,那还需要定义和开发新的 Intent app extension。这部分内容都被作为 SiriKit 的追加内容,希望能够为用户带来每天使用 Siri 的理由吧。
推荐观看的相关 Session
总结
当然,上面的都是我个人认为会比较重要的内容。每个人经历不同,所关注的兴趣点自然也不一样。WWDC 18 里还有不少规模更小一些的话题,可能也会在某种场合下特别重要,可以纵览以后根据需求再深入研究。
总之,今年的 WWDC 应该是对开发者比较友好的。在从 iOS 7 改头换面开始,iOS 就在添加新功能的快车道上一路狂奔。而今年虽然也有新功能,但是很明显在力度上有所缓和,Apple 更多地将精力放在了改善现有软件的品质上,期望能在资本市场和用户体验之间找到平衡。对于开发者来说,抓住这个空隙,多想一想如何改善自己的产品,如何定义未来 app 的走向,甚至如何打磨自己,并对今后的三五年进行规划,可能更多地是我们当下需要踏实下来多加思考的东西。