WWDC 2021 观后感

WWDC 2021转眼间已经结束一周了。本次WWDC苹果一如既往的带来了新的操作系统以及一大堆开发工具、软件架构、网络服务等方面的升级。由于疫情的原因,这两年的WWDC都是采用录播形式,不过从视频内容上看,反倒比以前传达地更加精准,对观看者也更加地友善。本文仅从我个人感兴趣的几个角度进行一点介绍,并结合这段时间的学习谈谈使用感受。

操作系统

这几年苹果的系统一直保持一种渐进式的升级态势,即使是大版本号升级通常并不会给人特别大的惊喜和改变。不过也正是在这种逐步的变化中,苹果不断的将它多个系统的联系变得更加紧密,生态建设的愈发完善。网上已经有了大量关于系统新功能的文章,所以我仅从自己的使用上谈几点感受。

iOS 15在旧设备上的效率相当不错(我在一台iPhone7上进行了安装)。相较于iPhone,iPad上对于多任务、多窗口的交互提升观感更明显。在后期软件适配跟上的情况下,iPad应用或许会有一个新的爆发。Monterey第一个版本的稳定度明显好于去年的Big Sur,界面细节的统一性也不错。相较于去年的大规模UI改变,今年在UI上更多是完善和细节改进。watchOS 8我没有在实机上测试,我对它新的体能训练类型以及睡眠呼吸率比较感兴趣。

抛开表面功能,因为今年苹果在Swift语言以及系统框架的大规模提升,相信不久后适配了新框架和新服务的App在新系统上会有很不一样的表现。由于今年绝大多数的Swift语言层面、框架层面的新功能都不会下放到老版本的操作系统,所以估计苹果也会继续加大力度促使用户升级。好在,新系统对硬件的涵盖比较广,和最近几年的系统对硬件需求差不多,估计用户的系统更新速度应该会比较快。

Swift

Swift 5.5可以说是在5.0发布以后最重大的更新。在今年Swift重构了异步和多线程的解决方案,并提供了结构式多线程Actor等重磅功能。

Swift 5.5目前提供的异步、多线程方式对于开发者来说非常友好,从最近的使用来看不仅上手容易,而且可以让自己的代码在极短的时间中受益。目前距离Swift 5.5正式发布还有一段时间,除了不可避免的Bug外,关键字、语法等也还在不断变化中。Xcode13 beta1中的Swift Toolchain关于异步调用语法已经和 最近的snapshot中有不小的改变。尽管如此,我还是推荐每一个Swift开发者都能够尽快地了解这些新的工具、模式,进而可以从另一个角度来思考编程的逻辑。关于异步、多线程的部分,我会在接下来一段时间写几篇文章做更多的介绍。

另一个让我非常有感的Swift增强是在通用上下文中扩展了静态成员的查找功能。这个看似不大的改动将极大地提高了自动补全的表现。官方框架已经对该功能做了充分适配,使用Xcode13你会感慨原来自动补全也可以这么好用。

相较于第一个重磅功能,其他的如#if表达式、本地化的lazy属性包装器可用于函数枚举适配编码Double—CGFloat相互转换等只能说是正常提升了。

SwiftUI

学习和使用下来的总体感觉是继续补强和规范。

如果单看Keynote,你会感觉好像苹果为SwiftUI带来了好多新的能力,不过仔细分析后会发现其中绝大多数都已经有较成熟的第三方解决方案了,当然官方的方案确实设计的统一性较好且实现地很优雅,相信这也将影响不少的SwiftUI三方库作者。提几个我个人感触较大的改进:

  • 输入的全面提升。从Formatter绑定focusedState的添加,从onsubmitsubmitLable以及Toolbar中的keyboard placement,总之全平台上的输入逻辑和设计都有了令人欣喜的提高。官方的方案如果单看某个平台的表现未必最好,不过它的多平台适配能力确实令人佩服。
  • 异步概念的全面导入taskrefreshable中都是直接可以执行异步代码的上下文。由于Swift 5.5异步编程的简化,苹果在各个框架上都会强力引导开发者采用异步、多线程的方式进行编程。
  • 富文本和符号的增强。Text中可以直接使用Markdown符号,尤其是新增的AttributedString,开发者可以自定义Markdown符号(使用效果非常好,有很高的想象空间)。Text + AttributedString解决了SwiftUI上富文本一个非常大的短板。SF 3.0近一步增加了符号种类,添加了更多的渲染方式,为我这样的个人开发者进一步减轻了美工压力。其他如文本动态尺寸限制、符号变体等也都比较有特点。
  • 样式化趋势明显。将一些之前需要定义颜色、尺寸等多个步骤的工作统一成style。同时也添加了Material样式。苹果在SwiftUI上喜欢为各个控件使用类似xxxstyle来定义它的样式,得益于Swift 5.5的静态成员查找能力,在代码中调用样式更加方便。这个也会很快在第三方控件上体现出来。
  • 列表的全面补强。List作为使用量巨大的控件一直以来在SwiftUI上都有诸多的不足。此次更新添加了诸多期待已久的功能并且调用的方式很SwiftUI化。ForEach可以使用绑定数据、searchable搜索解决方案、swipeAction的侧滑按钮等等,使得以前只能通过重新包装、数据注入才能解决的问题,多数可以直接使用官方提供的方案。另外值得一提的是,终于可以取消分割线了。Section的加入为数据的组织方式添加了更多的选项。
  • 按钮的全方位提升。此次SwiftUI为各类Button提供了非常好的扩展,比如controlGroup在各个不同平台的不同呈现,通过buttonStylecontrolSizecontrolProminecerole:等等仅用几行代码便可以获得官方美工级别的按钮样式,Menu也支持了二级菜单,并且为mac平台添加了.button的style等等。总之在本次版本中按钮呈现的改进是当今任何第三方开发者都没能达到的高度。
  • CoreData配合度近一步提高。@fetchRequest终于支持动态修改sortDescripte和predicate了,另外配合Section新增了@SectionedFetchRequest,极大的提升了List的表现能力。
  • 其他比较有特点的还有:CanvasTimeLineViewconfirmationDialog等等众多的新功能。

