每次打包自动增加 build number

新需求每次测试环境打包的时候增加 build number 并显示在, 目前测试环境打包是通过 gitlab ci + fastlane + fir-cli, 测试再通过 fir 下载, 生产或者准生产环境则是打包到 testflight 上进行测试

生产环境&准生产

因为 testflight 同一个版本每次上传的 build 必须和之前不同, 所以方案是拉取 testflight 对应版本最近的 build number 再加一就行了, 缺点是在 testflight 并不会立即可下载, 需要等待, 所以这个时间段内是无法拉取到最新的 build number, 增加一个 private lane

desc "Update build number to next one available"
  private lane :update_build_number do
    increment_build_number({
      build_number: latest_testflight_build_number(version: get_version_number) + 1
    })
 end

测试环境

因为是发布到 fir 给测试进行测试, 所以 build number 其实是可以重复的。

方案 1, 增加一次 build number 并 commit

其实 fastlane 上面的支持已经很好了, 有 commit_version_bump action 来自动 commit 一次 version bump, 配合 increment_build_number 效果很好, 但是因为是在 gitlab runner 上进行打包, 每次都会 checkout 一次当前打包分支, 所以不能进行 build number 的记录, 有点沮丧

方案 2, 基于全局的版本记录

通过一个 version_log 文件来记录每次版本对应的 build number 更新, 因为 Ruby 对于hash(同 NSDictionary) 的存取很便捷。 缺点是在 pipeline 运行的过程中增加了版本然后取消, 依然会增加版本。但是影响不大, 不会重复就行

 private lane :add_local_build_number do
    path = "./version_log"
    a_file =  File.open(path, 'r+')
    line = a_file.readlines
    version = get_version_number(xcodeproj: "./xcode.xcodeproj")
    dic = line.count > 0 ? eval(line[0]) : {}
    a_file.close
    puts dic
    dic[version] = dic[version].to_i + 1
    build_number = dic[version]
    b_file = File.open(path, 'w')
    b_file.syswrite(dic.to_s)
    b_file.close
    increment_build_number({
      build_number: build_number
    })
  end

方案3: 拉取 fir 上面的版本信息再进行build + 1

api地址, 会有更准确的版本增加

很取巧的用了方案 2, 再次感谢下 fastlanegitlab-ci, 节省了很多时间

你可能感兴趣的:(自动化打包,iOS)