Xcode 14中Info.plist的CFBundleVersion同步失效问题求助
Xcode 14 构建号不更新问题的解决办法
问题根源
Xcode 14 改变了构建号的管理逻辑:不再从 Info.plist 文件自动同步构建号到项目设置,而是以项目配置里的 CURRENT_PROJECT_VERSION(也就是「通用」标签里的构建号)作为权威值。即便你用脚本修改了 Info.plist 的 CFBundleVersion,构建或归档时Xcode会用项目设置里的值覆盖它,导致显示不对。
具体解决步骤
1. 让脚本直接修改项目的构建号配置
放弃直接修改 Info.plist,转而修改项目文件中的 CURRENT_PROJECT_VERSION 值,这样Xcode会自动同步到 Info.plist 和最终包中。
示例脚本(基于Git提交次数生成构建号):
# 获取Git提交次数作为构建号 BUILD_NUMBER=$(git rev-list --count HEAD) # 修改项目的CURRENT_PROJECT_VERSION(替换成你的项目/目标名称) # 如果你用的是xcworkspace,把-project换成-workspace,-scheme换成你的scheme名 xcodebuild -project YourProject.xcodeproj -target YourTarget -configuration ${CONFIGURATION} CURRENT_PROJECT_VERSION=$BUILD_NUMBER
2. 调整脚本的执行时机
确保你的脚本在 Copy Bundle Resources 之前执行:
- 在Xcode的「Build Phases」里,把你的「Run Script」阶段拖到「Copy Bundle Resources」上方;
- 或者在「Scheme」的「Build」预操作(Pre-actions)里添加这个脚本,确保构建开始前就更新好构建号。
3. 清理Xcode缓存
Xcode14的缓存机制更顽固,旧缓存可能导致构建号不更新:
- 按
Shift+Command+K清理构建文件夹; - 手动删除
DerivedData目录(路径一般是~/Library/Developer/Xcode/DerivedData); - 重启Xcode后重新构建/归档。
4. 检查Info.plist的变量引用
确保 Info.plist 中的 CFBundleVersion 字段使用变量引用,而不是硬编码:
- 打开
Info.plist,把CFBundleVersion的值改成$(CURRENT_PROJECT_VERSION); - 这样项目设置的构建号会自动同步到
Info.plist,无需手动修改文件。
内容的提问来源于stack exchange,提问作者lucadb
相关产品推荐
相关产品推荐

