CocoaPods 第三方库 PrivacyInfo.xcprivacy 缺失问题处理指南(含 ITMS-91061/91055 解决方案)
背景说明
自 2023 年 5 月起,苹果要求 App Store Connect 上传的应用必须为第三方 SDK 提供有效的隐私清单文件(PrivacyInfo.xcprivacy)。若未包含该文件或声明无效,将导致 ITMS-91061(缺失隐私清单)或 ITMS-91055(无效 API 声明)错误。
核心问题:ITMS-91061 错误
若应用使用的第三方库缺少隐私清单文件,苹果会返回以下错误:
ITMS-91061: Missing privacy manifest
ITMS-91061 邮件示例
解决方案分类
情况 1:直接升级到支持的版本(推荐)
适用场景:库已更新并发布包含 PrivacyInfo.xcprivacy
的新版本。
示例:SVProgressHUD
-
操作步骤:
- 检查库的 GitHub 仓库或 CocoaPods 官方文档,确认最新版本是否已包含隐私清单文件。
- 在
Podfile
中移除固定版本号,升级到最新版本:- pod 'SVProgressHUD', '2.2.5' + pod 'SVProgressHUD'
- 执行
pod update
并验证。
情况 2:指定 Git 分支/Commit(库已更新但未发布版本)
适用场景:库已添加隐私清单文件,但尚未发布新版本(如 MBProgressHUD
)。
操作步骤:
-
找到最新提交的 SHA 或分支:
- 访问库的 GitHub 仓库的 Commits 页面,复制最后一条提交的 SHA(通过 "Copy full SHA" 按钮)。
-
修改 Podfile 配置:
# 指定具体 Commit pod 'MBProgressHUD', :git => 'https://github.com/jdg/MBProgressHUD.git', :commit => '4a7c5f3e53cdea77c5dcb8578c2ee5acacdf6781' # 或直接使用 master 分支 pod 'MBProgressHUD', :git => 'https://github.com/jdg/MBProgressHUD.git', :branch => 'master'
执行
pod install
。
情况 3:Fork 不再维护的库(极端情况)
适用场景:库已停止维护(如 AFNetworking
)。
操作步骤:
-
Fork 仓库并添加隐私清单文件:
- 在 GitHub 上 Fork 仓库(如
AFNetworking
)。 - 克隆到本地后,在根目录创建
PrivacyInfo.xcprivacy
文件。 -
文件内容示例(需根据实际 API 使用情况填写):
<?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>NSPrivacyTracking</key> <false/> <key>NSPrivacyTrackingDomains</key> <array/> <key>NSPrivacyCollectedDataTypes</key> <array/> <key>NSPrivacyAccessedAPITypes</key> <array/> </dict> </plist>
- 参考文档:
- 在 GitHub 上 Fork 仓库(如
-
更新 Podspec 文件:
在AFNetworking.podspec
中添加资源声明:s.resource_bundles = {'AFNetworking' => ['PrivacyInfo.xcprivacy']}
-
在 Podfile 中引用 Fork 后的仓库:
pod 'AFNetworking', :git => 'https://github.com/你的GitHub用户名/AFNetworking.git', :branch => 'master'
已提供修改版本:可直接使用 RomanticEncounter/AFNetworking,但需自行验证兼容性。
特殊错误处理:ITMS-91055
错误描述:
ITMS-91055: Invalid API reason declaration
ITMS-91055 邮件示例
原因:隐私清单文件中填写的 API 声明或原因无效。
解决步骤:
-
检查
PrivacyInfo.xcprivacy
文件:- 确保
NSPrivacyAccessedAPITypes
中列出的 API 类型与实际使用完全匹配。 - 每个 API 类型必须对应有效的
NSPrivacyAccessedAPITypeReasons
。
- 确保
- 参考官方文档:
- 修正后重新提交。
其他注意事项
-
二进制库的处理:
若使用非开源的二进制库(如通过.framework
直接集成),需联系库的开发者提供包含隐私清单文件的版本。 -
签名要求:
从二进制依赖的 SDK 需要开发者签名(需开发者账号权限),具体见苹果文档。 -
持续维护:
定期检查依赖库的更新,避免因版本过旧导致隐私清单缺失。
参考资源
通过以上步骤,可系统性解决因三方库缺少隐私清单文件导致的 App Store 提交失败问题。建议优先选择升级或 Fork 方式,避免因手动修改导致的兼容性风险。