WWDC21 主题演讲
Keynote
2021年6月7日
一句话判断
WWDC21 Keynote 的核心主题是「把 AI 塞进你用的每一个 App」——但真正影响开发者的不是那些炫酷的 AI 功能,而是 iOS 15 底层那些不起眼的系统级 API 变动。
这场 Session 讲了什么
2021 年 WWDC Keynote 持续约两小时,由 Tim Cook 开场,各产品线负责人轮流上台。由于全球疫情,这次仍然是预录制的线上形式。主要内容分为几个板块:
iOS 15 是最重磅的部分。FaceTime 新增了 Spatial Audio 和 Grid View,并支持生成 Web 链接邀请非 Apple 用户加入通话(这直接挑战了 Zoom)。通知系统大改:新增 Focus Mode(专注模式),用户可以为工作、睡眠、个人等场景设定不同的通知过滤规则。通知摘要(Notification Summary)把非紧急通知打包成定时摘要推送。Live Text(实况文本)让用户可以直接在照片和相机中选取文字,这是 Vision 框架的终端体现。Spotlight 搜索大幅增强,支持在照片中搜索文字和物体。
iPadOS 15 最受关注的更新是 Quick Note(快速备忘录)——从屏幕角落轻扫呼出的浮动笔记窗口,支持与 App 内容自动关联。Widget 终于可以在主屏幕上自由放置(和 iOS 14 的体验对齐了)。App 库也来到了 iPad。
macOS Monterey(12)的重点是 Universal Control——一套键鼠同时控制 Mac 和 iPad,不需要任何配置。Shortcuts(快捷指令)终于来到了 Mac,替代了 Automator。Safari 重新设计了标签页管理,标签组可以跨设备同步。
watchOS 8 带来了新的「正念」App(取代了「呼吸」),支持 AssistiveTouch(不触碰屏幕操作手表),以及钱包 App 支持更多类型的数字钥匙。
隐私 方面,App Privacy Report 让用户可以看到每个 App 在过去 7 天内访问了哪些敏感数据(位置、相机、麦克风等),以及它们连接了哪些域名。Mail Privacy Protection 给邮件发送者假的路由信息,阻止跟踪像素。
值得深挖的点
Live Text 的技术栈。 Live Text 不是简单的 OCR——它是 Vision 框架、Natural Language 框架和系统级 UI 的深度融合。照片 App 可以识别图片中的文字、电话号码、地址、网址,并分别提供对应的操作(复制、拨打、导航、打开)。这个能力通过 VisionKit 的 VNDocumentCameraViewController 暴露给第三方 App。从开发者角度看,Live Text 的影响不仅是「用户可以在你的 App 里扫描文字」——它重新定义了「输入」这个动作。如果你的 App 有任何文本输入场景,你需要在键盘上方预留相机输入的空间。
Focus Mode 对推送策略的影响。 Focus Mode 允许用户为不同场景设置不同的通知过滤。作为开发者,你的推送通知需要正确设置 interruptionLevel——.timeSensitive 可以突破 Focus Mode 的过滤(用于即时消息、安全警报等),.critical 可以突破静音模式(用于灾难警报等,需要 Apple 特别授权)。如果你的 App 发送的推送没有正确分类,在 Focus Mode 下会被完全屏蔽,用户根本看不到。这不是可选的适配——如果你的 App 依赖推送驱动用户活跃度,Focus Mode 会直接影响你的留存率。
代码片段
import UserNotifications
// iOS 15 新的通知中断级别
func sendNotification() {
let content = UNMutableNotificationContent()
content.title = "新消息"
content.body = "你有一条未读消息"
// 设置中断级别——这决定通知能否突破 Focus Mode
// .passive: 不亮屏,不发声,只出现在通知中心
// .active: 默认行为,正常展示
// .timeSensitive: 可以突破 Focus Mode(需要在 Info.plist 声明)
// .critical: 可以突破静音模式(需要 Apple 特殊授权)
content.interruptionLevel = .timeSensitive
let request = UNNotificationRequest(
identifier: UUID().uuidString,
content: content,
trigger: nil
)
UNUserNotificationCenter.current().add(request)
}
import VisionKit
// 集成 Live Text 扫描功能
func presentLiveTextScanner() {
// 检查设备是否支持 Live Text
if VNDocumentCameraViewController.isSupported {
let scanner = VNDocumentCameraViewController()
scanner.delegate = self
present(scanner, animated: true)
}
}
// 处理扫描结果
func documentCameraViewController(_ controller: VNDocumentCameraViewController,
didFinishWith scan: VNDocumentCameraScan) {
for pageIndex in 0..<scan.pageCount {
let image = scan.imageOfPage(at: pageIndex)
// 用 Vision 框架进一步处理
recognizeText(in: image)
}
}
// 检测 Focus Mode 状态
import Intents
// 在 App 内可以根据用户的通知设置调整行为
// 如果用户把你的 App 排除在 Focus Mode 之外
// 你的通知会正常送达
// 如果被过滤了,考虑使用 Notification Summary 的方式
// 使用 Spotlight 索引增强你的内容可发现性
import CoreSpotlight
func indexContent() {
let attributeSet = CSSearchableItemAttributeSet(contentType: .text)
attributeSet.title = "文章标题"
attributeSet.contentDescription = "文章摘要"
attributeSet.keywords = ["WWDC", "iOS 15"]
let item = CSSearchableItem(
uniqueIdentifier: "article-123",
domainIdentifier: "articles",
attributeSet: attributeSet
)
CSSearchableIndex.default().indexSearchableItems([item])
}
最佳实践
- 立即审查你的推送通知策略——为不同类型的通知设置正确的
interruptionLevel,这是 iOS 15 上影响最大的适配工作 - 如果你的 App 有文本输入场景,确保键盘上方的相机输入按钮没有被你的自定义 UI 遮挡
- 为你的 App 内容创建 Spotlight 索引——iOS 15 的 Spotlight 搜索有了大幅增强,你的内容有机会直接出现在搜索结果中
- 测试你的 App 在不同 Focus Mode 下的表现——用户可能在「工作模式」下完全屏蔽了你的通知
还有什么值得关注
- iCloud+ 新增了 Private Relay(加密代理)和 Hide My Email(临时邮箱别名),这会影响你的 App 追踪用户邮箱的能力
- App Privacy Report 在「设置 > 隐私」中可以查看,用户可以看到你的 App 在后台做了什么
- Safari 的标签组功能意味着用户可能会把你的网站和其他相关网站归为一组——你的网站体验需要在这个上下文中保持流畅
- Weather App 重写后使用了 Apple 自有的天气数据模型(收购 Dark Sky 之后),如果你做天气类 App 需要关注竞争格局变化