WWDC Quick Look 💓 By SwiftGGTeam
Platforms State of the Union

Platforms State of the Union

观看原视频

Highlight

Apple 在 2023 年推出 Swift 宏、SwiftData、交互式 widget 和全新的 visionOS 平台,并让 Xcode 15 的链接速度最高提升 5 倍。

核心内容

每年 WWDC 的 Platforms State of the Union 都是开发者判断技术风向的锚点。2023 年这场演讲由 Darin Adler 主持,六位工程负责人轮番登台,覆盖语言、框架、工具、硬件和全新平台五个层面。

04:03)Holly Borla 首先介绍了 Swift 5.9 的宏(Macros)系统。宏是编译期注解,会根据代码结构生成新代码。一个 #URL 宏可以在编译期检查 URL 字符串是否合法,如果包含空格会直接报错并给出修复建议。附加宏(Attached macros)更强大——给现有函数加上 @AddAsync,就能自动生成 async/await 版本,无需手写第二个函数。宏在 Xcode 中完全可展开、可调试、可断点步入,没有黑箱。

09:30)Josh Shaffer 接棒讲 SwiftUI。今年的重点是动画——手势速度可以自动传递到动画中,默认动画改为基于弹簧的物理运动,只需配置 duration 和 bounce 两个参数。SF Symbols 也支持了动画效果。更复杂的多阶段动画可以用新的 AnimationPhase API 实现。数据流方面,@Observable 宏替代了 ObservableObject + @Published 的组合,所有公开属性自动发布,且 SwiftUI 按字段粒度追踪访问,未用到的字段变更不会触发视图重绘。

15:53)SwiftData 是今年的重磅新框架。它基于 Core Data 的持久层,但 API 完全为 Swift 重新设计。给类加上 @Model 宏,就自动获得持久化、iCloud 同步、撤销重做等功能。属性可以用额外注解标记唯一性约束。SwiftData 原生支持 Codable 的 struct 和 enum,复杂结构化数据也能高效查询。与 SwiftUI 的集成只需在根视图加一个 modifier 设置容器,用 @Query 读取数据即可。widget 也能直接访问同一个容器的数据。

19:22)Jonathan Thomassian 介绍了 WidgetKit、App Intents、TipKit 和 AirDrop 的新能力。iOS 17 的 widget 支持交互——按钮和 Toggle 可以直接在 widget 中响应,通过 App Intent 触发。StandBy 模式、iPad 锁屏、macOS 桌面都能展示 widget,且同一套 SwiftUI 代码跨平台复用。TipKit 提供了系统级的功能引导模板,可以按上下文智能展示,避免重复打扰用户。

27:26)Brandon Corey 带来了游戏和相机方面的更新。macOS Sonoma 新增 Game Mode,优先分配 CPU 和 GPU 资源给游戏。Game Porting Toolkit 提供三步走方案:先用模拟环境评估 Windows 游戏在 Mac 上的性能潜力,再用 Metal Shader Converter 自动转换 HLSL 到 Metal,最后优化图形代码。相机方面,Zero Shutter Lag、重叠捕获和延迟处理让连拍速度提升三倍。HDR 照片获得了 ISO 国际标准,iOS/iPadOS/macOS 都提供了显示兼容 HDR 照片的 API。

34:40)Lori Hylan-Cho 展示了 watchOS 10 的设计革新。SwiftUI 是这次系统级重设计的核心——Vertical TabView 支持可变页面尺寸,containerBackground 修饰符用渐变填充提升可读性,NavigationSplitView 直接复用跨平台代码。Corner 位置的 ToolbarItem 让时间自动居中。所有主要 UI 组件都更新了材质处理,自动适配硬件尺寸。

39:41)Chris 介绍了无障碍和隐私的新进展。针对对动画和闪烁光敏感的用户,系统新增了 Pause Animated Images 和 Dim Flashing Lights 两个 API。前者停止 GIF 动画,后者自动暗化视频中的闪烁序列,算法已开源。visionOS 从第一天就内置了数十项无障碍功能,包括眼动控制、语音控制、头部指针等替代输入方式。

