Highlight
WWDC 2022 的 Platforms State of the Union 把 Xcode Cloud 上线、Swift 5.7 语法与并发扩展、SwiftUI 新导航和布局、WidgetKit 锁屏能力、App Intents、Passkeys、Metal 3、WeatherKit 与 VisionKit 串成一条平台路线图。
核心内容
如果一个团队要在 2022 年升级 Apple 平台应用,问题不只是“今年多了哪些 API”。真实麻烦来自多个层面同时变化:代码要更容易维护,界面要覆盖更多设备,系统入口从主屏扩展到锁屏、Siri、Spotlight、Messages,图形和地图等底层能力也在前进。
这场 State of the Union 的作用,就是把这些变化放回同一张图里。Susan Prescott 先宣布 Xcode Cloud 当天可用,并说明它集成 TestFlight、App Store Connect、主流 Git 源码托管和 REST API。随后演讲从 Swift、SwiftUI、系统集成、安全、图形、地图、天气、视觉识别一路展开。
开发者得到的是一组可以串起来的路径。Swift 和 SwiftUI 降低日常开发成本;WidgetKit、Live Activities、App Intents、Messages Collaboration API 把功能送到系统表面;Passkeys、Metal 3、WeatherKit、VisionKit 则分别处理登录、图形性能、天气数据和视觉识别这些更具体的问题。
从工具链开始降低摩擦
Xcode Cloud 的定位很直接:把持续集成和交付放进 Xcode,并托管在云端。它支持所有 Apple 平台,连接 TestFlight 和 App Store Connect,也能通过 REST API 接入团队已有流程。对于没有完整 CI/CD 基建的小团队,这意味着从提交代码到测试分发的路径变短。
Swift Playgrounds 4 也被放在同一个工具链故事里。它已经能构建 App、直接提交到 App Store,并支持 SwiftUI。原型、学习、提交形成了一个轻量闭环。
Swift 与 SwiftUI 继续成为主线
Josh Shaffer 把 Apple 平台的下一代组合明确为 Swift、SwiftUI 和 Xcode Previews。Swift 5.7 带来 Async Algorithms、distributed actors、Regex、some 和 any 的泛型写法,以及 Swift Package plugins。SwiftUI 则补上导航、布局、Share Sheet、UIKit collection view cell hosting 等能力。
Food Truck 示例贯穿多个段落。它先用 Swift Charts 展示甜甜圈销售数据,再用 ViewThatFits 处理横竖屏布局,用新的 navigation split view 和 NavigationStack 做 iPad 导航,最后用同一套 SwiftUI 代码把应用带到 Mac,并加入 menu bar extra。
系统入口变多,应用功能要更可发现
iOS 16 锁屏让 WidgetKit 的价值扩大。Circular、Rectangular、Inline 三种锁屏 widget family 把 Apple Watch complication 的设计语言带到 iPhone;watchOS 9 的 complications 也改由 WidgetKit 驱动。同一份 widget 代码可以覆盖锁屏和表盘。
App Intents 处理的是另一个入口问题。过去用户需要手动添加快捷指令,功能才会出现在 Siri 或 Shortcuts。iOS 16 让 App Intents 与 App Shortcuts 结合,用户无需先配置,就可以用 Siri、Shortcuts、Spotlight 找到应用能力。
底层框架让更重的场景落地
Metal 3 聚焦游戏和专业图形。Fast resource loading 通过 Metal IO 减少从存储到 GPU 的加载开销;offline shader compilation 把 GPU shader binary 放到项目构建阶段生成;Mesh Shading API 把几何生成放进更优化的渲染管线;MetalFX upscaling 用较低分辨率渲染,再做 temporal antialiasing 和 upscaling。
WeatherKit、MapKit、VisionKit 展示了另一个方向:系统级服务被开放给应用。WeatherKit 提供原生 Swift API 和 REST API;MapKit 的 3D City Experience、相机控制和 realistic elevation 帮助应用表达更精确的位置;VisionKit 的 Live Text API 和 Data Scanner API 把照片、暂停视频帧、实时摄像头里的文字、二维码和条码带进应用流程。
详细内容
Swift 5.7:并发、Regex、泛型和插件(05:49)
Swift 段落先回到并发。Apple 说 Swift Concurrency 发布第一年已有超过 40,000 个 App 采用,并且现在可以部署到最近三年发布的操作系统。Async Algorithms 把 zip、throttle 这类序列算法带到异步序列上;distributed actors 则把 actor 的隔离模型扩展到进程、设备或 Swift on Server 后端之间。
// transcript 中明确提到的 Swift 入口
async/await
for
try/catch
zip
throttle
distributed actor
关键点:
async/await让异步序列代码保持直线式阅读。for用在 async sequence 上,延续普通序列的写法。try/catch处理网络流式数据中的失败。zip是 Async Algorithms 为异步序列提供的组合算法示例。throttle建立在新的 clock types 上,用来减慢序列更新频率。distributed actor标记可以远程访问的 actor 和方法。
Regex 段落解决字符串解析问题。演讲中的 Food Truck 订单是打包成字符串的数据,新的 regex literal 可以由 Swift 编译器检查,并在 Playground 里显示匹配结果;regex builder 把复杂模式转成 Swift 代码,还能用 .hexDigit 这类 CharacterClass 表达意图。
// transcript 中明确提到的 Regex 入口
regex literal
regex builder
.hexDigit
first match
关键点:
regex literal让正则成为语言级语法,支持高亮和编译器检查。regex builder把复杂正则写成更容易改的 Swift 代码。.hexDigit用 CharacterClass 表达十六进制字符。first match是演示里从订单字符串提取结果的操作。
泛型语法也被简化。some 可以表达“某个 collection of songs”这种参数;any 可以表达“可以容纳不同 collection 类型”的值,例如 playlist 数组里同时放 song set 和 song array。
some
any
关键点:
some用在参数位置,减少泛型函数签名的样板代码。any用来保存更动态的 existential 值。
Swift Package plugins 则把构建流程扩展进 Swift Package。命令插件可以按需运行,构建插件会在项目构建时运行;它们能从命令行或 Xcode 调用,也会在沙盒里请求权限。Food Truck 示例里,一个命令插件调用 SwiftFormat 排序 import,另一个基于 SwiftLint 的构建插件提示缺少文档的位置,并且构建插件会进入 Xcode Cloud。
// transcript 中明确提到的插件形态
command plugin
build plugin
SwiftFormat
SwiftLint
Xcode Cloud
关键点:
- command plugin 适合格式化、生成、检查这类按需动作。
- build plugin 适合每次构建都要执行的规则。
- SwiftFormat 和 SwiftLint 是演讲给出的真实插件用途。
- Xcode Cloud 会执行构建插件,让本地和云端规则一致。
SwiftUI、Swift Charts 和跨平台界面(18:36)
SwiftUI 的 2022 更新围绕三个痛点:导航状态、复杂布局、渐进式采用。新的 navigation API 支持保存和恢复 selection、替换整个 navigation stack,并适合 launch state、size class 变化和 deep link。Grid API 负责多行多列对齐,custom layout API 可以复用自定义布局逻辑。
// transcript 中明确提到的 SwiftUI 入口
new navigation API
Grid API
custom layout API
half sheets
Share Sheets
Transferable
UICollectionView
关键点:
- new navigation API 用来表达最适合应用的导航样式。
- Grid API 处理多行多列对齐。
- custom layout API 让 flow layout、radial layout 这类布局逻辑可以复用。
- half sheets 提供从主视图上方滑出的次级视图。
- Share Sheets 通过 Transferable 获得类型安全的数据传输。
- UIKit 的 collection view cell 可以托管 SwiftUI view,支持 swipe actions 和 cell backgrounds。
Swift Charts 是这场演讲的新框架。它建立在 SwiftUI 之上,用声明式语法创建 line chart、bar chart、heat map、stream graph 等图表,并自带可定制的 VoiceOver 体验。Food Truck 示例中,开发者通过几个 modifier 改颜色、改 bar 的位置、加 annotation、平滑曲线,并在 Previews 中直接交互。
// transcript 中明确提到的 Swift Charts 能力
Swift Charts
line chart
bar chart
heat map
stream graph
annotation
catmullRom
关键点:
- Swift Charts 与 SwiftUI 使用相近的声明式表达。
- line chart 和 bar chart 是演示里直接使用的图表类型。
- heat map、stream graph 是框架支持的更复杂图表类型。
- annotation 用来在图表标记说明。
- catmullRom 是演示中为曲线选择的 interpolation strategy。
WidgetKit、Live Activities 与系统表面(31:28)
锁屏 widget 复用了 Apple Watch complication 的设计语言。Circular 显示小图、gauge 或少量文字;Rectangular 提供更大的信息画布;Inline 用少量文字和 SF Symbols 放在 iPhone 时钟上方。watchOS 9 的 complications 也由 WidgetKit 驱动,所以同一份代码能生成 iPhone 锁屏信息和 Apple Watch 表盘信息。
// transcript 中明确提到的 WidgetKit family 与修饰入口
Circular
Rectangular
Inline
Supported Families
Gauge
VStack
widgetAccentable
rendering mode
environment property
关键点:
- Circular 适合进度、图标或短文本。
- Rectangular 适合天气预报、订单进度这类更多信息。
- Inline 适合极短文本和 SF Symbols。
- Supported Families 声明 widget 支持的 family。
- Gauge 是 Food Truck 展示订单进度的组件。
widgetAccentable让锁屏上的文字和符号适配系统 tint。- rendering mode 与 environment property 用来区分表盘全彩渲染等情况。
Live Activities 处理实时事件。比分、打车进度、健身进度这类活动可以直接显示在锁屏,并且使用 WidgetKit 创建。它和普通 widget 的差别在于 presentation 和 state 会实时更新,SwiftUI 还能在状态变化之间做动画。演讲也说明 Live Activities 会在 iOS 16 后续更新中可用。
WidgetKit
Live Activities
SwiftUI animation
state updates
关键点:
- WidgetKit 是创建 Live Activities 的入口。
- Live Activities 适合用户正在关注的实时活动。
- SwiftUI animation 支持状态之间的视觉过渡。
- state updates 保证用户看一眼时拿到当前信息。
Messages Collaboration API 让已有协作功能进入 Messages 和 FaceTime。用户分享链接时,应用可以把链接标记为 collaborative,系统提供所需 identifiers,收件人点开后可以立刻获得访问权。用户可从 Share Sheet 或 drag & drop 发起协作,也能把内容更新通知发回 Messages 会话。
// transcript 中明确提到的协作入口
Messages Collaboration API
Share Sheet
drag & drop
collaboration popover
关键点:
- Messages Collaboration API 不替代应用里的协作逻辑,而是连接会话入口。
- Share Sheet 把协作入口放到用户熟悉的位置。
- drag & drop 支持把协作内容拖进 Messages。
- collaboration popover 让用户从应用返回 Messages 或 FaceTime 对话。
App Intents 与 Passkeys:可发现性和登录安全(38:59)
App Intents 让 App 的功能进入 Siri、Shortcuts 和 Spotlight。演讲中的 Food Truck 想把“查看今日或本周最畅销甜甜圈”暴露出去,于是导入 App Intents 和 SwiftUI,定义符合 AppIntent 的 struct,为时间范围 enum 增加 AppEnum,实现 perform,再定义 app shortcut phrase。
import AppIntents
import SwiftUI
AppIntent
AppEnum
perform
App Shortcut phrase
Siri tip
关键点:
import AppIntents和import SwiftUI是演示中创建新 Swift 文件后的第一步。AppIntent表示用户可以在应用里做的一件事。AppEnum给参数值提供人类可读名称,例如 today 和 this week。perform执行 intent,并可返回 SwiftUI chart view、dialogue 或 output value。- App Shortcut phrase 必须包含 App 名称变量,也可包含参数。
- Siri tip 放在应用界面里,帮助用户知道该说什么。
Passkeys 解决密码的三个核心问题:钓鱼、复用、服务器泄露。创建 passkey 时,设备为特定网站或 App 生成唯一密钥,并用 Face ID 或 Touch ID 保护;服务器只保存 public key。用户还可以用 iPhone 扫描 QR code,在朋友的 PC 上登录同一个 Food Truck 网站。
// transcript 中明确提到的 passkey 集成步骤
store public keys
issue authentication challenges
create a new passkey
sign in with it
WebAuthn
关键点:
- 后端需要保存 public keys。
- 后端需要发出 authentication challenges。
- App 和网站要提供创建 passkey 的入口。
- 登录流程要支持用 passkey sign in。
- WebAuthn 是 passkeys 所基于的开放标准。
Metal 3、WeatherKit、VisionKit:更重场景的系统能力(52:29)
Metal 3 的重点是减少游戏加载和渲染瓶颈。Metal IO 让资源从高速 SSD 到统一内存再到 GPU 的路径更稳定;offline shader compilation 在构建阶段生成 GPU shader binaries,减少运行时编译;Mesh Shading API 用 Object shader 决定 mesh 数量,再由 Mesh shader 生成几何;MetalFX upscaling 用较低分辨率渲染,随后做 temporal antialiasing 和 upscaling。
// transcript 中明确提到的 Metal 3 入口
Metal IO API
offline shader compilation
Mesh Shading API
Object shader
Mesh shader
MetalFX upscaling
temporal antialiasing
关键点:
- Metal IO API 用于 fast resource loading。
- offline shader compilation 把 shader binary 生成提前到 build time。
- Mesh Shading API 避免把几何生成结果绕回 device memory。
- Object shader 决定要生成多少 mesh。
- Mesh shader 生成实际几何并送到 rasterizer。
- MetalFX upscaling 先低分辨率渲染,再放大到目标分辨率。
WeatherKit 提供 native Swift API 和 REST API。Food Truck 示例里,应用先在 Xcode 添加 WeatherKit capability,然后通过 Swift Concurrency 调用 WeatherService 的 weather(for:),传入位置,再取 condition、precipitation、cloud cover,为停车点推荐晴朗位置。Apple 同时说明,开发者计划会员每月包含 500,000 次 weather(for:location) API calls。
WeatherService
weather(for:)
location
condition
precipitation
cloud cover
weather(for:location)
关键点:
- WeatherService 是演示中请求天气的服务入口。
weather(for:)接收一个 location。- condition、precipitation、cloud cover 是 Food Truck 用来判断停车点的数据。
weather(for:location)是 Apple 在用量说明中提到的 API call 名称。
VisionKit 带来 Live Text API 和 Data Scanner API。Live Text API 分析图片和暂停视频帧中的文字与 QR code,并提供 quick actions;Data Scanner API 分析实时摄像头输入,适合二维码、条码、仓库拣货、配送和 POS 场景。演示中,Food Truck 在图片 view 上加 ImageInteraction,再通过 custom insets 调整按钮位置;订单环节则实例化 DataScanner 来查找 text、QR codes 或 barcodes。
ImageInteraction
Live Text API
Data Scanner API
DataScanner
text
QR codes
barcodes
custom insets
button configuration
关键点:
- ImageInteraction 把 Live Text 按钮和 quick actions 加到图片 view 上。
- custom insets 用来避开应用已有按钮。
- button configuration 调整按钮样式,使其匹配应用 UI。
- DataScanner 面向实时摄像头输入。
- text、QR codes、barcodes 是演示里 DataScanner 查找的内容类型。
核心启发
-
把 CI/CD 接入 Xcode Cloud
- 做什么:为 iOS、iPadOS、macOS、watchOS 项目建立从提交到 TestFlight 的自动构建流程。
- 为什么值得做:这场演讲说明 Xcode Cloud 已可用,并且连接 TestFlight、App Store Connect、Git provider 和 REST API。
- 怎么开始:先把现有 Git 仓库接入 Xcode Cloud,再用 REST API 连接团队已有通知或发布流程。
-
把高频状态做成锁屏 widget 和 Apple Watch complication
- 做什么:把订单进度、健身目标、库存告警、日程倒计时放到 Circular、Rectangular 或 Inline widget。
- 为什么值得做:WidgetKit 在 iOS 16 锁屏和 watchOS 9 complication 上复用同一套模型,平台差异由系统处理。
- 怎么开始:在 Supported Families 中声明新 family,用 Gauge、VStack、系统字体和
widgetAccentable适配锁屏与表盘。
-
把 App 内动作暴露给 Siri 和 Spotlight
- 做什么:让“查看本周销售趋势”“记录一杯水”“开始番茄钟”这类动作可被 Siri 直接调用,也能在 Spotlight 搜索中出现。
- 为什么值得做:App Intents 与 App Shortcuts 让用户无需先手动配置快捷指令,就能发现应用能力。
- 怎么开始:用 AppIntent 描述动作,用 AppEnum 描述参数,补上 perform,再在界面里加入 Siri tip。
-
为账号系统规划 Passkeys 迁移
- 做什么:在现有用户名密码登录旁增加 passkey 注册和登录。
- 为什么值得做:Passkeys 用 public key cryptography,服务器只保存 public key,能降低密码复用、钓鱼和泄露风险。
- 怎么开始:后端先支持存储 public keys 和签发 authentication challenges,客户端再提供 create passkey 和 sign in with passkey 的入口。
-
用 WeatherKit 和 VisionKit 改善线下流程
- 做什么:为配送、巡检、旅行、活动类 App 增加天气决策、图片文字提取和二维码扫描。
- 为什么值得做:WeatherKit 提供 Swift 与 REST API;VisionKit 的 Live Text API 和 Data Scanner API 能把系统级识别能力放进自定义流程。
- 怎么开始:天气场景先添加 WeatherKit capability 并调用 WeatherService;图片场景加 ImageInteraction;实时扫码场景用 DataScanner 处理 text、QR codes 或 barcodes。
关联 Session
- What’s new in SwiftUI — 深入讲解本场概览中提到的新导航、布局、Share Sheet 和跨平台 SwiftUI 能力。
- Dive into App Intents — 继续展开 AppIntent、AppEnum、App Shortcuts、Siri phrase 和 Spotlight 发现机制。
- Discover Metal 3 — 详细介绍 Metal IO、offline shader compilation、Mesh Shading API 和 MetalFX upscaling。
- Meet WeatherKit — 聚焦 WeatherKit 的 Swift API、REST API、用量配额和隐私模型。
评论
GitHub Issues · utterances