最近在研究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,还有deliver
、scan
、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