Highlight
WWDC21 发布 iOS 15、iPadOS 15、macOS Monterey、watchOS 8 和 tvOS 15;Swift 引入 async/await 原生并发语法,Object Capture API 实现分钟级 3D 建模,Xcode Cloud 提供云端 CI/CD 服务。
核心内容
线上大会延续,开发者社区扩张
去年 WWDC 吸引了近 2500 万观众,成为观看人数最多的一届。今年继续免费向所有开发者开放,包含 200+ 场深度 session 和一对一实验室。Apple 通过企业家训练营、开发者学院(包括最新的底特律学院)和 Learn to Code 课程培养下一代开发者,特别是那些在科技界代表性不足的群体。
(03:11)
iOS 15:连接、专注、智能、探索
FaceTime 重大更新
空间音频让通话中每个人的声音从屏幕对应位置传出,模拟面对面交谈的声场。语音突显用机器学习过滤环境噪音,只保留人声;宽频谱则保留所有环境音,适合音乐场景。人像模式模糊背景,聚焦人物。
最关键的是 FaceTime 链接——生成一个链接,Android 和 Windows 用户可以直接在浏览器中加入通话,且仍然保持端到端加密。
(05:17)
SharePlay 共享体验
SharePlay 让用户在 FaceTime 通话中一起听 Apple Music、一起看视频、共享屏幕。所有人的播放进度保持同步,共享播放控制让任何人都可以暂停或切歌。SharePlay 提供了 API,Disney+、Hulu、HBO Max、TikTok、NBA、Twitch 等已经接入。
(09:54)
通知与专注
通知系统重新设计:联系人照片和更大的 App 图标。通知摘要将非紧急通知打包,在你设定的时间统一推送,按优先级排序。专注模式让用户为工作、个人生活等场景创建不同状态,每个状态可以指定允许通知的 App 和人,甚至可以切换不同的主屏幕页面。
(16:52)
Live Text 实况文本
相机对准白板或菜单,点一下指示器,文字就可以选中、复制、翻译。支持七种语言,包括简体中文和繁体中文。同一套视觉识别还能识别物体和场景——狗的种类、花的品种、地标等。
(20:08)
钱包与身份证明
钱包 App 新增家门钥匙、公司门禁卡、酒店钥匙。最重要的是身份证明——美国部分州支持将驾照和州 ID 扫描进 Wallet,TSA 将允许在机场安检处使用数字 ID 验证。
(26:25)
iPadOS 15:生产力飞跃
小组件可以自由放置在主屏幕任意位置,并新增专为 iPad 大屏幕设计的加大号组件。App 资源库来到 iPad,自动分类整理所有 App。
多任务操作全面改版。每个 App 顶部新增多任务菜单按钮,点击即可选择全屏、Split View 或 Slide Over。新增的 Shelf 区域管理 App 的所有打开窗口。
Quick Note 快速备忘录是 iPadOS 15 的亮点功能。从屏幕右下角向内轻扫即可呼出浮动笔记窗口,自动感知当前 App 并添加对应链接。
Swift Playgrounds 现在可以开发完整的 App。使用 SwiftUI 编写代码,实时预览运行效果,支持代码补全和完整的 UI 组件库,甚至可以直接提交到 App Store。
(37:44)
隐私:从应用到网络的全面防护
Mail Privacy Protection 阻止邮件发送者使用隐藏像素追踪你的邮件打开行为和 IP 地址。Safari 的智能防追踪现在还会隐藏 IP 地址,防止追踪器跨站点关联你的活动。App Privacy Report 展示每个 App 在过去 7 天内访问敏感权限的频率,以及它们连接了哪些第三方域名。
Siri 现在默认在设备端处理语音识别,不需要网络连接就能完成启动 App、修改设置、控制音乐等操作。
iCloud 付费订阅升级为 iCloud+,价格不变。Private Relay 通过双重中继加密 Safari 流量,连 Apple 都无法同时知道你是谁和你访问了哪些网站。Hide My Email 允许创建随机的唯一邮箱地址,转发到你的个人邮箱。
(49:48)
macOS Monterey:跨设备协作
Universal Control 是这个 Keynote 最惊艳的演示。把 iPad 放在 MacBook 旁边,Mac 的鼠标光标就能自动穿越到 iPad 屏幕上,一套键鼠控制两台设备。支持最多三台设备,可以直接拖拽文件跨设备传输。不需要任何设置。
Shortcuts 快捷指令终于来到 Mac,内置丰富的预设快捷指令,编辑器支持拖拽组合操作。Automator 继续得到支持,其工作流可以导入 Shortcuts。
Safari 重新设计了标签页体验。工具栏被精简,标签页更紧凑,搜索栏与活动标签页合并。标签组允许保存一组标签页,跨所有设备自动同步。Safari Web Extensions 首次来到 iPhone 和 iPad。
(01:20:10)
开发者工具:三项重大更新
Swift Concurrency — async/await 成为 Swift 语言的一等公民。搭配 actors 技术,并发代码从复杂的回调地狱变成线性的步骤序列。这是 Swift 社区呼声最高的特性。
Object Capture — 一项革命性的 macOS API,通过摄影测量将一系列 2D 照片转换为照片级真实的 3D 模型,耗时仅数分钟。Maxon(Cinema 4D)、Unity 和 Wayfair 已经接入。
Xcode Cloud — Apple 的云端 CI/CD 服务。提交代码后自动在云端构建、并行运行测试、自动分发到 TestFlight。构建在云端进行,Mac 本地可以继续其他工作。
(01:37:15)
详细内容
SharePlay API 实现指南
SharePlay 让你的 App 内容可以在 FaceTime 通话中与他人共享。实现基于 GroupActivities 框架。
import GroupActivities
// 定义可共享的活动
struct MovieNightActivity: GroupActivity {
var metadata: GroupActivityMetadata {
var metadata = GroupActivityMetadata()
metadata.title = "Movie Night"
metadata.type = .watchingVideo
return metadata
}
// 添加你的活动状态
var currentMovie: String?
}
// 在 FaceTime 通话中启动
func startActivity() {
let activity = MovieNightActivity()
activity.prepareForSharing()
Task {
switch await activity.join() {
case .joined(let session):
// 成功加入,开始同步
handleJoinedSession(session)
case .failed:
// 处理失败
break
}
}
}
关键点:
GroupActivity协议定义可共享的内容类型metadata描述活动,用于在参与者设备上显示join()方法尝试加入现有的 FaceTime 群组通话- 使用
GroupSessionMessenger在参与者之间同步数据
(09:54)
async/await 语法示例
Swift 5.5 引入的原生并发语法大幅简化异步代码。
// 旧的回调方式
func fetchUserProfile(completion: @escaping (Result<User, Error>) -> Void) {
URLSession.shared.dataTask(with: url) { data, _, error in
if let error = error {
completion(.failure(error))
return
}
guard let data = data else { return }
// 解码数据...
completion(.success(user))
}.resume()
}
// 新的 async/await 方式
func fetchUserProfile() async throws -> User {
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(User.self, from: data)
}
// 调用异步函数
Task {
do {
let user = try await fetchUserProfile()
updateUI(with: user)
} catch {
handleError(error)
}
}
关键点:
async关键字标记异步函数await关键字等待异步操作完成throws仍然可以表示错误Task创建异步执行上下文- 代码从嵌套回调变成线性序列
(01:37:15)
Object Capture API
import RealityKit
import ObjectCapture
func create3DModel(from images: [URL]) async throws -> URL {
// 创建摄影测量会话
let session = PhotogrammetrySession()
// 添加图像
for image in images {
try await session.addImage(at: image)
}
// 生成模型
let outputURL = FileManager.default.temporaryDirectory
.appendingPathComponent("model.usdz")
try await session.process(outputURL: outputURL, detail: .full)
return outputURL
}
关键点:
PhotogrammetrySession管理摄影测量过程addImage(at:)添加用于建模的照片process(outputURL:detail:)执行建模detail参数控制模型精度- 建议提供 30-200 张不同角度的照片
(01:35:07)
核心启发
1. 为视频 App 接入 SharePlay
- 做什么:让用户在 FaceTime 通话中一起观看你的视频内容
- 为什么值得做:SharePlay 是社交消费的自然延伸,能增加用户停留时长和分享意愿
- 怎么开始:实现
GroupActivity协议,使用AVPlayer的GroupWatchingActivity,确保播放进度同步
2. 迁移核心异步代码到 async/await
- 做什么:将项目中基于回调的异步操作重写为 async/await 语法
- 为什么值得做:代码更易读易维护,编译器能自动检查数据竞争,减少并发 bug
- 怎么开始:从网络请求层开始改写,利用
Task和TaskGroup管理结构化并发
3. 用 Object Capture 生成电商 3D 展示
- 做什么:为商品提供 3D 模型,让用户在 AR 中预览
- 为什么值得做:3D 展示提升购买决策信心,降低退货率;Object Capture 把建模成本从数周降到数分钟
- 怎么开始:用 iPhone 拍摄商品多角度照片,使用
PhotogrammetrySession生成 USDZ,在 AR Quick Look 中展示
4. 为 Focus Mode 优化通知策略
- 做什么:审查你的通知发送时机和内容,区分时间敏感和非时间敏感的通知
- 为什么值得做:iOS 15 的 Focus Mode 可能屏蔽非紧急通知,合理分类能确保重要信息送达
- 怎么开始:为通知设置正确的
interruptionLevel(time-sensitive 可以穿透 Focus 静默)
5. 在 Xcode Cloud 中设置工作流
- 做什么:将 CI/CD 迁移到 Apple 官方云端服务
- 为什么值得做:零配置支持所有 Apple 平台,与 Xcode 深度集成,释放本地机器资源
- 怎么开始:在 Xcode 的 Product 菜单中启用 Xcode Cloud,创建工作流并配置触发条件
关联 Session
- Meet async/await in Swift — Swift 5.5 引入的 async/await 语法和结构化并发模型
- What’s new in SwiftUI — SwiftUI 在 iOS 15 中的更新
- What’s new in UIKit — UIKit 框架的最新改进和 iPad 适配
- Apple’s privacy pillars in focus — Apple 四项隐私支柱的技术实现
- Object Capture in RealityKit — Object Capture API 的详细使用指南
评论
GitHub Issues · utterances