iOS CI/CD环境下如何用fastlane和Jenkins正确递增Build Number?
解决Fastlane中Version号(Bundle version string,short)不自动递增的问题
嘿,我刚好碰到过一模一样的情况!Fastlane的increment_build_number命令默认只负责递增Bundle version(也就是Xcode里的「Build」字段,对应CFBundleVersion),而Bundle version string,short(「Version」字段,对应CFBundleShortVersionString)是不会被这个命令修改的——这是它的默认设计逻辑。
如果想让Version号(比如从1.0.0递增到1.0.1)跟着部署自动更新,你可以试试这两种方法:
方法1:用Fastlane内置的increment_version_number命令
这个命令专门用来处理Version号的递增,支持按major(主版本,比如1.0.0→2.0.0)、minor(次版本,1.0.0→1.1.0)、patch(补丁版本,1.0.0→1.0.1)三种类型递增,也可以直接指定具体版本号。
把它加到你的Fastfile lane里就行,示例代码:
lane :deploy_to_crashlytics do # 递增补丁版本号(1.0.0 → 1.0.1) increment_version_number( bump_type: "patch", target: "YourAppTarget" # 如果有多个target,记得指定目标 ) # 同时递增Build号 increment_build_number( target: "YourAppTarget" ) # 后续的Crashlytics上传步骤 upload_to_crashlytics( # 你的Crashlytics配置参数 ) # 可选:自动提交版本号变更到Git commit_version_bump( message: "Bump version to #{get_version_number} and build to #{get_build_number}" ) end
方法2:自定义Version号递增逻辑
如果你的版本号规则比较特殊(比如想让Build号和Version的Patch号同步),可以用Ruby代码手动处理:
lane :deploy_to_crashlytics do # 获取当前Version号 current_version = get_version_number(target: "YourAppTarget") # 拆分版本号为数字数组 version_parts = current_version.split(".").map(&:to_i) # 自定义递增逻辑:比如只递增Patch位 version_parts[2] += 1 new_version = version_parts.join(".") # 设置新的Version号 increment_version_number( version: new_version, target: "YourAppTarget" ) # 递增Build号 increment_build_number(target: "YourAppTarget") # 上传到Crashlytics upload_to_crashlytics() # 提交变更 commit_version_bump(message: "Update version to #{new_version}") end
注意事项
- 确保你的Xcode项目里,Version和Build号没有硬编码死,而是使用Xcode默认的变量(或者Fastlane能正确读取的字段);
- 如果有多个Target,一定要在命令里指定
target参数,不然Fastlane可能会修改错目标; - 如果用Git管理代码,记得用
commit_version_bump提交版本号变更,不然下次构建又会回到旧的数值。
内容的提问来源于stack exchange,提问作者Vidhya Sri
相关产品推荐
相关产品推荐

