# ITMS-91061 第三方 SDK 缺少隐私清单:怎么修 > ITMS-91061 表示你的应用包含 Apple 名单上的某个涉及隐私的第三方 SDK,而这个 SDK 没有隐私清单。升级 SDK,再到构建出的 App 里确认文件在不在。 - Canonical page: https://obelisk.club/blog/itms-91061-missing-privacy-manifest-sdk-zh - Author: Peter Zhang - Published: 2026-11-01 - Tags: xcode, app-store-connect, itms, privacy-manifest, debugging, 中文 遇到 ITMS-91061,就把邮件里点名的 SDK 升级到自带 `PrivacyInfo.xcprivacy` 的版本,确认这个文件确实在构建出的 App 里,然后上传新构建。不要把 SDK 的隐私信息抄进你自己 App 的隐私清单:Apple 明确说,你的清单只描述你的 App。 ## 报错原文 Apple 的 DTS 工程师在 Apple Developer Forums 的 [ITMS-91061 说明帖](https://developer.apple.com/forums/thread/774960)里引用了这段报错: ```text ITMS-91061: Missing privacy manifest - Your app includes "", which includes , an SDK that was identified in the documentation as a privacy-impacting third-party SDK. Starting February 12, 2025, if a new app includes a privacy-impacting SDK, or an app update adds a new privacy-impacting SDK, the SDK must include a privacy manifest file. Please contact the provider of the SDK that includes this file to get an updated SDK version with a privacy manifest. ``` 邮件里会写出路径和 SDK 名,所以你能准确知道是哪个依赖。Apple 没有公开 ITMS 代码列表,措辞以后可能会变。 ## 为什么会出现 Apple 在 [Third-party SDK requirements](https://developer.apple.com/support/third-party-SDK-requirements/) 页面上列了一批常用 SDK,其中包括 Alamofire、Kingfisher、Lottie、SDWebImage、SnapKit、RealmSwift、多个 Firebase 和 Facebook SDK、Flutter 以及不少 Flutter 插件。对这些 SDK,页面写明: - 提交包含名单上 SDK 的新应用,或者提交新加入了名单上 SDK 的更新时,必须带上该 SDK 的隐私清单。 - 名单上的 SDK 作为二进制依赖使用时,还需要签名。 - 名单上 SDK 的任何版本,以及重新打包了名单上 SDK 的其他 SDK,都在要求范围内。 Apple 文档 [Adding a privacy manifest to your app or third-party SDK](https://developer.apple.com/documentation/bundleresources/adding-a-privacy-manifest-to-your-app-or-third-party-sdk) 给出的起始日期是 2025 年 2 月 12 日。最常见的原因,是项目里锁定了一个旧版 SDK,那时它的开发者还没加隐私清单。 ## 怎么修 以下步骤按 DTS 那篇帖子整理: 1. **从邮件里拿到 SDK 名称。** 2. **升级到带有效隐私清单的版本。** 如果还没有这样的版本,联系 SDK 提供方。在 Swift Package Manager、CocoaPods 或其他引入方式里提高版本号,看看发布说明里有没有提到隐私清单。 3. **确认清单放在了预期位置**(见下表)。 4. **你自己的清单只写你的 App。** DTS 帖子原话:"Do not add the privacy practices of the SDK to your app's privacy manifest."(不要把 SDK 的隐私做法加进你 App 的隐私清单。) 5. **邮件里列了几个 SDK,就逐个处理**,然后重新归档、上传新构建。 Apple 期望的文件位置: | 产品 | 位置 | | --- | --- | | iOS、iPadOS、tvOS、visionOS 或 watchOS 框架 | `SampleFramework.framework/PrivacyInfo.xcprivacy` | | macOS 或 Mac Catalyst 框架 | `SampleFramework.framework/Versions/A/Resources/PrivacyInfo.xcprivacy` | | Swift package | 放在 target 的资源里,并在 package manifest 里显式声明为资源(Xcode 默认不把它当资源) | | 静态库(`.a`) | 不能带资源;Apple 建议改成静态 framework,再把清单加进去 | 如果 SDK 是你自己维护的,同一页文档讲了怎么添加;[隐私清单生成器](/tools/privacy-manifest-generator)可以按你的选择生成一个有效的 `PrivacyInfo.xcprivacy`。 ## 上传前怎么查 先归档,再列出构建出的 App 里所有隐私清单: ```bash find "MyApp.app" -name PrivacyInfo.xcprivacy ``` 我们在一个用了 Firebase 和 Flutter 的 iOS 归档上跑过,找到 21 个清单,有的在框架根目录(`Frameworks/Flutter.framework/PrivacyInfo.xcprivacy`),有的在资源 bundle 里(`Firebase_FirebaseCore.bundle/PrivacyInfo.xcprivacy`)。想看哪些框架没有清单: ```bash cd "MyApp.app" for f in Frameworks/*.framework; do [ -n "$(find "$f" -name PrivacyInfo.xcprivacy)" ] && echo "has manifest: $f" || echo "NO manifest: $f" done ``` 把 `NO manifest` 那几行和 Apple 的名单对一下。不是每个框架都需要清单,和这个报错相关的是名单上的 SDK 以及重新打包了它们的 SDK。有些 SDK 把清单放在单独的资源 bundle 里而不是框架里面,下结论之前先按 SDK 名搜一遍。对找到的每个文件跑 `plutil -lint`,可以确认它是能正常读取的属性列表;我们测试的 21 个都返回 `OK`。 你自己的清单是另一项检查。[Required Reason API 扫描器](/tools/required-reason-api-scanner)会在你的源码里找需要声明理由的 API,相应的报错见 [ITMS-91053 和 ITMS-91055 指南](/blog/itms-91053-itms-91055-privacy-manifest)。邮件里有好几个代码的话,粘进 [ITMS 报错查询](/tools/itms-error-lookup)。 ## 常见问题 ### 把 SDK 的信息写进我 App 的 PrivacyInfo.xcprivacy,能解决 ITMS-91061 吗? 不能。Apple 的 DTS 帖子说,你 App 的清单只应描述你 App 自己的隐私做法,SDK 必须自带清单。 ### 哪些 SDK 需要隐私清单? Apple Third-party SDK requirements 页面上列出的 SDK、它们的任何版本,以及重新打包了它们的 SDK。Apple 文档还说,其他 SDK 如果用了需要声明理由的 API、收集数据或连接跟踪域名,也应当带清单。 ### 已上架的应用每次更新都会遇到这个报错吗? 报错里的规则针对的是包含名单 SDK 的新应用,或者新加入名单 SDK 的更新。对一直沿用某个 SDK 的更新会怎样,我们没看到 Apple 的说法,所以旧版 SDK 仍然算风险,还是升级为好。 ### SDK 提供方一直没出带清单的版本,怎么办? Apple 的帖子建议联系提供方要更新版本,并且不要改为把 SDK 的隐私做法写进你 App 的清单。我们在 Apple 文档里没找到其他办法,所以如果等不到新版本,剩下的选择就是移除或替换这个依赖。 ### ITMS-91061 和 ITMS-91053 是一回事吗? 不是。ITMS-91061 是名单上的 SDK 缺少清单;ITMS-91053 是某个需要声明理由的 API 没写理由,来源可以是你的代码,也可以是 SDK 的代码。 ## 参考资料 - [Apple DTS 的 ITMS-91061 说明帖](https://developer.apple.com/forums/thread/774960),Apple Developer Forums - [Third-party SDK requirements](https://developer.apple.com/support/third-party-SDK-requirements/),Apple Developer Support - [Adding a privacy manifest to your app or third-party SDK](https://developer.apple.com/documentation/bundleresources/adding-a-privacy-manifest-to-your-app-or-third-party-sdk),Apple 开发者文档 - [Privacy manifest files](https://developer.apple.com/documentation/bundleresources/privacy-manifest-files),Apple 开发者文档