WWDC Quick Look 💓 By SwiftGGTeam
What's new in privacy

What's new in privacy

观看原视频

Highlight

iOS 18 和 macOS Sequoia 的隐私更新围绕一个核心设计哲学:把”全量授权”拆解为”精准选择”,通过系统级 Picker 让用户只分享必要的数据片段(26:31)。


核心内容

长期以来,App 请求敏感数据权限的方式只有两种:要么全量授权,要么拒绝。这让用户陷入两难——想要用一个功能,就必须交出远超需求的全部数据。比如一个报销 App 只需要读取工作相关的消费记录,却要求访问完整的银行流水;一个配网 App 只需要连接一次摄像头,却要求获得完整的蓝牙扫描能力。

iOS 18 和 macOS Sequoia 用系统级 Picker 解决这个问题。Picker 由系统渲染,App 无法读取其中的内容(02:11)。用户在 Picker 中选择特定数据后,只有选中的那一部分会被分享给 App。这种方式把”授权”变成了”选择”,让用户不再需要过度分享。

今年新增的 Picker 涵盖三个领域:FinanceKit 的交易选择器让用户只分享特定的金融交易记录,而不是整个银行流水(03:09);Image Playground API 让 App 只拿到最终选定的生成图片,生成过程完全由系统托管(04:57);AccessorySetupKit 把蓝牙配对、Wi-Fi 连接、设备确认三个权限弹窗合并成一个选择器(05:58)。


详细内容

新增数据选择器

FinanceKit 交易选择器

这是访问 Apple Card、Savings、Apple Cash 等金融数据的新方式。当你请求访问金融交易数据时,系统会展示两个选项(02:34):

交易选择器(Transaction Picker)
├─ 适用场景:只需要访问一批现有的交易记录
├─ 用户行为:在系统渲染的列表中搜索和选择特定交易
└─ 数据结果:只分享被选中的交易

持续访问控制(Ongoing Access Control)
├─ 适用场景:需要持续、完整的金融数据访问
├─ 用户行为:选择要分享的账户,并为每个账户设置最早分享日期
└─ 数据结果:获得符合时间范围的完整数据流
关键点
├─ 交易选择器不需要 FinanceKit Entitlement
├─ 持续访问需要成功申请 FinanceKit Entitlement
├─ 用户可以为每个账户单独设置"最早分享日期"
└─ 这一层选择机制意味着用户可以控制是否分享较旧、较敏感的数据

Image Playground API

系统提供的本地图片生成能力,通过 Sheet 形式集成到你的 App 中(04:57)。流程如下:

1. App 展示 Image Playground Sheet
2. 可选:提供文本提示词或参考图片
3. 用户在系统托管的环境中迭代生成图片
4. 只有用户最终选中的图片会被分享给 App
关键点
├─ 不需要权限弹窗
├─ 图片生成和选择过程由系统托管,App 无法窥探
├─ 只有最终选中的图片会被分享
└─ 生成过程完全在设备上完成

AccessorySetupKit

这是蓝牙配件配对的统一解决方案,整合了原本分散的三个权限流程(05:58):

原流程(3 个独立弹窗)
├─ Bluetooth pairing prompt
├─ Wi-Fi network join prompt
└─ Bluetooth accessory pairing confirmation

新流程(AccessorySetupKit,1 次完成)
├─ 一键完成蓝牙配对和 Wi-Fi 连接
├─ App 可以访问已配对的设备
├─ App 无法发现从未配对过的设备
└─ 可以在 Settings 中重命名配件、管理权限
关键点
├─ 不需要完整的蓝牙扫描权限
├─ 配对后 App 只能访问与该 App 配对过的设备
├─ 可以在新的配件菜单中解绑设备
├─ 可以将配件权限分享给其他 App
└─ 在 iOS 18 中这是配对配件的首选方案

平台保护升级

Private Wi-Fi 地址

iOS 的 MAC 地址随机化现在加入了轮换机制,macOS 也首次获得了 MAC 地址保护(08:11):

iOS 18 之前
└─ 每个 Wi-Fi 网络使用一个随机 MAC 地址

iOS 18 之后
├─ "Rotate Wi-Fi Address" 开启时:MAC 地址约每两周更换一次
├─ "Rotate Wi-Fi Address" 关闭时:该网络的随机地址保持不变
├─ 已遗忘的网络:最多 24 小时后轮换
├─ 公共网络:默认启用轮换地址
└─ 其他网络:默认使用随机地址
关键点
├─ MAC 地址不在 Wi-Fi 安全模式的保护范围内
├─ 可被同一网络中的所有设备看到和追踪
├─ iOS 18 中设置项从 "Private Wi-Fi Address" 改为 "Rotate Wi-Fi Address"
└─ macOS 现在拥有与 iOS 相同的轮换策略

macOS 扩展透明化

macOS 现在会在扩展安装时显示系统通知,并在”登录项与扩展”设置中提供统一管理(10:17):

变化
├─ 扩展安装时显示系统通知
├─ 更多类型的扩展支持通知和设置控制
├─ Cron 默认关闭,可在同一设置窗口中重新启用
├─ 登录项和扩展现在统一在 System Settings 中管理
└─ 以下已弃用:Directory Services plug-in、legacy QuickLook plug-ins、com.apple.loginitems.plist

App Group 容器保护

macOS 现在为 App Group 容器提供沙盒保护(12:23):

单个 App 容器(原有机制)
├─ App Sandbox 限制对受保护资源的访问
├─ 一个 App 尝试访问另一个 App 的容器时显示提示
└─ 用户可以选择允许或拒绝

