隐私清单入门:保护用户数据的新方式
Get started with privacy manifests
2023年6月5日
一句话判断
如果你的 App 使用了第三方 SDK,隐私清单(Privacy Manifest)是你 2024 年必须关注的东西——它让 SDK 的数据收集行为变得透明,也让你的隐私标签更准确。Required Reason API 则意味着某些系统 API 必须声明使用理由才能调用。
这场 Session 讲了什么
苹果在 2023 年推出了三项隐私相关的核心机制:隐私清单文件(PrivacyInfo.xcprivacy)、追踪域名管理(Tracking Domains)和 Required Reason API。
隐私清单是一个属性列表文件,SDK 开发者用它声明自己的数据收集实践:收集哪些数据类型、数据用途是什么、是否关联到用户、是否用于追踪。这些信息与 App Store 的隐私营养标签(Privacy Nutrition Labels)定义一致。Xcode 15 新增了隐私报告生成功能——在 Organizer 中对 Archive 右键选择 “Generate Privacy Report”,就能得到一份 PDF 格式的汇总报告,直接用于填写 App Store Connect 的隐私信息。
追踪域名管理解决了一个实际痛点:部分第三方 SDK 默认开启追踪,开发者即使不想追踪用户,也可能因为配置遗漏而泄露数据。现在,SDK 在隐私清单中声明追踪域名后,如果用户未授权追踪,iOS 17 会自动阻断对这些域名的网络连接。
Required Reason API 是全新的 API 访问控制机制。某些容易被滥用于设备指纹识别的系统 API(如 NSFileSystemFreeSize),现在必须在隐私清单中声明使用理由。每个 API 类别都有预定义的合理用途列表,只有声明了匹配的理由才能调用。
值得深挖的点
追踪域名的自动阻断机制:这不仅是”提醒”,而是系统级网络拦截。iOS 17 会在网络层直接阻断对未授权追踪域名的连接。如果你的 App 某些功能域名同时用于追踪和非追踪目的,建议将它们拆分为不同子域名(如 tracking.example.com 和 api.example.com),只把追踪用途的域名加入清单。
Xcode 15 的隐私检测工具:Points of Interest instrument 现在可以显示你的 App 连接了哪些可能用于跨应用追踪的域名。这是开发阶段发现隐私风险的好工具——不依赖 App Review 的事后审查,而是在开发时就能定位问题。
Required Reason API 的合规范围:苹果强调受影响的 API 数量不多,但大多数开发者至少用到了其中一个。如果现有理由列表不覆盖你的场景,可以通过反馈表单向苹果申请新的使用理由。这意味着这个列表会持续演进。
代码片段
隐私清单文件 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>NSPrivacyTrackingDomains</key>
<array>
<string>tracking.example.com</string>
</array>
<!-- 数据收集声明 -->
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeName</string>
<key>NSPrivacyCollectedDataTypeLinkedToUser</key>
<true/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<!-- Required Reason API 声明 -->
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPITypeFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>DDAraw.1</string>
</array>
</dict>
</array>
</dict>
</plist>
最佳实践
- 第三方 SDK 开发者应尽早添加隐私清单,这样使用你 SDK 的开发者才能准确填写隐私标签
- 追踪和非追踪功能共用域名时,拆分为不同子域名再分别声明
- 使用 Xcode 15 的 Points of Interest instrument 在开发阶段检测潜在的追踪域名连接
- Required Reason API 的理由声明要真实准确——苹果会审核,App Review 也会检查
- 隐私报告可以直接对照填写 App Store Connect 的隐私信息,省去手动整理的麻烦
还有什么值得关注
- 苹果后续会公布哪些 SDK 必须包含隐私清单(所谓的”tracked SDK”列表)
- Required Reason API 的完整列表和未来更新计划
- 设备指纹识别(Fingerprinting)的定义边界——这与 ATT 的追踪定义不同,Fingerprinting 无论用户是否授权都不被允许
- Privacy Manifest 在 macOS 和其他平台上的适用范围