Fork me on GitHub

使用fastlane进行自动化构建

fastlane作为持续集成工具,一次配置,之后使用十分方便,极大的提高工作效率,把开发者从繁琐无聊的工作中解放出来,强烈推荐大家使用

更新ruby

首先,安装或更新rvm

有可能需要更新ruby源(国外镜像服务器访问起来有些吃力):

1
2
3
4
$ gem sources
*** CURRENT SOURCES ***

https://gems.ruby-china.org/

这里我们使用rvm工具管理ruby版本,其实Homebrew也可以安装ruby(brew install ruby),如果你还没有安装Homebrew,那么具体的安装方法请自行百度(捂脸)。

1
2
3
4
5
6
7
8
#安装RVM工具
curl -L get.rvm.io | bash -s stable

#列出可安装的ruby版本(有原始的ruby也有其他版本的版本)
rvm list known

#根据刚才列出的ruby版本,安装一个ruby版本
rvm install ruby-xxxxx(xxx为版本号)

安装fastlane

1
2
# 安装fastlane,加不加sudo取决于终端是否有权限执行该命令
[sudo] gem install -n /usr/local/bin fastlane

安装完毕后到工程目录

1
cd ~/projectpath

执行fastlane初始化

1
fastlane init

配置fastlane(重要)

其实在Xcode自动管理证书之后,fastlane的配置已经极大的简化,当Xcode中勾选了自动管理证书,那么Fastfile中就可以直接调用gym进行打包,而不需要再调用sigh设置证书信息。

如果你的项目配置比较简单,那么只需要在Appfile中设置好基本信息:

1
2
3
app_identifier("com.xxxx.xxxxx")
apple_id("xxxxxxxxx@xxx.com")
team_id("xxxxxxxx")

然后在Fastfile中写上几行代码:

1
2
3
4
5
6
7
lane :to_pgy do
build_app(
export_method: "ad-hoc",
output_directory: "./ipa",
)
firim(firim_api_token: "xxxxxxxxx")
end

就能自动打一个ac-hoc签名的包并自动上传到firim,就是这么简单和任性。不过一般的工程配置都不会这么简单,比如需要先执行pod或者carthage的相关命令,有些项目需要关闭bitcode等等,不尽相同。

执行中报错

处理完配置文件,眼看就要大功告成,潇洒的在终端敲下 fastlane to_firim,按下回车键, 然后去泡杯咖啡,准备回来享受成功的喜悦。

没想到回来时却看到命令行鲜红的字体提示error

1
2
xxx, Bundle only contains bitcode-marker, xxx
Exit status: 70

内心瞬间崩溃,说好的一键打包呢?回过神来一看,这不是bitcode的错误吗,赶紧去工程配置看一下,bitcode已经是NO了啊,回想哪里不对,Xcode更新之后,我们应用不但需要在编译之前将build setting中bitcode选项设置为NO,还要在导出的时候把rebuild from bitcode选项取消勾选。那么这个操作如何反应到fastlane呢?为了解决这个问题,可是费了一番功夫,最后查到解决方案:

1
2
3
4
5
6
7
1、Enable Bitcode -> No

2、Project -> Targets -> Build Settings -> Custom Compiler Flags -> Other C Flags -> "-fembed-bitcode"

如果静态库的工程有 -Werror的选项,需要去掉。应为在编译的时候有一个警告。 clang: warning: argument unused during compilation: '-fembed-bitcode-marker', 如果不去掉就会报错

通过gym打包的时候,也要把export_options中compileBitcode置为false
1
Could not find action, lane or variable 'firim'

遇到这个错误不难解决,首先查看是否已经安装了firim的插件

1
2
3
fastlane add_plugin firim
# 如果你使用的是蒲公英,那么需要安装蒲公英的插件,官方说明:https://www.pgyer.com/doc/view/fastlane
fastlane add_plugin pgyer

然后查看项目里Gemfile是否引用了firim:

1
gem "firim"

坑点就说道这里,之后如果再遇到,再来补充。

后记

由于技术服务于业务,本文介绍的使用方式可能不能完全覆盖大家的需求,如果大家在使用过程中遇到问题,可以多留意报错信息,或者查阅文档、向社区求助。希望能够帮到大家 (^__^)

fastlane配置十分丰富,也给大家使用时带来一些幸福的烦恼,所以使用时还是要多看看文档,才能少走弯路,尽快配置成功。

本文只是简单介绍了fastlane的用处、用法,以及一些采坑经历。具体使用可以到下面传送门👇,能找到一些实例代码。

参考文档

iOS App自动化打包发布(Jenkins + Fastlane)
小团队的自动化发布-Fastlane带来的全自动化部署
Fastlane 官方文档

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