iOS 使用fastlane自动化打包

前言

由于在项目的测试阶段,为了快速的测试需要频繁的打包发布,会耗费很多的时间。而且需要自己手动去配置很多证书和环境,在每次等待都备受煎熬,为了从这种折磨中脱离而出,便考虑使用持续化集成来进行自动打包。
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。、
目前比较流行的自动化流程工具是Fastlane,Fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而Fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。到目前为止,Fastlane的工具集基本上涵盖了打包,签名,测试,部署,发布,库管理等等移动开发中涉及到的内容。同时该套件也支持与 Jenkins 、CocoaPods、xctools 等其他第三方工具的集成。而且蒲公英和fir为开发者提供了Fastlane的插件,允许开发者通过Fastlane上传ipa包到蒲公英,fir,由于我们主要使用蒲公英作为应用分发平台,所以本文主要介绍下打包发布到蒲公英的设置,fir同理。
在参考了一些资料后我把持续化集成的方案定为:Jenkins + Fastlane + GitLab + 蒲公英。而本文主要先介绍下使用fastlane进行自动化打包。

一、Fastlane安装

Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大量的时间。

安装过程如下:

###
1.检查Ruby版本,需要2.0及以上版本。在终端输入以下命令确认:

1
ruby -v

我在使用的版本是2.4.1的

需要注意的是需要将gem的source改为https://gems.ruby-china.com

域名更换.png

如何检查?在终端输入以下命令:

1
gem sources

结果应为:

镜像.png

如果gem的source不是https://gems.ruby-china.com,执行下面语句来进行替换

$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com

确保只有 gems.ruby-china.com

2.检查Xcode命令行工具是否安装。在终端输入以下命令:

xcode-select --install

如果没有安装会进行安装。如果已经安装了则会提示:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

3.安装Fastlane

sudo gem install fastlane --verbose

如果出现以下错误:

ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/rougify

则输入以下命令:

sudo gem install -n /usr/local/bin fastlane

4.检查Fastlane是否正确安装。输入以下命令:

fastlane --version

可以看到Fastlane版本信息,我的是fastlane 2.104.0

蒲公英的Fastlane插件安装

打开终端,进入你的项目工程的根目录,输入以下命令:

fastlane add_plugin pgyer

在中间输入y按回车,出现下面的提示便是安装成功了。

安装蒲公英插件

二、初始化Fastlane项目配置

1.打开终端,进入你的项目工程的根目录(cd到XX.xcworkspace所在目录),输入以下命令:

fastlane init

初始化结束后,会提示选择Fastlane的用途,一共是四个选项,我选了最后一个,自定义,然后打开项目目录,会发现多了一个fastlane文件夹:

fastlane.png

Appfile

Appfile用来存放app_identifier,apple_id和team_id。 了解详情,它的格式是这样的:

app_identifier "com.xxx.xxx" # app的bundle identifier
apple_id "xxx@[xxx.com](http://xxx.com/)" # 你的Apple ID
team_id "XXXXXXXXXX" # Team ID

你也可以为每个lane提供不同的 app_identifier, apple_id 和 team_id,例如:

for_lane :deta do
app_identifier "com.bbb.bbb"
apple_id "bbb@[bbb.com](http://bbb.com/)"
team_id "AAAAAAAAAA"
end

这里就是为Fastfile中定义的:inhouse设置单独的信息。

Fastfile

Fastfile管理你所创建的 lane ,打开文件夹中的Fastfile,里面则是执行自动化打包任务的代码,这里我是用sublime打开的,在sublime的菜单中,找到View——>Syntax中选择ruby,即可高亮代码:

1682338-4b01919d5ec865d7.png

Fastlane以lane为单位,去执行一个自动化任务,lane:custom_lane,代表了一个叫custom_lane的任务,后面的do,则表示需要执行的操作,Fastfile中的代码如下:

Fastfile.png

上面其实就是定义两个任务,一个是打包测试版本,一个是打包正式版本

三、执行脚本

cd到项目目录,输入如下命令来执行我们自己定义的lane,格式如下fastlane+脚本第一行中的platform名+脚本第二行中的lane名:

fastlane ios beta

然后Fastlane开始执行任务了,编译项目的文件,这里执行的是gym方法:

开始打包.png

最后会生成dSYM文件以及ipa:

生成dSYM文件.png

接下来会继续上传ipa到蒲公英:

上传蒲公英.png

自此打包完成并成功上传到蒲公英。fastlane的集成已经完成,后面开始部署Jenkins

参考文章

iOS自动化打包发布(Jenkins + Fastlane + GitLab + 蒲公英)

使用 Fastlane 上传 App 到蒲公英

-------------本文结束感谢您的阅读-------------