Highlight
Apple 推出 Privacy Manifests(隐私清单),让第三方 SDK 开发者以标准化方式声明数据收集行为,Xcode 15 可自动生成隐私报告,帮助开发者准确填写 App Store 隐私营养标签,同时 iOS 17 会自动拦截未获用户授权的追踪域名连接。
核心内容
第三方 SDK 的隐私信息困境
你的 App 里有多少第三方 SDK?Analytics、广告、社交分享……每个 SDK 都在收集数据,但你真的清楚它们在收集什么吗?
(01:44)开发者反馈说,从第三方 SDK 获取完整的隐私信息非常困难。你需要知道每个 SDK 收集哪些数据类型、是否关联用户、是否用于追踪——这些信息散落在各处,甚至根本找不到。
Apple 的解决方案是 Privacy Manifests。
隐私清单是什么
(01:58)Privacy Manifests 是一个名为 PrivacyInfo.xcprivacy 的 plist 文件,第三方 SDK 开发者将其包含在 SDK 中。这个文件声明了:
- SDK 收集哪些数据类型
- 每种数据的用途
- 数据是否关联到用户
- 数据是否用于追踪
数据类型和用途的定义与 App Store 隐私营养标签完全一致,所以你不需要学习两套体系。
Xcode 15 隐私报告
(03:20)当你构建 App 准备提交 App Store 时,Xcode 15 会聚合项目中所有隐私清单,生成一份隐私报告。操作路径:Xcode Organizer → 右键点击 Archive → “Generate Privacy Report”。
这份 PDF 报告的组织方式与隐私营养标签类似,你可以直接参考它来填写 App Store Connect 中的隐私信息。
自动拦截追踪域名
(04:23)一个常见场景:第三方 SDK 在用户未授权追踪时,仍然默认连接追踪域名。开发者需要手动调用 SDK 的禁用函数或修改配置,容易遗漏。
Privacy Manifests 中声明的追踪域名会在用户未授权时,被 iOS 17 自动拦截网络连接。你不需要写任何代码,系统帮你消除这些边界情况。
如果某个域名同时用于追踪和非追踪功能,建议将其拆分为不同主机名,例如 tracking.example.com 和 non-tracking.example.com,只在清单中声明前者。
Required Reason APIs
(07:22)有些平台 API 可能被滥用于设备指纹追踪。Apple 将这些 API 归类为 “Required Reason APIs”,开发者必须在隐私清单中声明使用这些 API 的批准理由。
例如 NSFileSystemFreeSize(获取文件系统剩余空间)的批准理由之一是”检查磁盘空间是否充足再写入文件”。完整列表和批准理由在 Apple 开发者文档中维护。
隐私影响型 SDK 和签名要求
(10:15)Apple 识别了一些对用户隐私影响特别大的第三方 SDK,称为”隐私影响型 SDK”。从 2023 年秋季开始,App Store 会检查新提交和更新的 App 是否包含这些 SDK 的签名版本和隐私清单。2024 年春季起,这将成为 App Review 的正式要求。
详细内容
创建隐私清单文件
SDK 开发者在 Xcode 中创建 PrivacyInfo.xcprivacy 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array>
<string>tracking.example.com</string>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeName</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<true/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
<string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>
关键点:
NSPrivacyTracking:声明 SDK 是否用于追踪用户NSPrivacyTrackingDomains:列出追踪域名,iOS 17 会在未授权时自动拦截NSPrivacyCollectedDataTypes:声明收集的数据类型、是否关联用户、用途NSPrivacyAccessedAPITypes:声明使用的 Required Reason API 及批准理由代码
生成隐私报告
(03:40)在 Xcode 15 中生成隐私报告的步骤:
- 构建 App 并 Archive
- 打开 Xcode Organizer(Window → Organizer)
- 选择 Archives 标签
- 右键点击目标 Archive
- 选择 “Generate Privacy Report”
- 保存生成的 PDF 文件
这份报告汇总了 App 及其所有依赖的隐私声明,按数据类型和用途组织,与 App Store 隐私营养标签的填写界面一一对应。
使用 Points of Interest Instrument 检测追踪域名
(06:45)Xcode 15 的 Points of Interest Instrument 新增了追踪域名检测功能。在测试过程中,它会标记出可能用于跨 App/网站追踪用户活动的域名连接,帮助你识别需要在隐私清单中声明的追踪域名。
Required Reason API 声明示例
以文件时间戳 API 为例,在 PrivacyInfo.xcprivacy 中声明:
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
关键点:
NSPrivacyAccessedAPICategoryFileTimestamp:文件时间戳 API 类别C617.1:批准理由代码,表示”在 App 容器内、App 群组容器内或 App 的共享容器内访问文件时间戳”- 完整 API 类别和理由代码列表见 Apple 开发者文档
核心启发
-
为现有 App 补全隐私清单
- 做什么:检查你的 App 使用的所有第三方 SDK,确认它们是否提供了隐私清单
- 为什么值得做:2024 年春季起,缺少隐私清单的隐私影响型 SDK 将导致 App Review 被拒
- 怎么开始:在 Xcode Organizer 中生成隐私报告,对照报告检查每个依赖项
-
拆分追踪与非追踪域名
- 做什么:如果你的后端服务域名同时用于追踪和非追踪功能,将其拆分为独立子域名
- 为什么值得做:iOS 17 会自动拦截未授权的追踪域名连接,拆分后非追踪功能不受影响
- 怎么开始:在
PrivacyInfo.xcprivacy的NSPrivacyTrackingDomains中只声明追踪子域名
-
审计 Required Reason API 使用
- 做什么:扫描代码中是否使用了文件时间戳、磁盘空间、系统启动时间等敏感 API
- 为什么值得做:这些 API 必须在隐私清单中声明批准理由,否则将收到 Apple 的警告邮件
- 怎么开始:对照 Apple 文档 中的 API 列表逐项检查
-
为自研 SDK 添加隐私清单
- 做什么:如果你维护内部或开源 SDK,为其创建
PrivacyInfo.xcprivacy文件 - 为什么值得做:帮助使用你 SDK 的开发者准确填写隐私信息,提升 SDK 的可信度
- 怎么开始:在 Xcode 中新建 Property List 文件,命名为
PrivacyInfo.xcprivacy,按文档填写数据收集声明
- 做什么:如果你维护内部或开源 SDK,为其创建
-
启用 SDK 数字签名
- 做什么:为第三方 SDK 启用签名验证,确保 SDK 来自可信来源
- 为什么值得做:隐私影响型 SDK 必须同时包含签名和隐私清单,签名防止 SDK 被篡改
- 怎么开始:在 Xcode 15 中,SDK 开发者使用
codesign为 framework 签名,App 开发者 Xcode 会自动验证
关联 Session
- Verify app dependencies with digital signatures — 学习如何使用数字签名验证第三方 SDK
- What’s new in privacy — iOS 17 和 macOS Sonoma 中的最新隐私功能
- What’s new in App Store Connect — 了解 App Store Connect 中隐私信息的最新更新
评论
GitHub Issues · utterances