不管是对于只有一个iOS工程师的小团队,还是个人练手的SideProject,由于是”单兵作战”,目标就是将以下流程做到尽量自动化:

开发 -> Git提交 -> 打包 -> 上传iTunesConnect -> TestFlight测试 -> 发布


本文内容




本篇文章基于以下前提


  • 基本了解Git的使用
  • 已有苹果开发者账号


工具及安装


  1. 安装Git

  2. 选择Git仓库:
    GitHub(开源免费,私人仓库收费,建议开源项目选择)
    GitLab / Bitbucket(私人仓库免费,限制人数,建议闭源项目选择)

  3. 安装fastlane 如何安装?


TestFlight设置


  • iTunesConnect -> My App -> [Your App] -> TestFlight -> Test Information
  • Beta App Description为必填,其他随意 如果还未上传过版本,则iTunes Connect Users无法点击,上传一个版本处理完成后即可。
  • 选择iTunes Connect Users,新加一个Tester,选择自己的账号,如果需要添加其他的内测者,进入*Users and Roles*,使用AppleID进行邀请,同意后即可加入测试中。
  • 然后选择BUILDS下的iOS,会显示可进行测试的版本
  • 如果版本后显示 Missing Compliance ,需要进入该版本进行设置,点击版本号,右上角,根据自己的App进行确认即可,如果不想以后每次都进行确认,则需要在项目的info.plist中加入App Uses Non-Exempt Encryption,有加密则Yes,否则为No.
  • 之前对Test账号进行激活时,邮件中会有一个兑换码(Redeem),需要iPhone安装TestFlight,并在TestFight中输入以激活该App的测试版本,也可在iPhone上直接点击邮件中的链接进行激活。 *经过以上设置,每次有新的版本上传到iTunesConnect都会收到推送,安装后即可进行测试。


使用fastlane打包上传


终端进入到项目目录:

$ fastlane init

按照提示一步步向下,期间需要输入你的开发者AppleID,密码,两步验证(如果开启的话)。

然后编辑fastlane/Fastfile, lane :beat do 下面加入 increment_build_number ,每次打包自动更新build版本:


.
.
.
lane :beta do
increment_build_number
.
.
.



我们使用Slack的webHooks来监测测试及打包出错的情况:
Slack中添加一个 Incoming WebHooks,选择一个你想收取消息的Channel。
App Directory > Browse Apps > Custom Integrations > Incoming WebHooks
配置Fastfile,并在 error do 中触发Slack的消息通知。

.
.
.
before_all do
    ENV["SLACK_URL"] = "https://hooks.slack.com/services/XXX/XXX/XXX"
end
.
.
.
error do |lane, exception|
    slack(
      message: exception.message,
      success: false
    )
end
.
.
.



接着在xcode中,Build Setting -> Versioning -> Current Project Verstion 填上当前的build版本
如果开启了两步验证,还需要到https://appleid.apple.com/account/manage去生成一个专用密码。

然后测试一下:

$ fastlane beta

如果一切正常,新版本的App会上传到iTunesConnect,处理完成后会收到邮件,同时iPhone上会收到TestFight的提醒,直接更新后即可测试。


自动化


我们使用Git的hooks来完成自动化,在local有新的commit时触发测试及打包上传的流程。
关于hooks的使用可以参考这篇文章

  • 提交前进行测试(如果需要的话):
    进入 .git,新建 hooks/pre-commit 文件,加入可执行权限:

$ mkdir .git/hooks
$ touch .git/hooks/pre-commit
$ echo '#!/bin/sh' >> .git/hooks/pre-commit
$ echo 'fastlane test' >> .git/hooks/pre-commit
$ chmod +x .git/hooks/pre-commit

测试失败会取消提交操作

  • 提交后自动打包上传:
    进入 .git,新建 hooks/post-commit 文件,加入可执行权限:

$ mkdir .git/hooks
$ touch .git/hooks/post-commit
$ echo '#!/bin/sh' >> .git/hooks/post-commit
$ echo 'fastlane beta' >> .git/hooks/post-commit
$ chmod +x .git/hooks/post-commit

再测试一下:


$ git add --all
$ git commit -m 'package and uplaod test'

如果一切顺利,在commit以后即开始刚才的打包上传流程。

另外,GUI的Git客户端可能不支持hooks,测试过SourceTree不支持,其他未知。


最后


至此,我们已将文章开头的流程变为了:

开发 -> Git提交 -> 抽身于其他事 -> 收到测试提醒 -> 测试 -> 发布

而其中的 打包 -> 上传iTunesConnect 已经实现自动化,从此以后再也不用盯着xcode等打包上传了,而且使用fastlane上传的出错率极低,以前 【上传很久结果等回的是xcode一个莫名的报错】 的日子将一去不复返。