52:42)Ken Orr 总结了 Xcode 15 的改进。代码补全利用上下文优先排序最相关的建议。资源目录自动生成符号,提供类型安全。SwiftUI 预览支持所有 UI 框架(SwiftUI、UIKit、AppKit),可在画布中直接切换平台和设备。Git 暂存功能集成到编辑器中。测试报告完全重新设计,包含 Top Insights、热力图、时间线和视频录制。链接速度提升最高 5 倍,调试二进制体积减少 30%。Xcode 应用商店体积缩小 50%,模拟器按需下载。

01:00:56)Mike Rockwell 压轴介绍了 visionOS。应用默认启动到 Shared Space,与其他应用并排存在。可以使用 Window(平面窗口)、Volume(3D 容器)和 Full Space(全沉浸空间)三种元素。SwiftUI 扩展了深度支持,ZStack 可以用 z-offset 在三维空间中分层。RealityKit 自动适配环境光照、投射阴影,并采用动态注视点渲染(Dynamic Foveation)降低边缘渲染开销。ARKit 提供平面估计、场景重建、图像锚定和世界追踪。Persona 和 Spatial Persona 让 FaceTime 通话中的用户以三维形象出现,SharePlay 可以同步物理动作。

详细内容

Swift 宏的实际形态

宏分两种形态。独立宏(Freestanding)用 # 前缀:

let url = #URL("https://developer.apple.com")

附加宏(Attached)用 @ 前缀,直接改造已有声明:

@AddAsync
func fetchContent(completion: @escaping (Result<String, Error>) -> Void) {
    // 原有实现
}

// 宏自动生成 async 版本,可以直接调用:
let content = try await fetchContent()

关键点:

  • #URL 在编译期验证字符串格式,非法 URL 直接编译报错
  • @AddAsync 不需要手写第二个函数,Xcode 中可展开查看生成的代码
  • 调试时可以步入宏展开后的代码,行为完全透明

SwiftData 的最小使用路径

import SwiftData

@Model
class Backyard {
    var name: String
    var birds: [Bird]
    var foodLevel: Int
}

// 根视图设置容器
.windowStyle(.automatic)
.modelContainer(for: Backyard.self)

// 视图读取数据
@Query var backyards: [Backyard]

关键点:

  • @Model 替代 @Observable,同时获得持久化和观察能力
  • modelContainer 在 app 级别设置一次即可
  • @Query 自动从持久化存储加载数据,widget 也能访问
  • 支持 undo/redo,无需额外代码

visionOS 应用的三层空间模型

元素用途SwiftUI 场景类型
Window传统 2D 界面,可包含 3D 内容WindowGroup
Volume展示 3D 对象,可从各角度查看WindowGroup + defaultSize
Full Space完全沉浸式体验,隐藏其他应用ImmersiveSpace

01:03:22)SwiftUI 在 visionOS 上通过 RealityKit 渲染,因此可以直接混用 SwiftUI 和 RealityKit API。Ornaments 附着在窗口边缘,Hover Effects 自动响应视线,Materials 根据环境光照动态调整。

核心启发

  • 用宏消除团队内部的重复模板:如果团队里有大量类似的样板代码(如网络请求封装、日志记录、状态机转换),可以写一个内部宏包,通过 Swift Package 共享。这比代码生成器更轻量,且与编译器集成。

  • 把 SwiftData 当作新项目的默认持久化方案:不需要兼容 iOS 16 及更早版本的新项目,可以直接用 SwiftData 替代 Core Data。模型类用纯 Swift 写法,不需要 .xcdatamodeld 文件,团队成员更容易理解。

  • 给 widget 加一个高频轻量操作:梳理 app 中最常用的单步操作(如标记完成、切换收藏、开始计时),做成 widget 中的 Button 或 Toggle。用户不需要打开 app 就能完成,使用频率会显著提升。

  • 为 visionOS 找一个”只能在这里发生”的关键时刻:不要试图把整个 app 搬到空间平台。找出一个现有功能中”在大空间里看会更震撼”的场景——比如全景照片浏览、3D 模型展示、多人协作白板——只优化这一个时刻。

关联 Session

评论

GitHub Issues · utterances