WWDC Quick Look 💓 By SwiftGGTeam
Platforms State of the Union

Platforms State of the Union

观看原视频

Highlight

Apple 宣布 Mac 从 Intel 处理器转向自研 Apple Silicon,同时发布 macOS Big Sur、iOS 14(Widgets + App Clips)、iPadOS 14(Sidebar + Scribble)、watchOS 7(SwiftUI 表盘组件)和 Xcode 12。统一架构使未修改的 iPhone/iPad 应用首次可直接在 Mac 上运行。


核心内容

这场 State of the Union 不是单个框架发布会。它回答的是 2020 年开发者最现实的问题:Mac 要换处理器,iOS 主屏幕要开放给第三方信息,iPad 要从大号 iPhone 继续长成独立平台,watchOS 要把表盘变成应用入口。开发者不能只看一个 API,需要判断自己的应用会在哪些入口被用户发现、在哪些硬件上运行、在哪些系统 UI 里被重新呈现。

过去,Apple 平台的边界很清楚。Mac 应用有自己的二进制和窗口模型,iPhone/iPad 应用停在触控设备上,Watch 表盘组件依赖 ClockKit,iOS 应用的轻量体验通常要靠网页或完整安装。2020 年的变化把这些边界往中间推:Universal app 同时包含 Apple Silicon 和 Intel 代码,iPhone/iPad 应用可以在 Apple Silicon Mac 上运行,WidgetKit 把 SwiftUI 视图带到主屏幕,App Clips 把一个任务拆成 10MB 以内的即时体验。

这也解释了为什么 SwiftUI 在整场演讲里反复出现。macOS 的 Notification Center 用 SwiftUI 构建,WidgetKit 依赖 SwiftUI 视图归档,watchOS 7 的 complication 可以复用 SwiftUI 视图,SwiftUI 自己也新增了 Lazy stacks、grids、@mainDocumentGroup。Apple 给出的路线很明确:系统入口变多,平台差异仍然存在,但构建方式要尽量共享。


详细内容

Apple Silicon:Mac 迁移从 Universal app 开始

01:35)Apple 把 Mac 转向自研 Apple Silicon 放在开场。变化范围超过 CPU 指令集本身,一整套 SoC 能力进入 Mac:统一内存架构让 GPU 访问数据时减少延迟,Neural Engine 加速机器学习推理,Secure Enclave 继续保护用户密钥,Metal 和 Apple GPU 面向图形与游戏场景优化。

17:09)开发者的第一步是创建 Universal app。一个 Universal app 同时包含 Apple Silicon 和 Intel 处理器的代码,两个二进制 slice 放在同一个可执行文件里,系统按当前 Mac 的硬件架构选择要运行的版本。资源文件、图片、机器学习模型不需要为两种架构拆分。

Mac 迁移工作流
1. 用 Xcode 12 打开现有 Mac 项目。
2. 选择新的 "Any Mac" 构建目标。
3. 使用 Standard Architectures 生成 Universal app。
4. 在 Apple Silicon 和 Intel Mac 上分别运行、调试和测试。
5. 对暂时不能原生迁移的部分,依赖 Rosetta 2 作为过渡方案。

关键点:

  • Any Mac 是 Xcode 12 提供的 Universal 构建入口。
  • Standard Architectures 会同时包含 Apple Silicon 和 Intel 架构。
  • AppKit、SwiftUI、Mac Catalyst 项目都被点名为可较快转成 Universal。
  • Apple 同时提供 Developer Transition Kit(DTK),内置 A12Z、macOS Big Sur 预览版和支持双架构构建的 Xcode。

23:35)Rosetta 2 是迁移期的兼容层。它把 Intel 可执行文件翻译成 ARM 指令,安装自 Mac App Store 或 package 的应用会在后台提前翻译;动态加载代码或 JIT 代码会在运行时翻译。Metal 图形调用会转成 Apple SoC 上 GPU 的原生调用,系统调用也会转成内核原生调用。Apple 把它定位为过渡技术,目的是给开发者留出完成原生支持的时间。

