平台技术综述(美国手语版)
Platforms State of the Union (ASL)
2021年6月7日
一句话判断
这是 Platforms State of the Union 的美国手语(ASL)翻译版本——面向开发者的技术综述,覆盖 Swift、SwiftUI、Xcode Cloud 等所有重要开发者工具的更新。
这场 Session 讲了什么
这是 WWDC21 Platforms State of the Union 的无障碍版本,为听障开发者提供 ASL 手语翻译。内容与原版完全一致,画面中嵌入了手语翻译员的实时翻译。
Platforms State of the Union 是 Keynote 的开发者版——如果说 Keynote 讲的是「用户能看到什么」,State of the Union 讲的就是「开发者能用什么」。2021 年的核心发布包括:
Swift 5.5 引入了 async/await、Actor 和 Sendable,这是 Swift 语言历史上最重要的并发编程模型更新。async/await 让异步代码从嵌套回调地狱变成线性的顺序代码;Actor 提供了编译时保证的数据隔离,避免了手动加锁的复杂性。
SwiftUI 3 新增了大量 API:List 的刷新控制、Canvas 自定义绘制视图、AsyncImage 异步图片加载、Focusable 焦点管理、以及 macOS 上的窗口管理改进。SwiftUI 在 iOS 15 终于可以用来构建「完整的」App 而不是只有简单界面。
Xcode Cloud 是苹果自家的 CI/CD 服务,直接集成在 Xcode 和 App Store Connect 中。自动构建、自动测试、自动分发到 TestFlight,不需要配置 YAML 文件。
ARKit 5、Core ML、Vision、Create ML 等框架也有重要更新,ARKit 新增了 Location Anchors(基于地理位置的 AR 锚点),Core ML 新增了 MLTask 简化模型推理。
值得深挖的点
Swift Concurrency 是今年最大的技术变化。 async/await 不只是语法糖——它是 Swift 运行时的根本性改变。新的并发模型引入了结构化并发(Structured Concurrency)的概念:每个异步任务有明确的生命周期和层级关系,子任务不会「泄漏」到父任务之外。Actor 模型让数据竞争从运行时错误变成编译时错误。这两个变化的组合意味着:Swift 开发者终于可以写出安全且可读的并发代码,而不需要在 GCD 和锁之间做两难选择。
代码片段
// Platforms State of the Union 中最重要的代码演示:Swift Concurrency
// 1. async/await 替代回调地狱
// 以前的写法
func fetchUser(completion: @escaping (Result<User, Error>) -> Void) {
apiClient.request("/user") { result in
switch result {
case .success(let data):
let user = try? JSONDecoder().decode(User.self, from: data)
completion(.success(user!))
case .failure(let error):
completion(.failure(error))
}
}
}
// iOS 15 的新写法
func fetchUser() async throws -> User {
let (data, _) = try await URLSession.shared.data(from: userURL)
return try JSONDecoder().decode(User.self, from: data)
}
// 2. Actor 保证并发安全
actor DataStore {
private var items: [Item] = []
func add(_ item: Item) {
items.append(item)
}
func getAll() -> [Item] {
items
}
}
// 从多个线程安全访问
let store = DataStore()
await store.add(item) // 自动串行化访问
// 3. SwiftUI 中的 AsyncImage——异步加载图片
struct AvatarView: View {
let url: URL
var body: some View {
AsyncImage(url: url) { phase in
switch phase {
case .success(let image):
image.resizable().scaledToFit()
case .failure:
Image(systemName: "person.circle")
default:
ProgressView()
}
}
.frame(width: 50, height: 50)
.clipShape(Circle())
}
}
最佳实践
- Swift Concurrency 的迁移不需要一次性完成——你可以在现有的回调代码旁边逐步引入 async/await
- 使用
@MainActor标记 UI 相关的类型和方法,确保它们在主线程执行 - Xcode Cloud 从 beta 阶段就开始使用,尽早把你的项目配置好 CI 流程
还有什么值得关注
- SwiftUI 的
Canvas视图让你可以在 SwiftUI 中做类似 Core Graphics 的自定义绘制,性能比drawRect好 AttributedString是 Swift 原生的富文本类型,替代了NSAttributedString- Instruments 在 Xcode 13 中增加了 Swift Concurrency 的分析工具