WWDC Quick Look 💓 By SwiftGGTeam
Keynote

Keynote

观看原视频

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 协议,使用 AVPlayerGroupWatchingActivity,确保播放进度同步

2. 迁移核心异步代码到 async/await

  • 做什么:将项目中基于回调的异步操作重写为 async/await 语法
  • 为什么值得做:代码更易读易维护,编译器能自动检查数据竞争,减少并发 bug
  • 怎么开始:从网络请求层开始改写,利用 TaskTaskGroup 管理结构化并发

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

评论

GitHub Issues · utterances