32:00)Apple Silicon 还让未修改的 iPhone/iPad 应用进入 Mac。原因是 Mac Catalyst 背后的 iOS frameworks 在 Apple Silicon Mac 上具备二进制兼容性。演讲中展示了 Monument Valley 和 Documents by Readdle:iOS 应用会出现在 Dock,获得自动生成的菜单栏、偏好设置面板、窗口最小化、可调整窗口、macOS 滚动条、系统打开面板和分享服务。开发者仍然可以选择是否让自己的 iOS/iPadOS 应用在 Mac App Store 上架。

macOS Big Sur:设计更新也影响代码结构

38:08)Big Sur 的新界面目标是减少视觉杂乱,同时让 macOS 与 iPadOS 有更强的家族感。Dock、图标、菜单栏、sheet、toolbar、sidebar、Control Center、Notification Center 都被重做。Notification Center 完全用 SwiftUI 构建,通知和 widget 同时呈现,应用可以用 Notification API 提供自定义内容扩展。

40:54)工具栏不只是换皮。搜索栏可以在空间不足时折叠成 glyph,三栏布局可以把 toolbar 分成和不同 pane 对应的区域,AppKit 和 Mac Catalyst 都新增了表达这种分隔的 toolbar API。SwiftUI toolbar 附着在 NavigationView pane 上时会自动得到分隔线。Apple 明确建议还没有使用 NSToolbar 的 Mac 应用开始采用它。

Big Sur UI 适配清单
1. 使用 toolbar、full-size content view、带 sidebar 样式的 split-view controller。
2. 把搜索框放进新的 search toolbar item,让系统处理折叠和展开。
3. 用 SF Symbols 作为 toolbar 和 sidebar 图标来源。
4. 在 Info.plist 中提供应用强调色,让选中态、sidebar 图标和标准控件保持一致。
5. 对 Mac Catalyst 应用评估 Mac idiom,改用 Mac 原生分辨率。

关键点:

  • Big Sur 会自动给合规窗口采用新的结构,不需要每个像素手动重画。
  • SF Symbols 在 Mac 上可按文字大小和粗细配置,适合 sidebar 和 toolbar。
  • 应用强调色来自 plist,影响系统控件,不是自绘主题。
  • Mac Catalyst 新增 Mac idiom,可避免沿用 iPad 缩放界面。
  • macOS 版本号从 10.x 跳到 macOS 11,Apple 用这个变化强调 Big Sur 是一次系统级更新。

iPadOS 14:Sidebar、输入控件、LiDAR 与 Scribble

47:21)iPadOS 14 的重点是让大屏应用更容易导航。新的 sidebar 可在所有尺寸 iPad 上从两栏扩展到三栏,竖屏也可用。Photos 把原来底部 tab bar 里的 Library 和 Albums 移到 sidebar,又把 Favorites 和 Places 这类深层入口提前。outline 支持层级和折叠,相关能力建立在 SwiftUI 和 UIKit 已有组件上。

48:46)输入控件也变得更系统化:日期选择器支持内联日历和紧凑样式,emoji picker 可用和 macOS 相同的快捷键唤起,颜色选择器 API 提供保存常用颜色和屏幕取色能力。Apple 给出的设计方向很具体:减少 modal 状态,提升深层功能的可发现性。

51:36)iPad Pro 的 LiDAR Scanner 通过 ARKit 暴露能力。Scene Geometry 提供场景 3D mesh,Depth API 给出 LiDAR 捕捉的精确距离信息。演讲把它用于更真实的 AR 放置、Motion Capture、People Occlusion,以及 Shapr3D 这类专业应用的房间扫描。

53:51)Scribble 让标准 UITextField 自动支持 Apple Pencil 手写转文本。PencilKit 新增 Canvas API、Stroke API 和 Drawing Policy API:Stroke API 在用户书写时提供角度、压力、墨水类型和精确位置;Drawing Policy 用于区分手指滚动区域、自由绘制区域和文本输入区域。

iPad 应用升级路径
1. 把底部 tab 或深层列表中的核心入口移到 sidebar。
2. 对有层级的数据使用 outline 和可折叠项目。
3. 用系统 date picker、color picker、emoji picker 替换自定义输入面板。
4. 对 Apple Pencil 场景,先确认标准文本框是否已满足 Scribble。
5. 需要实时笔迹分析时,再接入 PencilKit Stroke API。

