跳转至正文

iOS 应用的 Privacy Manifest

Capacitor iOS 应用 PrivacyInfo.xcprivacy 2026 合规与故障排查指南:required reason API、ITMS-91053 和 ITMS-91061,以及第三方 SDK manifest。

iOS 应用的 Privacy Manifest

App Store 上传必须提供 Apple privacy manifests: 每个应用都需要一个 PrivacyInfo.xcprivacy 用于描述你的应用的数据收集、追踪域名以及任何 必需的 API 原因 你的 code 调用。第三方 SDK 在 Apple 的强制要求列表中 必须随附自己的清单(若以二进制文件形式分发,还需附带签名)。本指南重点介绍 2026 年合规性与故障排除 以查找 Capacitor iOS 应用:声明内容及修复方法 ITMS-91053 和 ITMS-91061,以及如何在提交前进行验证。

隐私清单包含的内容

隐私清单是随应用或 SDK 一起打包的属性列表。Xcode 会在归档时将所有清单汇总成一份统一的隐私报告。

关键 用途
NSPrivacyTracking 您的应用或 SDK 是否按照 Apple 的定义使用数据进行追踪
NSPrivacyTrackingDomains 涉及追踪的域名
NSPrivacyCollectedDataTypes 收集的数据类型及其用途
NSPrivacyAccessedAPITypes 您所使用的必须声明理由的 API 您 code 使用的情况,并附带已批准的理由代码

Apple 的概览: 为您的应用或第三方 SDK 添加隐私清单.

您需要对二进制文件中所有的 code 负责,包括嵌入的 SDK。您的清单应仅描述 您的应用。请勿将其他 SDK 的数据处理实践粘贴到您的文件中。

必需原因 API 类别

因为 2024 年 5 月 1 日,如果您的应用使用了列出的 API 但未在其中提供经批准的理由,App Store Connect 将拒绝上传 NSPrivacyAccessedAPITypesApple 在以下文档中列出了相关的 API 和批准的理由: 描述所需理由 API 的使用情况.

截至 Apple 的 TN3183,该 类别 的值如下:

NSPrivacyAccessedAPIType 值 混合应用中的典型触发场景
NSPrivacyAccessedAPICategoryUserDefaults 设置、插件状态、轻量级持久化数据
NSPrivacyAccessedAPICategoryFileTimestamp 文件元数据、缓存、更新 bundle
NSPrivacyAccessedAPICategoryDiskSpace 下载前的剩余空间检查
NSPrivacyAccessedAPICategorySystemBootTime 已用时间、计时器或绝对时间戳
NSPrivacyAccessedAPICategoryActiveKeyboards 键盘扩展或输入检测

针对你使用的每个类别,添加一个包含以下内容的字典: NSPrivacyAccessedAPIType 和 NSPrivacyAccessedAPITypeReasons. 请选择 仅 Apple 为该类别列出的原因代码。代码错误会导致审核失败。

代码片段示例(在检查隐私报告后,请根据你的应用调整类别和代码):

<key>NSPrivacyAccessedAPITypes</key>
<array>
  <dict>
    <key>NSPrivacyAccessedAPIType</key>
    <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
    <key>NSPrivacyAccessedAPITypeReasons</key>
    <array>
      <string>CA92.1</string>
    </array>
  </dict>
</array>

Capacitor 本身也出现在 Apple 的 第三方 SDK 要求 列表中,因此该 framework 会自带一份用于 Capacitor 自身 API 使用的 manifest。你仍需为 你的 native 和 JavaScript 层、插件以及任何未被依赖项覆盖的 API 准备应用级 manifest。

ITMS-91053: 缺少 API 声明

ITMS-91053 意味着 App Store Connect 在你的 build 中检测到了必需的 API 原因,但在合并后的 privacy manifest 中找不到匹配项。

修复方法:

  1. 请查看拒绝邮件或 upload log。它会指明 API 的 类别 (例如 NSPrivacyAccessedAPICategoryDiskSpace).
  2. 在 Xcode 中打开归档隐私报告 (产品 > 归档,然后 生成隐私报告 位于归档项),查看差异是在你的 App target 中还是在依赖项中。
  3. 如果 API 位于 你的 code 或你拥有的插件中,请添加类别及经批准的理由至 ios/App/PrivacyInfo.xcprivacy.
  4. 如果 API 来自于 依赖项,请将 pod 或 SPM 包升级到包含 manifest 的版本,或者修复插件并仅声明你 fork 版本中实际调用的内容。
  5. 重新归档并在再次 upload 前确认该类别已出现在报告中。

不要声明未使用的类别。Apple 的静态分析基于二进制中的符号。

ITMS-91061:缺少第三方隐私清单

ITMS-91061 表示 影响隐私的 SDK 在你的 App bundle 中缺失 PrivacyInfo.xcprivacy。Apple 指出,当你发布新 App 或更新,且该更新 添加了 已列出的 SDK 时,该 SDK 必须包含隐私清单;二进制 SDK 还需要有效的 签名 ,且需来自 SDK 供应商。

修复方法:

  1. 从邮件中复制 framework 路径(例如 Frameworks/FirebaseCore.framework/FirebaseCore).
  2. 识别 CocoaPods、SPM 或 vendor 二进制包。
  3. 升级到包含以下内容的 vendor 版本 PrivacyInfo.xcprivacy 位于 framework 根目录。
  4. 在 upload 前,请清理、重新构建并验证 .xcarchive 内的文件。