其中绝大多数的功能,我在之后会通过文章更详细的和大家分享。

遗憾的是,NavigationView没有在此次升级中补强。

另外,在本次WWDC上的Demystify SwiftUI绝对不容错过,通过对身份、生命周期、依赖的详细讲述让开发者了解SwiftUI的开发哲学及核心原则,并掌握如何使用它们来保证应用程序的准确和性能。

CoreData + Cloudkit

CoreData在今年的改动不多,主要体现在对同步和多线程的支持上。在本次WWDC之前坊间传闻并期望的SwiftData并没有出现。不过Cloudkit今年还是给我带来了巨大的惊喜:支持了本地化操作的Share数据库

在2019年,通过NSPersistentCloudKitContainer苹果打通了Coredata同cloudkit上的私有库,去年带来了公有库的本地化,今年终于将最后的短板补齐,让开发者可以轻松实现app用户同其他的icloud用户实时分享数据。为了实现这个功能,Cloudkit改善了它同本地数据的同步机制,响应不像去年的公共库同步那么迟钝。在今年WWDC众多的新功能中,Share Data是我一直最想要的功能!

Xcode

首先最直观的感觉很多的图标变得比以前精致了。Xcode Cloud看起来不错,但对于个人开发者的我来说还没有什么特别大的吸引力。如果你是Vim用户,一定会对Vim模式的到来感到兴奋。版本控制终于得到了提升,不仅在功能上,即使在界面布局上也看出了此次苹果对于版本控制重要性的认识有了提高。得益于Swift的改进,代码补全、错误提示比之前有了不小的进步(测试版中,错误提示还是有点诡异的)。最后,有两个并不完全属于Xcode的功能反倒值得特别注意:

  • 集成了Swift Package Collection。本次苹果推出了Swift Package Collection,为用户分享和组织第三方库提供了新的选择。Xcode已经全面集成了对此的支持。
  • 全面集成Docc。我从2019年开始接触mac编程,当时的苹果的文档内容并不丰富,这两年有了不小的进步。在第一次看到SwiftUI的官方的交互式教程时我相当震惊,希望将来会有更多的类似文档资料。今年,苹果开发了Docc,一个可以直接从代码构建美丽、交互式和原生文档的新工具。使用它,很轻松地就可以开发出类似苹果官方文档质量的文档集合。苹果在今年内会将其开源,届时即使是其他平台的IDE 或者其他的开发语言都可以使用它进行文档工作。

其他

WWDC涉及的领域实在是太多了,大多数的Session我都没有时间观看和学习。除了上面提到的变化外,我额外关注了Foundation在今年的变化。苹果着重介绍了AttributedStringFormatter。AttributedString绝对是接下来在苹果开发生态中富文本的主力,Formatter对国际化、本地化的支持也达到了空前的高度。另外,从SwiftUI的Text和TextField都可以直接使用Formatter的情况来看,苹果将来会在其官方框架中增加对开发人员的引导。

关于WWDC的资料

下面是我观看和学习WWDC中使用的一些资源:

  • Developer (mac AppStore 和 iOS appStore都可以下载)。推荐使用这个app来观看视频,可以点击每个Session的旁白或代码片段快速跳转到对应视频片段
  • WWDC 官方演示代码在此网址可以查询视频中提及的演示项目的完整代码
  • WWDC NOTES各个Essential的图文整理
  • HackingWithSwift以及他的油管频道
  • WWDC21Lounges的QA汇总
在CoreData中使用持久化历史跟踪在Linux系统上搭建Swift开发调试环境