Get started with privacy manifests
Privacy & Security 进阶 20m

隐私清单入门:保护用户数据的新方式

Get started with privacy manifests

2023年6月5日

在 Apple 官方观看视频

一句话判断

如果你的 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.comapi.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 和其他平台上的适用范围
WWDC 2023