传送门:
fastlane 自动化01----初识
fastlane 自动化02----证书签名
fastlane 自动化03----构建、编译
fastlane 自动化04----分发、上传(未完待续。。。)
应用场景:顾名思义,自动化主要应用于证书管理、自动化编译、分发三方渠道、上传testFlight、上传app store:
如果你有需要导出各个环境的p12证书给组员,更新证书如添加内购添加推送后有重新导出证书给组员,证书管理混乱,费时费力。
那有的人说了可以用xcode自动管理,但是公司的账号密码也不是所有的人都有权限获取的,那怎么办呢?用fastlane!
如果你为每次都手动用xcode打包,然后无法慢慢一步一步等待构建,上传到各个平台,即使出错也无法记录信息,那怎么办呢?用fastlane !
初始化fastlane
首先需要更新ruby的版本号至2.4.0以上。
$ xcode-select --install //安装xcode
$ sudo gem install fastlane -NV //安装fastlane
#如果报错:ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/commander
#使用: sudo gem install -n /usr/local/bin fastlane -NV
#//若gem版本过低可以升级下,更换gem源。
#$ gem sources --add https://gems.ruby-china.com
#//然后 `gem sources`看一下当前gem的源有哪些,然后移除无用源如
#$ gem source --remove XXXX
#//更新gem
#$ sudo gem update --system
#//初始化fastlane,cd 到工程目录那个文件夹
$ fastlane init
fastlane init之后,出现如图4个选项,我选择第四个。
一顿操作之后,发现当前项目中多出一个fastlane
文件夹,里面有Appfile
、Fastfile
两个文件, Appfile
用于配置工程环境变量 ,Fastfile
就是fastlane的精髓了,Fastfile
里有多个lane
,每个lane
其实就是一个流水线,比如说传到app store这条流水线,每条流水线需要编译,构建,上传等一系列操作,每个操作叫做action
,所以说Fastfile
文件的最主要的部分构造如下:
lane :buildAction do
build_app(scheme: "MyApp",
workspace: "Example.xcworkspace",
include_bitcode: true)
end
上面代码中,buildAction
就是lane的名称 , build_app
就是一个action.执行$ fastlane buildAction
就可以让这条流水线运行起来.
流水线的名字是我们自己命名的,action呢?fastlane中有内建action,也支持自定义,同时可以安装插件来使用action。action传送门
fastlane的生命周期:
1 before_all
执行之前执行一次
2 before_each
每次执行 lane 之前都会执行一次
3 lane
任务
4 after_each
每次执行lane之后都会执行一次
5 after_all
执行之后执行一次
6 error
执行出错调用
Fastfile文件:
default_platform(:ios)
platform :ios do
before_all do |lane,options|
puts "before_all" + "参数是:"+ options[:configuration]
end
before_each do
puts :before_each
end
after_all do
puts :after_all
end
after_each do
puts :after_each
end
lane :public_task do |options|
puts "执行public_task"
common_task(configuration:options[:configuration])
end
private_lane :common_task do |options|
puts "执行common_task,参数是:"+ options[:configuration]
end
end
# terminal中执行
$ fastlane public_task configuration:"Debug"
# 输出:
[09:56:56]: ------------------------------
[09:56:56]: --- Step: default_platform ---
[09:56:56]: ------------------------------
[09:56:56]: Driving the lane 'ios public_task'
[09:56:56]: before_all参数是:Debug
[09:56:56]: before_each
[09:56:56]: 执行public_task
[09:56:56]: before_each
[09:56:56]: --------------------------------------------
[09:56:56]: --- Step: Switch to ios common_task lane ---
[09:56:56]: --------------------------------------------
[09:56:56]: Cruising over to lane 'ios common_task'
[09:56:56]: 执行common_task,参数是:Debug
[09:56:56]: after_each
[09:56:56]: Cruising back to lane 'ios public_task'
[09:56:56]: after_each
[09:56:56]: after_all
上面例子可验证fastlane的生命周期,例子中|options|
就是一个类似于字典的参数。要取出参数采用options[:configuration]
,其中configuration就是key,类似于dic["key"]
的方式,这里必须说明下,ruby里 :
+[var]
的形式如: :mytask
表示的是符号(symbol),一个标签,是个对象,类似于字符串,像lane的声明: lane :mylane do
其中的 :mylane
就是一个符号,以及hash 里的{ :key => "value"}
,:key
作用跟"key"
类似,他们之间也能互相转换:symbol.to_s
.
言归正传,lane
同时也是一个action
,可以在其他内部使用,上面的public_task
内就调用了 common_task
这个lane. 若lane 只想在Fastfile内部使用,不想外部调用声明的时候可以用 private_lane
代替 lane
,如上面的common_task
这个例子。