解决ITMS-91053缺失API声明错误
问题说明
当向App Store Connect提交应用时,您可能收到如下警告信息:
ITMS-91053:缺失API声明
您的应用在"Test"文件中引用了需要声明原因的API,涉及以下API类别:NSPrivacyAccessedAPICategoryFileTimestamp
......
(其他类似警告)
虽然当前提交成功,但从2024年5月1日起,所有新应用或更新必须解决此问题才能通过审核。此错误表明您的应用使用了苹果的敏感API但未在隐私清单文件中声明使用原因。
注意
此问题源于苹果新隐私政策,要求开发者对特定API的使用进行透明化声明,防止设备指纹识别
完整解决方案
步骤1:创建隐私清单文件
- 在Xcode中打开项目
- 选择 File > New > File...
- 在资源(Resource)部分选择 App Privacy 文件类型
- 命名文件为 PrivacyInfo.xcprivacy(必须使用此名称)
- 确保勾选应用的主目标Target
- 点击 Create
验证
创建后确认文件已在项目导航器中显示,位置建议与Info.plist同级以便管理
步骤2:配置API声明
打开PrivacyInfo.xcprivacy
文件,添加以下结构化内容(根据实际使用的API类别调整):
步骤3:设置正确的目标成员资格
关键步骤
文件创建后必须设置正确的Target Membership:
- Xcode中选中PrivacyInfo.xcprivacy文件
- 在右侧Inspector面板中
- 勾选应用主目标(如果需要扩展,为每个扩展单独添加此文件)
- 确保文件在构建阶段被包含
跨平台框架特别指南
Flutter项目
- 创建路径:
/ios/Runner/PrivacyInfo.xcprivacy
- 内容与上述XML示例相同
- 无需额外配置,Xcode会自动识别
Xamarin/MAUI项目
- 创建PrivacyInfo.xcprivacy文件
- 在.csproj文件中添加声明:
xml
<ItemGroup>
<BundleResource Include="PrivacyInfo.xcprivacy" />
</ItemGroup>
React Native/Expo
- 在app.json中添加配置:
json
"ios": {
"privacyManifests”: {
"NSPrivacyAccessedAPITypes": [
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryUserDefaults",
"NSPrivacyAccessedAPITypeReasons": [ "CA92.1" ]
}
]
}
}
- 更新所有依赖:
bash
npx expo install --fix
疑难排解指南
第三方库导致的错误
即使您已添加隐私声明,第三方库缺失声明仍会导致错误:
- 更新所有依赖到最新版本(支持隐私清单的版本)
- 对于不再维护的库:
- 从库的GitHub获取其PrivacyInfo.xcprivacy
- 手动添加到项目
- 设置Target为库名而非应用目标
原因代码选择指南
重要
切勿直接复制他人原因代码!必须根据实际用途选择官方批准的代码:
- 访问 苹果官方API原因文档
- 根据API功能类别查找匹配原因
- 常见原因代码对应表:
API类别 | 合法用途 | 原因代码 |
---|---|---|
UserDefaults | 存储用户设置 | CA92.1 |
FileTimestamp | 文件修改时间检查 | C617.1 |
DiskSpace | 检查存储空间 | E174.1 |
SystemBootTime | 性能监控 | 35F9.1 |
验证配置
- 生成归档文件(Product > Archive)
- 打开Xcode Organizer
- 右键选择生成的archive文件
- 选择 Generate Privacy Report
- 验证所有API已正确声明
扩展注意事项
- 应用扩展(App Extensions):每个扩展都需要独立的PrivacyInfo.xcprivacy文件
- 多平台项目:为iOS、iPadOS、macOS等目标分别添加
- API使用审核:定期使用Xcode的API扫描工具(位于项目设置的Build Phases)
最佳实践
- 在开发早期添加隐私清单文件
- 使用依赖管理工具检查第三方隐私声明(如CocoaPods)
- 每次添加新API后更新声明
- 使用脚本自动验证合规性