请勿 将 SDK 的 collection 或 API 声明移至你的 app manifest 中。Apple 明确警告 app manifest 只能描述 app 本身。如果 SDK 已停止维护,请更换或使用符合规范的 vendor build。

列出的 SDK 包括常见的移动端技术栈(Firebase、Flutter、 Capacitor, shared_preferences_ios以及其他)。每次发布前请前往 Apple 官网查看最新列表。

第三方 SDK manifest 和签名

更新依赖时,Xcode 会验证二进制 framework 是否由与之前版本相同的开发者签名。这样在 manifest 变化时能保护供应链。

实际工作流:

  • 在 pod install 或解析 SPM 后,搜索 ios/ 以查找 PrivacyInfo.xcprivacy 文件。
  • 归档并使用 生成隐私报告 以了解整体情况。
  • 将报告与你在 App Store 隐私问卷中填写的答案进行对比。

对于 live update 工具,请声明 updater 实际使用的 required reason API(例如磁盘空间、文件时间戳或 user defaults)。网络访问不属于 required reason API 类别。如果 updater 会收集个人数据,请在 App Store 隐私标签和问卷答案中披露这些数据;仅通过 HTTPS 获取更新本身不会产生新的披露类别。请保持 Capgo live update 合规性 在记录 OTA 行为时需注意。

添加 PrivacyInfo.xcprivacy 在 Capacitor iOS 项目中

  1. 同步原生项目: bunx cap sync ios.
  2. 打开以下路径下的 Xcode workspace ios/App.
  3. 文件 > 新建 > 文件,选择 App 隐私 (或添加一个空的 PrivacyInfo.xcprivacy plist)。
  4. 将文件保存至 ios/App (与...在同一文件夹下) AppDelegate 即可)。
  5. 在目标 Build Phases > Copy Bundle Resources,确认 PrivacyInfo.xcprivacy 已列出。
  6. 根据您的 App 和插件,填写追踪、收集的数据类型以及所需的 Reason APIs。
  7. 在上传至 App Store Connect 之前,请进行 Archive,生成隐私报告,并修复任何缺失的类别。

如果您在磁盘上以 XML 格式编辑 plist,请重新打开 Xcode 以确保目标成员资格(target membership)保持正确。

每个 App 或 SDK target 都会保留各自的 PrivacyInfo.xcprivacy。当您进行 Archive 时,Xcode 会将这些 manifest 汇总成一份隐私报告。您无需手动将依赖项的 plist 合并到您的 App 文件中。

对于 自定义 Capacitor plugin 作为独立的 iOS framework 发布,添加 PrivacyInfo.xcprivacy 在该插件的 ios/Plugin/ 文件夹(或同等目录)中,并将其列入插件 target 的 复制 Bundle Resources,而不仅仅是在 app target 中。

当 NSPrivacyTracking 如果情况属实,或者你嵌入了广告或分析 SDK,请确保 manifest 与 App Store 隐私标签保持一致,并在 iOS 要求时显示 App Tracking Transparency prompt。 @capgo/capacitor-app-tracking-transparency 涵盖了 Capacitor 应用的 ATT 流程。

提交前的验证清单

  • App target 包含 PrivacyInfo.xcprivacy 在 复制 Bundle Resources.
  • 拒绝或报告中提到的每个必填原因类别都包含已批准的原因代码。
  • 构建中列出的每个第三方 SDK 都在预期路径下包含其自身的 manifest。
  • 隐私报告与您对 analytics、ads 以及 authentication SDKs 的理解一致。
  • App Store 隐私标签与合并后的报告一致。

常见问题

Capacitor 插件需要自己的 privacy manifests 吗?

如果插件以源码形式分发在您的仓库中,其 API 使用情况属于您 app 二进制文件的一部分。请在 app manifest 中声明插件调用的 API;如果插件作为独立的 framework 发布,请在插件 target 中贡献一个 manifest。Binary pods 必须遵守 Apple 的第三方 SDK 规则。

我可以通过仅编辑 app 的 PrivacyInfo.xcprivacy 来修复 ITMS-91061 吗?

不可以。SDK 必须随附该 manifest。您的文件应仅用于记录您 app 的行为。

Apple 的政策日期记录在哪里?

Required reason APIs:强制执行起始日期 2024 年 5 月 1 日。所列 SDK 的第三方清单与签名规则详见 第三方 SDK 要求.

从《iOS App 隐私清单》继续

如果你正在使用 iOS 应用的 Privacy Manifest 以规划安全与合规,并将其与 加密 以了解 Encryption 中的实现细节, 合规性 有关 Compliance 中的实现细节, Capgo 安全扫描器 关于 Capgo Security Scanner 的产品工作流, Capgo 安全性 关于 Capgo Security 的产品工作流,以及 Capgo 信托中心 关于 Capgo Trust Center 的产品工作流。

为 Capacitor 应用提供实时更新

当 Web 层 Bug 已上线时,通过 Capgo 推送修复,不必等 App Store 审核数天。用户会在后台获取更新,而原生变更仍走常规审核流程。

博客最新文章

Capgo 为你提供打造真正专业移动应用所需的深度洞察。