WWDC Quick Look 💓 By SwiftGGTeam
Platforms State of the Union

Platforms State of the Union

观看原视频

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、someany 的泛型写法,以及 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 把 zipthrottle 这类序列算法带到异步序列上;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 AppIntentsimport 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 调用 WeatherServiceweather(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