notes

最近在研究app自动打包的工具,听到好几个大神提到fastlane,就去了解了一番。

Fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本。除了自动化打包ipa流程,还能自动化提交ipa到appstore,自动生成证书,截图并提交图片到appstore。

##安装Fastlane 需要安装Xcode 命令行工具,在终端中输入

xcode-select --install

之后,通过gem安装fastlane

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

几分钟后,安装成功。 通过fastlane --version查看版本

##项目初始化 在终端中cd到你的项目根路径,执行

fastlane init

执行这句命令会要求用户输入对应项目的开发者账号密码,并且和itunes connect里和项目相同的bundle id绑定起来,执行成功后会发现多了一个fastlane文件夹

##gym\nfastlane初始化成功后,就可以进行自动打包了,命令是(项目根目录)

fastlane gym

gym是fastlane内置的一个命令,专门用来自动打包并生成签名的ipa文件和提交ipa到appstore的,这个命令会有很多参数,比如--output_directory表示输出ipa到哪个目录下,--clean表示项目build之前先clean一下,--scheme指定项目的scheme等的,可以加--help查看全部的参数。

如果你每次导出ipa的参数都是固定的,则可以把参数写到文件里,就不用每次都在命令后面写参数了。

执行命令

fastlane gym init

会看到在fastlane 文件夹内部多了一个Gymfile文件,就在这个文件里写参数。

内容如下:

# project的scheme
scheme "FastTransfer"
# 是否在build前先clean
clean true
# 输出路径\noutput_directory "/Users/huangqiangqiang/Desktop"
# 输出文件名\noutput_name "FastTransfer"

具体有哪些key,哪些value。你可以在fastlane action gym命令下查看。

##Fastfile配置文件 好,我们接下来看看Fastfile文件的内容

fastlane_version "2.47.0"

# 如果命令中不指定platform,默认ios
default_platform :ios

platform :ios do
# before_all会在命令执行前调用
before_all do
cocoapods
end

desc "Runs all the tests"
lane :test do
scan
end

desc "Submit a new Beta Build to Apple TestFlight"
desc "This will also make sure the profile is up to date"
lane :beta do
gym(scheme: "FastTransfer") # Build your app - more options available
pilot
# sh "your_script.sh"
# You can also use other beta testing services here (run `fastlane actions`)
end

desc "Deploy a new version to the App Store"
lane :release do
# match(type: "appstore")
# snapshot
gym(scheme: "FastTransfer")
deliver(force: true)
# frameit
end

# 这里自定义了一个名为build任务
lane :build do |op|
gym(
scheme: "FastTransfer",
export_method:'development'
)
end

# after_all会在命令成功的执行结束后调用
after_all do |lane|
end

# 命令在执行过程中出错调用
error do |lane, exception|
end
end

这个是ruby的语法。我们发现,每个lane对应一个任务,我们在上面自己写了一个build任务,任务里面只是简单的执行了一下gym命令。

接下来我们就可以在项目根目录下执行

fastlane build

这个时候如果有Gymfile配置文件,就会根据配置文件来指定输出的ipa文件。实际项目中,你就可以发这个ipa给测试了。

fastlane有很多的内置命令,除了我们之前提到的gym,还有deliverscan snapshot pilot frameit 等等,这些命令用来处理不同的事情,比如pilot会把打包好的ipa文件上传到TestFlight。deliver会将应用及其它信息上传到 App Store。

如果有用到TestFlight 的话,可以在build任务的gym命令后面再加上pilot命令,这个命令是专门用来提交ipa到TestFlight 的。由于我公司的测试没有用到TestFlight,所以我们直接发ipa过去就行了。

到目前为止,自动化打包的目标算是完成了,但是fastlane包含的其他功能,还会慢慢去探索。

##fir

如果有fir测试平台的话,直接执行一句命令就提交了

fir publish -c "commit log" ${schema}*.ipa