如何评价 2020 苹果全球开发者大会（WWDC20）？有哪些惊喜或者遗憾？
从 iOS 和 Mac 开发者角度来谈谈几个我关注的点。 部分小标题里我会附上几个相关链接，若你感兴趣可以点击阅读。 先纠正个误解，开发者大会不只是这个视频，而是接下来一周的 100 多个视频。 第二个重要视频内容 Platforms State of the Union 已更新。 所有平台的开发者测试版我装好了，一些实际体验后的想法放在文末了。 约了几个关于 AR ，ARM Mac 和 PencilKit 的一对一问答。这里不能分享我的提问和苹果工程师的回答，但可以说下 WWDC 视频里已经谈到的几个点，还有我的一点想法。USDZ 格式目前的导出工作流比较完善了，不够第三方软件的直接支持还需要一点时间，取决于相应软件自己的开发规划，对于不支持的格式转化格式比较推荐 GLTF，目前的 Reality Converter 转化已经比较让人满意了；PencilKit 这边稍微有点失望，目前许多 API 仍未开放，开发者想要更深度的定制 PencilKit 的界面或者功能仍然十分困难；Mac Catalyst 这边仍是接下来几年针对 Mac 的推荐移植方式，未来的 iOS 应用会直接以完全未修改的方式跑在 Mac 上，开发者想要定制的话还是得走 Catalyst 这条路，早开始的话好一些。 Xcode 12 支持跨平台编译 目前所有开发者版本已放出，预计和下午的 Platform of Union 一起更新。Xcode 12 支持新的应用创建 iOS，iPadOS，macOS 全平台应用。配合 Mac 版 ARM 的更新，苹果全平台彻底打通。  Mac 会支持所有 iOS 应用 对，你听得没错，以后所有的 iPhone 和 iPad 应用都可以跨平台直接跑在 ARM 版本的 Mac 上了，无需重新编译。实际上这就是这一次 Mac 迁移的重点。这里面的优势是 Intel 芯片无论如何也没办法具备的，也是很多人之前看不到的，是自然而来的所有应用的支持。 Linux 架构的创始人说到，开发和编译的设备的最优解是同架构运行。也就是说，为 iOS 开发的最佳设备，是与其架构相同的 ARM 电脑。那么之前为什么不这么做呢？是因为当时的 ARM 芯片性能还没发展到与英特尔抗衡的程度，现在时候到了，当然是原生的开发机器最适合。 未来，你会在 ARM 的电脑上看到所有 iOS 的应用，但在 Intel 的机器上就没办法运行。嗯，也就是现在所有的 Mac 都不行，这个支持没办法倒过来。 Mac 全新设计 苹果已经在 iOS 上使用了几年的「材料」设计终于全部应用在 Mac 平台了，就是大家看到的那层半透明磨砂效果。下图我在我的应用中用了这层材质，这就是新 Mac 设计上边栏的材质，有助于用户在专注于内容的同时不失去对被其压住内容的感知。 你可以关注一下顶部的边栏，可以看到我所说的材质特效。最有趣的是 Craig 的这台展示用 Mac Pro 跑的就是 iPad Pro 上那颗 A12Z 芯片。确实就是年底更新的 iMac 的前瞻了。 ARM 版本的 Mac 我之前在使用 Catalyst 来移植 iPad 应用到 Mac 上。在 WWDC 开始之前，我说很次的翻译器会保证开始时可以使用全部应用，很多人不相信。其实逻辑很直接，苹果自家的许多应用早在去年就已经迁移到 SwiftUI，而 SwiftUI 是跨平台描述性界面语言，因此之前有的苹果应用只需要自己重兴给 Mac 编译一次，或者直接跑 iPad 版就行，连编译都不需要。 Windows 搞出来的 WOW64 兼容层已经可以满足 x86 的应用运行，没理由苹果不能给出相似的答案。在图形层，苹果摒弃了 OpenGL 换用自家的跨平台 Metal 框架，已经过了许多年。今天苹果在 WWDC 上给出了自家应用的答案，比如 Final Cut Pro X，又完成了所有自家应用的原生 ARM 移植，便是告诉世人我们已经搞定了。 刚刚发布的 Developer Kit 用的是 A12Z，年底发布的 iMac ARM 版预计会采用新的 A14Z 芯片，要放到年底估计是因为 5 纳米的产能目前必须先留给 iPhone。而每一代新的 A 芯片一般要由 iPhone 先发。对很多用苹果框架的开发者来说，苹果说的 Universal 2 指的是开发者用将文件架构也编译给 ARM 一份。比如你看下图中，我现在编译的应用写的是 Intel 64-bit，今天下午发布的 Xcode 14 应该就可以编译到 Mac ARM 版本了。 iOS 14 快速触发 关于 iOS 14，有几个点值得一说。第一个是应用快速触发，这允许用户不下载应用，既可以快速使用很多应用的功能。对于开发者来说，需要设计一个新的界面，支持快速下载着一个小区域以便用户快速用到。 这是个非常实用的功能，方便了用户和开发者。许多新的开发者会遇到的问题是自己的应用用户根本看不到，有了这个东西，至少保证了一些便民的应用可以更容易的被大家发现。对于我这种不喜欢装许多应用的人，也不必担心在装一堆垃圾应用。但是关于这个快速触发的应用，怎么保存是我比较关注的点。 比如这次下载后，下次使用快捷应用还需要再次下载吗？这些东西应该会在下午面向开发者的 State of Union 上详解。我会持续关注这一点，未来的应用中也会带来对快速触发的支持，很有意思。（更新：快速触发已经出发后可在接下来的 8 小时内推送消息。） iPhone 上的 U1 芯片 很多时候，大家会发现苹果往设备里塞进去一些看起来暂时没用的芯片，其实都会有用。比如前几天 iPad Pro 塞进去的那颗雷达传感器。今天我在 WWDC 上就看到了新的 DepthKit 开发者套件。与之同理，这次的空间感知 U1 芯片被用在了作为车钥匙的手机位置感知上面。这很重要，因为现有的技术在判断距离上都不够完美，比如蓝牙并不能明确告知你距离车的距离，只能有个大概范围。这样的话其实用在解锁车辆上十分危险，我开的车之前就因为自动落锁判断距离过远而被偷窃。 因此苹果用这颗 U1 芯片解决了目前对距离和行为判断不够精确的问题。未来还可能在 AirTag 上有更近一步的应用。 A 系列芯片机器学习发力 苹果在今天发布了这个翻译应用，很多人可能觉得比较无聊抢别人的生意。其实这是个非常厉害的软件。在这次发布之前，我曾考虑过做一个离线语言识别的工具，用来识别课程上的文字内容。之前的结果一直不满意，在线版本会侵犯用户的隐私，离线版本识别效率太差。 这回苹果终于把支持机器学习的识别算法拿出来，做了这么个翻译应用，是在保护隐私的基础上更进一步开发机器学习的又一个重要板块。大家可能没注意，谷歌今年年初也拿出来了个类似的离线翻译器，苹果这次终于在离线语音识别上跟上了。 未来值得关注的是这个翻译 API 是否会放出，以及翻译 API 是否会采用机器学习的算法。目前市面上翻译效果最优的便是有充足语言数据库的 DeepL，很期待苹果这次全新翻译 API 的表现，测试结果会在文末实机测试里更新。 Safari 和应用追踪器的明示 保护隐私的理想状态便是离线处理。对于 Safari 来说想做到这一点不现实，那么有没有别的办法呢？就是告知用户自己都在被谁追踪。其实很多用户非常纳闷的问题就是，我明明没用某个软件，为什么我的信息还是被泄漏了？关于应用如何泄露隐私，我在这里回答过。 其实这和广告联盟有关。你的隐私不只被一家公司售卖，更可能同时被多家公司售卖。这次苹果展示用的网站上就有十几个信息追踪器，比如亚马逊的广告平台，谷歌的广告平台等。明示之后，用户自己心里有数，信息被各方窃听。 iPad 越来越像 Mac 你看这次全新设计的全局搜索，像不像 Mac 上的 Spotlight 搜索框架？像就对了，苹果这次把文件的索引估计全部更新在 iPad 上了。以后用 Spotlight MetaDataQuery 框架的应用内容应该都能被搜索到，会是个非常方便的功能，也是在 iPad 上文件索引的进一步提升。 Pencil 手绘文字离线识别 目前手写应用比如 Notability 支持的手写识别用的都是联网识别方案，这样的好处是非常准确，缺点也明显，你的隐私从你识别的那一刹那就不是你的了，因为上传到别人的服务器里去了。这次的苹果自家 PencilKit 的识别不出意外是苹果自己训练好的离线识别机器学习模型，很期待其识别的准确度。 而且配合 TextField 文字书写的 Scribble 功能，保证了体验的一致性。我也会在我的应用书空中第一时间更新这个新的识别功能。 Watch 上的个性表盘 手表方面，今年 WWDC 上着重展示的自定义表盘很有意思，第一次允许开发者直接动用户直接看到的表面屏幕。而且这次开发者大会上宣布允许开发者使用 SwiftUI 开定义这个部分，那以后大家会看到许多自定义的全新表盘内容，毕竟开发者这里的权限放宽松了。以后我也会开发支持自定义表盘的应用，很期待，新应用准备采用全新的 Combine 框架。 Platforms State of the Union 更新 首先是 Find My 加入了对第三方设备的支持，以后你不但可以在这里找到自己的苹果设备，也可以寻找其它厂商的支持设备。 我看到有人在问 iOS 和 macOS 是什么关系，以后是不是 iPad 可以跑 macOS。我觉得下面这张图可能给你解答，iOS 和 macOS 底层，图形层，内核层都是一个东西。现在可以跑在不同的硬件架构上，因此不存在 Mac 跑在 iPad 的问题，它们本质上是一个东西。最上层的显示层不同罢了，而这两个设备有不同的现实需求，所以不可能移植 Mac 到 iPad。这次 macOS 11 的关注重点也是提升 Mac 和 iPad 视觉和体验上的一致性。 关于为什么要换 ARM，这颗芯片有众多特有的控制器，能在未来进一步扩展 Mac 的使用场景。比如更好的封装技术，安全芯片集成，更高效的 DRAM 和 GPU。 关于 Mac 11 Big Sur。大家可能关注它应用运行的方式，大致如下。苹果自家全部应用包括专业应用已完成 ARM 版编译；第三方原生 AppKit 的应用需开发者重新编译到 Universal Mac；iOS 应用直接原生的跑就可以；虚拟机应用会运行在 Big Sur 给它的虚拟环境中；开发者想要自定义原生 iOS 应用的话需要在 Xcode 打开对 Catalyst 的支持；第三方应用会 Mac 自动用 Rosetta 2 自动翻译到 ARM 版，商店内的应用下载前自动完成翻译，网上下载的应用安装时完成翻译。 关于翻译器的性能方面，这里用的演示是 Unity Rosetta 兼容的版本。在 A12Z 上直接跑的 HDRP(高清渲染管线)的实机测试。要知道这个 HDRP 本身是 Unity 最新且最高清的渲染方式，跑起来没有卡顿感，实在厉害。而且 Unity 的 Graph 也用进去了。翻译层虽然有性能折损，不过它跑这个比我的 Intel 6 核配外置 GPU 跑的感觉差不多。不服不行，折损看样子完全可以接受。即便如此，Unity 一个月以后会发布 ARM 的版本。用 Unity 的人大概已经发现现在默认都是 Metal 渲染了，图形性能可以直接原生指令的性能跑开，即便兼容层也是如此，因此图形性能折损极低。 上面有聊到 Mac 和 iPad 界面观感的统一。比如 iPadOS 也支持了像 Mac 一样的颜色选择菜单。对于喜欢用原生色盘的人有福气了，希望很快也能看到 Sketch 的 iPad Pro 版本。 上文说到的 DepthKit，也就是那个雷达传感器又多了几个演示。现在 ARKit 不但支持分析物品类别，还增加了完整的深度数据反馈，对于专业 3D 应用，需要生成深度地图，都不是事了。物品间的位置关系也可以做到，比如你的 AR 物件可以藏在现实存在的椅子背后，用深度数据就可以判断遮挡关系。 这次的更新讲了很多关于 SwiftUI 和 Mac 及 iPad 侧边栏的应用。这次 iPad 侧边栏支持第三级左边侧滑呼出，以后会成为常态。得益于 SwiftUI ViewBuilder 的应用，以后大家会在第三方应用中看到更复杂的界面排版。 苹果自家应用现已几乎全部迁移到 Catalyst 上面。左侧边栏将支持在 Plist 中对颜色的描述。边栏图标也受益于 SF Symbol 得以自定义大小。发布会上说 SF Symbol 会在侧边栏中得到更广泛的应用。 关于全平台上新的小工具。为保证这些工具的显示不干扰主界面的稳定，且保证其最佳流畅度。这次主屏上的小工具采用最新的 SwiftUI View, 组合成一个 Archived View，最后交给显卡完成异步渲染。 设备实测 刚刚所有有设备更新完，晚点我来详细谈谈变化。我留了 Mac 更新前后的两张截图，大家可以对比看看，明显感知的是这次图标全部 iOS 的圆角化了。你可能会有点好奇为什么 Pages 文稿之类的图标没变。像 FCPX，iWork 这些软件都会在 Big Sur 九月份正式版发布后更新。 这次更新我个人最期待的就是 Safari 在隐私保护方面的进一步提升。测试了下，用 Safari 打开这个问答网站，发现它原来是谷歌广告联盟的成员，难怪总给我推荐最近搜索的内容，有内鬼。生气。 新的材质毛玻璃特效很好看，Safari 整体观感又上了一个台阶，翻译效果也还行。说到翻译，我又用 iOS 14 的 iPhone 仔细测试了几段话。断开网这个苹果的翻译就中断了，飞行模式也不行，但是允许用户下载本地翻译。几个结论：1. 在线版翻译结果和谷歌翻译差不多，和 DeepL 差得很远。2. 离线版翻译效果更差一些。3. 苹果没有放出这个翻译的开发者 API，估计是还不甚满意。 Mac 这会的新界面设计很干净，上边栏按钮设计有种 Fedora OS 的即视感。信息中心彻底重新设计，整个系统都大幅去除了背景底色。所以这些通知看起来像悬浮着的，个人蛮喜欢新设计的。Mac 的声音也重新设计了，很有趣。扔垃圾，确认，拖动的声音都是新的。 刚刚下楼去试了一下 CarPlay，果然如苹果所说，就增加了个壁纸的选择，大概是这样的。其他的按钮我都点了一遍，好像没什么新功能了。 刚好在在北美，苹果今年说这边地图更新成高清地图了，效果大概是这样。看起来细节还不错，就是不知道准确度提高了没有。这个导航之前老坑人，确实有几次导航去了不知名的断路上。 与开发者有关的内容 下面这张图是今年给开发者 WWDC 2020 更新的框架内容。主要关注点是 Catalyst 将 iOS 应用更完善的移植到 Mac 上；开发者工具 Xcode 功能提升与新设计（比如个人很喜欢的双击打开新选项卡）；SwiftUI 跨平台 UI 框架的进步；新的悬浮窗组建 Widgets；ML 机器学习框架的提升；ARKit 4 和 RealityKit 为 2022 年发布的眼镜做准备；Swift Package Manager 的素材文件打包；AirPods 新的位置框架等。 Xcode 12 的全平台开发包居然去掉了 AppDegelate, SceneDelegate 和 LaunchStorybord。直接改成 @main 为程序的入口了，方便太多。这会终于是 SwiftUI 的完全体，而不是 UIHostingViewController 了。新的设计如下，很简洁，标签页也比之前好用很多了。  今年的课程表放出来了，看起来接下来的 4 天每天早上 PDT 10 点会放出二三十节课，选几个我比较感兴趣的聊一聊。首先是 SF Symbol，这是苹果给大家用的图标库，集成起来非常方便，大家会在侧边栏里看到许多这些图标。它终于出第二代了，带了许多的彩色图标。之前一直觉得一代的图标有些不够用，哈哈哈，看到这个更新非常开心。 这个也值得一说，新的视觉框架要更新了。VisionKit 是为了机器学习准备的框架，好像人的眼镜一样，主要负责各种识别的功能。这次的框架更新是为了检测身体和手的姿势，意图很明显了，是帮助开发者准备即将到来的 AR 眼镜开发。 关于 CollectionView 除了一些列视频我到是有点惊讶。本来看 Union 视频的结尾讨论到 SwiftUI 新增的 lazyView 可以渲染多数据，配合 switch 语法我还以为 CollectionView 以后要靠自己了，这次更新很多关于它的视频有点意外，明天看看再说。 有一堆关于新的关于应用快速触发的视频，这个不意外。这估计是 iOS 14 开发者升级自己应用的重头戏。毕竟有这么好的宣传机会不能放过，大概会有很多停车场的，饭馆的应用会用上这个。 关于 PencilKit 的笔迹识别放开了，这个新的 PKStroke 允许想我样用自家笔迹框架的开发者可以更自由的定义笔划，我猜测是这样。具体得看明天的视频，很期待。当然与此相对应的还有一堆关于 Scribble 和 PencilKit 的视频。 之前有人好奇这个 U1 芯片开发者怎么才能用到。这不视频就来了，这个新的近距离互动框架负责空降感知，可以检测多个设备的相对位置等。 看样子苹果是不打算继续用 AMD 的 GPU 了。这回的迁移视屏里已经去掉了 AMD GPU。还有一点有趣的事情是 metalDevice 获取的苹果 GPU 性能方面归属于独立 GPU，看来苹果这次是要对标 Navi 系列的性能了，有点意思。 （这篇问答有点长编辑不便，本小节内容移到下面的回答里继续更新。） 关于苹果设备及软件开发 今天苹果的 WWDC 中聊到了未来还会发布部分采用英特尔芯片的产品。估计有人会关注MBP 未来的发展趋势如何。我在这篇回答中讨论了我对外接独立显卡和 GPU 发展的预估。 对于独立显卡本身感兴趣的，可以看我的这篇科普： 关于 iMac 采用 ARM 芯片的原因，为什么单核性能很重要，我在这篇回答讨论过过了。 关于 AirPods Studio 和立体声场，我的看法是它是给 Studio 耳机铺路用的，用在 Pro 上首发。其实 Pro 并不是最适合立体声场的设备，Studio 耳机会和去掉耳机口的新一代 Mac 一起发布。 关于苹果的设计和 iPadOS 对光标的支持，我在这里讨论过。 关于 Catalyst 移植的现状及开发者体验，我在这篇回答里分析过。 关于 Apple Pencil 如何识别笔点位置的，这里回答过。 对苹果 A12 处理器和显卡进度感兴趣的，我在这里有回答。 对于这次开发者大会的框架更新，我在这里谈论过期待。 关于独立开发，我写过我的开发流程。 对于对 Swift 感兴趣，或者对 iOS 开发感兴趣的人，我写过入门流程。 （本文边写边保存，会在我看完新的 WWDC 视频后更新。本次 WWDC 2020 持续一周，预计会有 100 个以上针对开发者的新视频。） 如果你想叫我写适用于未来五年的 iOS 教程，可以加我的微信：caryota 并注明 iOS 教程。我会把你拉到一个群里，需求的人多的话我就会系统性的出个教程，带你入门到把应用上架，并对应用上架后的宣传等做出讲解。