Xcode归档时移除Info.plist隐私密钥导致无法上传App Store
问题根本原因
该问题是Xcode 13及之后版本默认开启自动生成Info.plist机制导致的典型配置错配问题:
- 当项目Target的构建设置中
GENERATE_INFOPLIST_FILE(即「Generate Info.plist File」选项)被设为YES时,Xcode执行归档(Release模式构建)时不会直接使用你手动编辑的原始Info.plist文件,而是会根据Build Settings中内置的配置映射规则,自动生成最终打包进IPA的Info.plist文件,直接覆盖原始文件中未被规则识别的自定义字段。 - 你当前看到隐私权限密钥出现在
Build Settings的User Defined分区,是之前手动往Info.plist加键时Xcode做的自动同步,但自动生成plist的逻辑默认不会读取User Defined分区下的自定义隐私键写入最终产物,导致归档后包内的Info.plist缺失必填的隐私权限声明,直接触发App Store Connect的上传校验拦截。

可直接落地的修复方案
根据你的项目维护习惯二选一即可:
- 方案1:保留Xcode自动生成Info.plist的模式
打开Target > Build Settings,搜索GENERATE_INFOPLIST_FILE确认值为YES后,不要在原始Info.plist里手动添加隐私权限键,直接在Build Settings搜索Xcode内置的隐私配置项,填入对应权限文案即可:- 提醒事项权限对应项:
Privacy - Reminders Usage Description(映射键NSRemindersUsageDescription) - 照片权限对应项:
Privacy - Photo Library Usage Description(映射键NSPhotoLibraryUsageDescription) - 健康数据权限对应项:
Privacy - Health Share Usage Description、Privacy - Health Update Usage Description(分别对应NSHealthShareUsageDescription、NSHealthUpdateUsageDescription)
配置完成后归档时Xcode会自动把这些文案写入最终生成的Info.plist,不会再出现字段丢失的问题。
- 提醒事项权限对应项:
- 方案2:切换回手动维护Info.plist的模式
打开Target > Build Settings,搜索GENERATE_INFOPLIST_FILE将值改为NO,回到项目原始Info.plist文件中补全所有需要的隐私权限密钥和对应文案,后续归档时Xcode会直接使用你手动维护的plist文件,不会自动覆盖修改内容。 - 额外排查项:如果以上配置调整后问题仍然存在,检查项目的Build Phases中是否存在自定义Run Script脚本在构建阶段执行了全量覆盖
Info.plist的逻辑(比如部分老旧的自动改版本号脚本),调整脚本逻辑为仅修改目标字段、不要全量重写plist文件即可。
内容的提问来源于stack exchange,提问作者Grant Oganyan
相关产品推荐
相关产品推荐

