fastlane 自动化01----初识

fastlane
传送门:

fastlane 自动化01----初识
fastlane 自动化02----证书签名
fastlane 自动化03----构建、编译
fastlane 自动化04----分发、上传(未完待续。。。)

应用场景:顾名思义,自动化主要应用于证书管理、自动化编译、分发三方渠道、上传testFlight、上传app store:

如果你有需要导出各个环境的p12证书给组员,更新证书如添加内购添加推送后有重新导出证书给组员,证书管理混乱,费时费力。
那有的人说了可以用xcode自动管理,但是公司的账号密码也不是所有的人都有权限获取的,那怎么办呢?用fastlane!

如果你为每次都手动用xcode打包,然后无法慢慢一步一步等待构建,上传到各个平台,即使出错也无法记录信息,那怎么办呢?用fastlane !

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文件夹,里面有AppfileFastfile两个文件, 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这个例子。

你可能感兴趣的:(fastlane 自动化01----初识)