What's new in privacy
Privacy & Security 进阶 20m

隐私功能的新更新

What's new in privacy

2023年6月5日

在 Apple 官方观看视频

一句话判断

今年的隐私更新围绕”减少权限请求”展开——嵌入式 Photos Picker 不需要相册权限、屏幕共享 Picker 不需要录屏权限、日历新增”仅添加”权限——如果你的 App 还在请求全量权限,现在是时候重新设计了。

这场 Session 讲了什么

Session 介绍了 Apple 平台在 2023 年的隐私增强,围绕四大隐私支柱展开:数据最小化、设备端处理、透明度与控制、安全保护。

Photos Picker 增强

  • iOS 17 和 macOS Sonoma 中,Photos Picker 可以完全嵌入 App 内——看起来像是 App 的一部分,但实际由系统渲染。
  • 三种嵌入模式:无装饰全屏、单行横向滚动、内联完整选择器。
  • 新增选项菜单,控制是否共享照片元数据(标题、位置等)。
  • App 只能获取用户选择的图片,不需要请求整个相册的访问权限。
  • iOS 17 还重新设计了完整相册权限对话框——展示照片数量和样本预览。
  • 系统会定期提醒用户哪些 App 有完整相册访问权限。

Screen Capture Picker(macOS)

  • 新的 SCContentSharingPicker API(ScreenCaptureKit)。
  • App 不需要获取录屏权限——系统代为展示窗口选择器,用户选择后才共享。
  • macOS Sonoma 新增屏幕共享菜单栏图标,提醒用户有 App 在录屏。
  • 点击图标可以预览共享内容、添加/移除窗口、或结束共享。

日历权限改进

  • 如果 App 只需要创建日历事件,使用 EventKitUI 不需要任何权限。
  • 新增”仅添加”日历权限——App 可以添加事件但不能读取现有事件。
  • 需要完整日历访问时可以请求升级,建议在用户明确意图时才请求。

空间计算的隐私设计

  • 空间输入模型设计上保护隐私——App 不直接访问传感器数据,通过系统 API 获取所需信息。
  • 摄像头和传感器数据在系统层面处理,App 只获得必要的最小信息。

值得深挖的点

嵌入式 Photos Picker 的设计哲学是”看起来像 App 的一部分,但实际由系统控制”。照片在视觉上融入你的 App UI,但渲染和选择过程完全在系统层面完成。用户选择的照片才会传递给 App。这种设计平衡了用户体验(无缝的视觉感受)和隐私保护(App 无法偷偷浏览整个相册)。

日历的”仅添加”权限填补了一个长期存在的空白。很多 App(如餐厅预订、演唱会购票)只需要往日历添加事件,但之前必须请求完整的日历读写权限。用户看到”访问你的日历”的提示时可能会拒绝——App 就无法添加事件了。现在有了仅添加权限,这类 App 可以在不读取任何日历数据的情况下添加事件。

屏幕共享菜单栏图标是 macOS Sonoma 的一个重要安全信号。之前用户授权录屏后很容易忘记某个 App 还在录制屏幕。新的常驻图标提供了持续的可视提醒,点击可以快速查看和终止共享。这对视频会议 App 的用户来说是一个重要的安全感提升。

代码片段

嵌入式 Photos Picker 的三种模式:

import PhotosUI

// 模式1:单行横向滚动选择器
PhotosPicker(selection: $selectedItems,
             matching: .images) {
    // 最小化展示——一行可滚动的缩略图
}

// 模式2:内联完整选择器
// 使用新的嵌入式 API,Photos Picker 看起来是 App UI 的一部分
// 但由系统渲染和控制

// 选项菜单:控制元数据共享
var config = PhotosPickerConfiguration()
config.selection = .ordered
config.selectionLimit = 5
// 用户可以在选择时控制是否共享位置、标题等元数据

Screen Capture Picker(macOS):

import ScreenCaptureKit

// 使用新的 SCContentSharingPicker
// 不需要预先获取录屏权限!
let picker = SCContentSharingPicker.shared

// 展示窗口选择器
picker.showPicker(for: .init()) { result in
    switch result {
    case .success(let content):
        // 用户选择了要共享的窗口或屏幕
        // 只有这个内容会被录制
        startCapture(with: content)
    case .failure:
        // 用户取消了选择
        break
    }
}
// 系统菜单栏会显示屏幕共享图标

日历的仅添加权限:

import EventKit

// 方式1:使用 EventKitUI 创建事件——不需要任何权限
let eventVC = EKEventEditViewController()
eventVC.eventStore = eventStore
eventVC.event = newEvent
present(eventVC, animated: true)
// 系统渲染 UI,App 不需要日历访问权限

// 方式2:请求仅添加权限
let status = EKEventStore.authorizationStatus(for: .event)
if status == .notDetermined {
    // 新的仅添加权限
    let granted = try await eventStore.requestFullAccessToEvents()
    // App 可以添加事件但不能读取现有事件
}

最佳实践

  • 优先使用 Photos Picker 获取照片,只在确实需要全量访问时才请求相册权限。
  • macOS 视频会议 App 使用 SCContentSharingPicker,不要自己实现屏幕选择器。
  • 日历 App 评估是否真的需要读取权限——大部分只需添加事件的场景用 EventKitUI 或仅添加权限就够了。
  • 请求权限升级(从仅添加到完整访问)时,在用户明确意图的时机请求,配上有意义的用途说明。
  • 空间计算平台上的隐私要求更严格——不要尝试绕过系统 API 直接访问传感器数据。
  • 定期审查你的 App 请求了哪些权限,能否用更细粒度的 API 替代。

还有什么值得关注

  • “Embed the Photos picker in your app” Session 详细介绍嵌入式 Photos Picker 的能力。
  • “What’s new in ScreenCaptureKit” Session 介绍 SCContentSharingPicker 的完整 API。
  • macOS Sonoma 的屏幕共享菜单栏图标是系统级行为,所有录屏 App 都受影响。
  • 空间计算平台的隐私模型是一个新的设计范式——App 通过系统 API 间接获取用户数据,不能直接访问传感器。
  • Apple 的四大隐私支柱(数据最小化、设备端处理、透明度与控制、安全保护)是设计 App 隐私策略的好框架。
WWDC 2023