关键点:

  • Sidebar 是导航结构调整,不只是视觉组件。
  • Picker 更新解决的是数据录入效率和一致性。
  • LiDAR 能力通过 ARKit 暴露,开发者拿到的是 scene mesh 和 depth 信息。
  • Scribble 对标准文本框自动生效,已有 PencilKit 应用可继承多项新能力。

iOS 14:WidgetKit 和 App Clips 改变发现入口

58:43)WidgetKit 的核心模型是 timeline entry。每个 entry 包含 SwiftUI 视图归档、时间日期和 relevance score。系统会在 widget 既及时又可见时按需渲染,不需要运行应用进程。Smart Stack 会用设备端智能和 relevance score,把当前更相关的 widget 转到栈顶。

01:01:34)开发者定义 widget 时,需要符合 Widget 协议并返回 widget configuration。这个 configuration 由 widget kind 和 timeline provider 组成。timeline provider 负责 snapshot 和一组带时间的 timeline entries。可配置 widget 使用 Intents framework,系统会按传入参数生成配置 UI。

WidgetKit 内容模型
1. Widget extension 定义 widget。
2. Widget configuration 指向 timeline provider。
3. Snapshot 返回单个 entry,供系统展示预览或临时状态。
4. Timeline 返回一组 entry,声明每个内容何时显示。
5. Relevance score 告诉 Smart Stack 哪个 entry 更值得被提前展示。

关键点:

  • Widget 不能依赖应用常驻运行,内容要提前组织成 timeline。
  • SwiftUI 视图被序列化成轻量归档,再由系统异步渲染。
  • Widget Gallery 里看到的预览也来自开发者创建的 entry。
  • 可配置 UI 由 Intents framework 生成,适合让用户选择角色、地点、账户等参数。

01:03:53)App Clips 解决的是另一个入口问题:用户只想完成一个当下任务,不想先下载完整 app。App Clip card 由 Apple 根据 App Store 元数据自动生成,用户看到卡片时 App Clip 已在后台下载。它可以用 Apple Pay 支付,用 Sign in with Apple 登录,不会长期占据主屏幕,并可从 App Library 找到近期使用记录。

App Clip 下单流程
1. 在 Xcode 中创建 App Clip target。
2. 只把下单所需的类和 asset catalog 加入 target membership。
3. 控制体积,移除当前任务不需要的库,保持在 10MB 限制内。
4. 用八小时通知权限处理订单完成、停车到期这类短期提醒。
5. 在任务完成时展示 StoreKit overlay,引导用户安装完整 app。

关键点:

  • App Clip 是完整 app 的一小部分,仍然使用 SDK 能力。
  • Apple Pay 和 Sign in with Apple 减少了即时任务里的输入成本。
  • 八小时通知权限只适合短期场景,演讲用停车到期和订单完成说明。
  • App Clip 专用 API 可验证它是否在预期地点被唤起。
  • 升级到完整 app 时,用户在 App Clip 里做出的选择可以迁移过去。

watchOS 7、Xcode 12 和 SwiftUI:把系统入口串起来

01:08:53)watchOS 7 让开发者用 SwiftUI 视图构建 complications,并允许每个 family 创建多个 complication。演讲里的 Whale Watch 示例为不同观测站创建 complication descriptor,每个 descriptor 用站点名称作为唯一标识,点击后可跳到对应详情页;另一个 descriptor 用于快速记录目击信息;复杂的 Season Data complication 只支持大矩形空间。

01:11:05)SwiftUI complications 可以使用 Gauges、Progress Views,或者包装 app 里已有的 SwiftUI 视图。Xcode 12 complication previews 让开发者在不同表盘尺寸、全彩或 tint 模式下预览效果。Watch Face Sharing 把表盘配置分享出去,接收方缺少应用时会在分享流程里进入 App Store 获取。

01:16:51)Xcode 12 的工具变化集中在真实开发流程:StoreKitTest 让内购和订阅配置直接放在项目里,不需要先部署到 App Store;StoreKit Transaction Manager 可在调试时购买、确认、退款,并观察 app 实时更新。SwiftUI previews 增加工具栏,代码补全速度最高提升到 12 倍,Swift Packages 支持 asset catalogs、resources 和本地化内容。

