隐私清单生成与检查
勾选你的 App 或 SDK 做了什么,就能得到一份有效的 PrivacyInfo.xcprivacy 供复制或下载:是否跟踪及跟踪域名、用到的需声明理由 API 及苹果认可的理由代码(UserDefaults 的 CA92.1 等),以及收集的数据。也可以粘贴已有的隐私清单,找出未知的键、缺少或放错类别的理由代码和格式错误的 XML。全部在本页运行,不会上传任何内容。
类别名称、理由代码和数据键均摘自苹果官方文档,核对日期 2026-10-30。
跟踪
这里的“跟踪”按 App 跟踪透明度(ATT)的定义:为了广告把你 App 的数据与其他公司 App 或网站的数据关联起来,或把数据交给数据经纪商。
需要声明理由的 API(NSPrivacyAccessedAPITypes)
勾选与这个 target 代码相符的每一条理由。几乎所有 App 都用到 UserDefaults,所以几乎都需要 CA92.1。某个类别至少勾了一条理由才会写进文件。
收集的数据(NSPrivacyCollectedDataTypes)
勾选这个 App 或 SDK 收集的每一类数据,即数据离开设备、你或合作方能够访问。对每一类,说明是否与用户身份关联、是否用于跟踪,以及收集的目的。
已选 0 项
你的 PrivacyInfo.xcprivacy
在 Xcode 里用 File > New File > App Privacy 新建文件后用这段内容替换;或者把下载的文件拖进项目,并勾选对应 target,让它被拷进 bundle。
<?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>NSPrivacyAccessedAPITypes</key> <array/> <key>NSPrivacyCollectedDataTypes</key> <array/> <key>NSPrivacyTracking</key> <false/> <key>NSPrivacyTrackingDomains</key> <array/> </dict> </plist>
对这个文件的检查
没有发现问题。文件格式正确,只用了苹果列表里的键和代码。
它是怎么工作的
- •所有类别、理由代码、数据类型和目的都摘自苹果的隐私清单文档,核对日期 2026 年 10 月 30 日。每个代码都附有苹果原文的说明(中文为译文),方便你对照代码的实际用途。
- •生成的是 XML 属性列表,包含苹果说明的四个顶层键(NSPrivacyAccessedAPITypes、NSPrivacyCollectedDataTypes、NSPrivacyTracking、NSPrivacyTrackingDomains)。键按字母排序、用制表符缩进,与 macOS plutil 写出的内容逐字节一致,和 Xcode 生成的文件对比时差异干净。
- •文本按 XML 规则转义,域名或值里有 &、<、> 也不会弄坏文件。
- •检查功能在本页解析 XML,报告:带行号的格式错误、未知的键、类型错误的值、没有理由的类别、属于其他类别或不在苹果列表里的理由代码、未知的数据类型和目的,以及跟踪为 true 却没有域名。
- •检查过的文件可以载入生成器,用勾选框修改后重新下载。
它做不到的事
- •它不会扫描你的代码或二进制文件来找出调用了哪些 API,需要你自己勾选;在项目里搜索 UserDefaults、stat、systemUptime、mach_absolute_time 和磁盘空间相关的键是个好的开始。
- •它不替你判断哪条理由适用。每个代码的苹果说明就是规则,最终以 App 审核为准。
- •它不涵盖第三方 SDK。每个 SDK 在自己的 bundle 里带自己的隐私清单。
- •它不会填写 App Store Connect 的“App 隐私”部分,那是另一张表;Xcode 的隐私报告(Product > Archive 后选 Generate Privacy Report)可以帮你填。
- •它不读取二进制格式的属性列表,请先用 plutil -convert xml1 转换。
- •苹果会不定期更新需声明理由的 API 列表。这里的代码核对日期显示在表单上方。
常见问题
- 我的 App 需要隐私清单吗?
- 几乎肯定需要。苹果说明自 2024 年 5 月 1 日起,使用了需声明理由 API 却没在隐私清单里说明的 App,App Store Connect 不再接受;而几乎所有 App 都用到 UserDefaults。需声明理由 API 部分适用于 iOS、iPadOS、tvOS、visionOS 和 watchOS;收集数据部分适用于所有平台。
- UserDefaults 该用哪个理由代码?
- 只有你的 App 自己读写自己的设置,用 CA92.1。与扩展或同一 App Group 里的其他 App 共享,用 1C8F.1。C56D.1 只给为 App 包装 UserDefaults 的第三方 SDK 用;AC6B.1 用于读取 MDM 托管配置或写入 MDM 反馈。
- PrivacyInfo.xcprivacy 放在哪里?
- 放进 target 的资源里,文件名必须是 PrivacyInfo.xcprivacy。在 Xcode 里选 File > New File,在 Resource 部分选 App Privacy,并勾选你的 target。每个使用了需声明理由 API 的可执行文件或动态库,都要在自己的 bundle 里带一份隐私清单。
- 统计或广告 SDK 收集的数据要写进我的清单吗?
- 不用写进 App 的清单。苹果说明第三方 SDK 自己提供隐私清单,App 的清单不需要涵盖所链接 SDK 收集的数据。但你仍需在 App Store Connect 的“App 隐私”里申报这些数据;Xcode 的隐私报告会把所有清单汇总在一起。
- NSPrivacyTracking 设为 true 会怎样?
- 你必须在 NSPrivacyTrackingDomains 里列出跟踪域名。如果用户没有通过 App 跟踪透明度允许跟踪,系统会让发往这些域名的网络请求失败。如果你的 App 不存在 ATT 意义上的跟踪,就保持 false。
- 可以用别的类别的理由代码吗?
- 不可以。每个代码只属于一个类别,比如 C617.1 是文件时间戳的理由,放在 UserDefaults 下没有意义。检查功能会标出放错类别的代码,并说明它属于哪个类别。