分类
前端 技术

iOS fastlane的使用

打包从来都是一个枯燥乏味的等待流程,手动选择scheme以后点击archive完还得等待Organizer弹出,然后一个个点击,下一步,下一步。。。经常因为网络波动等其他原因,你去喝个咖啡也不是,干看着进度条的显示也不是,效率非常低。虽然和同事讨论过此类问题,终极解决方案当然是硬件升级,但毕竟搞咱们这一行的,还是应当想尽方法使用合适的工具来节省可能的时间来提升效率。

Fastlane,顾名思义,快车道嘛,非常流行的自动打包发布工具,看一下官方的介绍文档开头的代码片段:

lane :beta do
  increment_build_number
  build_app
  upload_to_testflight
end

lane :release do
  capture_screenshots
  build_app
  upload_to_app_store       # Upload the screenshots and the binary to iTunes
  slack                     # Let your team-mates know the new version is live
end

很容易看出这两个不同的配置在做什么,beta为测试版本,release为发布版本,“increment_build_number”即为自动增加build版本号,减少每次手动修改的繁琐操作,beta经常需要上传到testflight,这里的“upload_to_testflight”也能很自然的明白。简单的几行代码,就能窥见它的功能,那就让我们从头开始吧。

安装

brew install fastlane

初始化 进入iOS工程目录

fastlane init

Beta版本部署

使用内置的build_app命令来build我们的app,如下:

lane :beta do
  build_app(scheme: "MyApp",
            workspace: "Example.xcworkspace",
            include_bitcode: true)
end

运行如下命令即可:

fastlane beta

如果一切顺利的话,在当前路径下就会生成【ProductName】.ipa文件。

上传

lane :beta do
  sync_code_signing(type: "appstore")    # see code signing guide for more information
  build_app(scheme: "MyApp")
  upload_to_testflight
  slack(message: "Successfully distributed a new beta build")
end

上面的实例代码在成功上传完testflight后使用slack发了一条成功的状态消息,这就非常方便了。我们可以如法炮制,既然目前团队使用钉钉,那么我们自然而然会想到使用钉钉机器人来通知, 那么就需要涉及到fastlane的plugins了。

安装插件

fastlane add_plugin [name]

本次案例中使用的是fastlane-plugin-ding_talk_msg_push和fastlane-plugin-versioning这两个插件。前者是发送钉钉消息的,后者用来更灵活地修改各种项目的版本号。如果我只想修改workspace下的单个target的build number,可以使用如下代码:

increment_build_number_in_plist(build_number: (latest_testflight_build_number + 1).to_s, target:"YOUR_TARGET_NAME")

这里每次将当前testflight上最新的版本号+1,即可避免重复上传相同版本的问题,省去记忆负担。

回到刚刚的钉钉消息,通过钉钉群的机器人token,我这里临时写在了fastlane配置文件里:

ding_talk_msg_push(token:dingding_token1, text:changlog, at_all: true)

这里的changelog即为我们每次打包的更新日志,我们采用的是临时prompt的形式,支持多行。当然,你也可以去读取readme文档或者指定git log来实现自动填充的效果。

# The user confirms their input by typing `END` and Enter
    changelog = prompt(
      text: "Changelog: ",
      multi_line_end_keyword: "END"
    )

TO BE CONTINUED.

“iOS fastlane的使用”上的一条回复