01:21:30)SwiftUI 的新增能力保持 additive,已有代码继续编译运行。性能方面,演讲用 20,000 张照片的例子说明:把普通 stack 换成 Lazy stack 后,启动更快,内存从 500MB 级别降下来;复杂布局可用 lazy grids。应用结构方面,SwiftUI 新增基于 @main 的 app 入口和 DocumentGroup,几行声明即可得到多文档应用、保存状态和 Undo 支持,macOS 还可以添加 Settings scene。

SwiftUI 2020 采用顺序
1. 大列表先评估 Lazy stacks 和 lazy grids。
2. 新项目试用 `@main`、App、Scene、DocumentGroup。
3. 复用 SwiftUI 视图到 widget、watch complication、macOS Notification Center 类入口。
4. 用 Xcode previews 和 Library 支持,把项目内组件沉淀成可复用控件。

关键点:

  • SwiftUI 更新是 additive,迁移风险来自采用新入口,不来自旧代码失效。
  • Lazy stacks 的价值在大数据量视图,演讲用 20,000 张照片说明。
  • DocumentGroup 管理创建和打开文件,系统提供平台原生行为。
  • SwiftUI 在 2020 年同时连接 widget、watchOS complication、macOS 系统 UI 和多平台 app 结构。

核心启发

1. 给现有 Mac 应用做 Apple Silicon 迁移审计

做什么:把现有 AppKit、SwiftUI 或 Mac Catalyst 项目构建成 Universal app,并记录原生运行、Rosetta 运行、插件或驱动依赖的差异。

为什么值得做:这场 session 明确把 Universal app 作为 Mac 迁移的首要路径,Rosetta 2 只是给迁移留时间。

怎么开始:用 Xcode 12 选择 Any Mac,确认项目使用 Standard Architectures,再逐项检查动态加载代码、Audio Units、DriverKit 外设驱动和 out-of-process extension。

2. 决定 iPhone/iPad 应用在 Mac 上的呈现方式

做什么:为 iOS/iPadOS 应用建立一张 Mac 可用性表,区分“直接上架 Apple Silicon Mac”和“用 Mac Catalyst 深度适配”两类。

为什么值得做:未修改的 iPhone/iPad 应用能在 Apple Silicon Mac 上运行,但 Catalyst 提供更多 Mac 定制空间。

怎么开始:检查应用是否依赖 iPad 多窗口、文件访问、分享服务、设置 bundle 和扩展;能直接工作的先允许上架,体验不够像 Mac 的模块再推进 Catalyst。

3. 把应用里的高频信息做成 Widget

做什么:把游戏角色状态、日程提醒、天气预警、库存变化这类“用户不用打开 app 也想知道”的信息放进 widget。

为什么值得做:WidgetKit 通过 timeline entries 和 relevance score 让系统在主屏幕或 Smart Stack 中展示及时内容。

怎么开始:先定义一天内会变化的 timeline,再为小、中、大三种尺寸设计 SwiftUI 视图;需要用户选择对象时,用 Intents framework 交给系统生成配置 UI。

4. 把一个线下或即时任务拆成 App Clip

做什么:为点单、停车缴费、租借设备、展馆签到这类单次任务提供 App Clip。

为什么值得做:App Clip card、Apple Pay、Sign in with Apple、八小时通知权限和 StoreKit overlay 把发现、完成任务、转完整 app 串成了一条短路径。

怎么开始:在 Xcode 新建 App Clip target,只加入当前任务所需代码和资源;用 URL 或现场标识唤起;任务结束时用 StoreKit overlay 给出安装完整 app 的理由。

5. 给 iPad 应用补齐大屏和 Pencil 工作流

做什么:把深层导航迁到 sidebar,用系统 picker 简化输入,并在 Pencil 场景里支持 Scribble 或实时笔迹分析。

为什么值得做:iPadOS 14 的 sidebar、pickers、Scribble、Stroke API 都服务于同一个目标:让 iPad 应用在大屏和 Apple Pencil 下更像生产力工具。

怎么开始:先把关键入口从 tab 或 modal 中抽到 sidebar;把标准文本输入换成 UITextField;已有绘图画布再用 PencilKit Stroke API 获取压力、角度、墨水类型和位置。


关联 Session

评论

GitHub Issues · utterances