App Group 容器(新增保护)
├─ 多个 App 可以共享数据
├─ 其他开发者的 App 尝试访问时会显示提示
├─ 可以只对敏感数据(如浏览历史)使用受保护的组容器
└─ 避免提示的条件:正确声明 Entitlement、使用正确的 Group ID、只使用 Foundation API

权限流程改进

通讯录权限

iOS 18 为通讯录权限引入了两阶段弹窗(15:30):

两阶段流程(针对请求访问多个联系人的 App)
├─ 第一阶段:询问是否分享通讯录
└─ 第二阶段:选择"受限访问"或"完全访问"

Contact Access Button(适用于搜索联系人的场景)
├─ 不需要全屏 Picker
├─ 可以嵌入到你自己的 UI 中
├─ 轻触即可分享联系人
└─ 不需要完全、持续的通讯录访问权限
关键点
├─ 两阶段流程自动启用,不需要采用新 API
├─ Contact Access Button 适合搜索邮件收件人等场景
└─ 很少有 App 真正需要完全、持续的通讯录访问

蓝牙权限

iOS 18 的蓝牙授权弹窗现在会明确展示访问蓝牙会暴露的数据类型和潜在风险(17:21):

新弹窗内容
├─ 展示设备当前位置的地图
├─ 展示关联设备的示例
├─ 说明蓝牙访问可能泄露的信息
│   ├─ 设备位置
│   └─ 用于追踪的唯一设备标识符
└─ 结合你的使用说明字符串,帮助用户做出知情决定
关键点
├─ 授予持续蓝牙访问权限是一个重大选择
├─ 新弹窗自动启用,不需要采用新 API
├─ AccessorySetupKit 是不需要完整蓝牙访问权限的更好选择
└─ 清晰的使用说明字符串是建立信任的关键

本地网络权限

macOS Sequoia 为本地网络访问引入了权限控制(18:14):

适用场景
├─ 使用 Bonjour 浏览或广播
├─ 使用自定义多播、广播或单播连接
└─ 依赖本地网络的任何连接

要求
├─ 必须在 Info.plist 中包含本地网络使用说明
├─ 如果有 Bonjour Services key,必须包含 NSLocalNetworkUsageDescription
├─ 如果有 Networking Multicast entitlement,必须包含说明
└─ 不满足条件时访问将被阻止

新平台能力

App 锁定和隐藏

iOS 18 允许用户锁定和隐藏任何 App(20:06):

效果
├─ 访问 App 前需要 Face ID、Touch ID 或密码认证
├─ 所有入口点(如分享表操作)都需要认证
├─ 内容不会出现在搜索或通知中
└─ 他人无法意外看到敏感信息

自动通行密钥升级

iOS 18 和 macOS Sequoia 支持在登录时自动将现有账户升级为通行密钥(21:48):

优势
├─ 通行密钥是基于标准的密码替代方案
├─ 更易于使用、更安全、抗钓鱼
├─ 可以在登录过程中自动升级现有账户
├─ 与密码共存,不需要调整登录流程
└─ 减轻用户管理密码的负担

Live Caller ID 与隐私信息检索

新的来电显示工具使用私有中继和同态加密实现隐私信息检索(21:49):

工作流程
├─ 设备发送加密的电话号码到服务器
├─ 服务器在密文上计算(不解密)
├─ 服务器评估匹配
└─ 返回转换后的密文给设备

关键点
├─ 服务器永远看不到明文电话号码
├─ 利用同态加密在密文上计算
├─ 开源服务器配置资源将于 2024 年底发布
└─ 参见文档:Getting up-to-date calling and blocking information for your app

核心启发

1. 用 Picker 替代全量权限

对于配件配对、通讯录、交易记录等敏感数据,优先使用系统提供的 Picker 而不是请求完整的权限访问。Picker 让用户只分享必要的数据片段,既保护隐私又减少 App 需要管理的数据量。

为什么值得做:用户更愿意在明确控制数据分享范围的情况下使用功能,这能提高功能采纳率。

怎么开始:检查你的 App 中所有涉及敏感数据的场景,看看是否有对应的 Picker(AccessorySetupKit、Contact Access Button、FinanceKit Transaction Picker)可以替代。

2. 为本地网络和蓝牙访问准备清晰的使用说明

iOS 18 和 macOS Sequoia 的本地网络和蓝牙权限弹窗现在会明确展示访问会暴露的数据类型。清晰的使用说明字符串是建立用户信任的关键。

为什么值得做:用户在没有上下文的情况下看到权限弹窗时,更可能拒绝访问。良好的说明可以提高授权通过率。

怎么开始:审查你的 Info.plist 中所有与本地网络、蓝牙相关的使用说明字符串,确保它们清楚描述了 App 如何使用这些数据。

3. 利用 AccessorySetupKit 简化配件配对

如果你的 App 需要配对蓝牙配件,AccessorySetupKit 将三个独立的权限流程合并为一个,用户体验更流畅,隐私保护更精确。

为什么值得做:减少权限弹窗的混乱,提高配对成功率,且 App 只能访问已配对的设备,符合最小权限原则。

怎么开始:查看”Meet AccessorySetupKit”session,了解如何将现有的配件配对流程迁移到新的 API。

4. 考虑为敏感功能启用通行密钥

如果你的 App 使用密码保护账户,考虑支持通行密钥和自动升级功能。这能提供更安全、更易用的登录体验。

为什么值得做:通行密钥比密码更安全、抗钓鱼,且减少用户管理密码的负担。

怎么开始:查看”Streamline sign-in with passkey upgrades and credential managers”session,了解如何在你的 App 中实现自动通行密钥升级。


关联 Session

评论

GitHub Issues · utterances