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及以上版本。在终端输入以下命令确认:
ruby -v
我在使用的版本是2.4.1的
需要注意的是需要将gem的source改为https://gems.ruby-china.com。
域名更换.png如何检查?在终端输入以下命令:
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.pngAppfile
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.pngFastlane以lane为单位,去执行一个自动化任务,lane:custom_lane,代表了一个叫custom_lane的任务,后面的do,则表示需要执行的操作,Fastfile中的代码如下:
Fastfile.png上面其实就是定义两个任务,一个是打包测试版本,一个是打包正式版本</pre>
三、执行脚本
cd到项目目录,输入如下命令来执行我们自己定义的lane,格式如下fastlane+脚本第一行中的platform名+脚本第二行中的lane名:
fastlane ios beta
然后Fastlane开始执行任务了,编译项目的文件,这里执行的是gym方法:
开始打包.png最后会生成dSYM文件以及ipa:
生成dSYM文件.png接下来会继续上传ipa到蒲公英:
上传蒲公英.png自此打包完成并成功上传到蒲公英。fastlane的集成已经完成,后面开始部署Jenkins