fastlane是一个经过简单命令来完成诸如截图、获取证书、编译、导出安装包、提交iTunesConnect等一系列操做的工具,它同时支持iOS和Android。 你可以经过简单的方式配置流程进行的顺序,并经过很是简单的命令执行其中的一个流程。固然它的简单并不表明功能也简陋,有开源社区的支持,更新迅速且有不少功能可以知足你的需求。 ios
以前咱们使用的是jenkins内的Xcode integration进行编译工做,可是其更新比较慢(至2017.12.20还未支持Xcode9),Xcode大版本更新后出现没法继续使用的问题。 后改用fastlane,发现其使用和配置还算简单,有开源社区支持,更新迅速功能强大。且相比jenkins里的插件,fastlane能够单独使用,也能够被多种CI接入。git
fastlane使用的是ruby环境且对ruby有版本要求(官网要求是ruby2.0以上),因此若是须要的话更新一波ruby,而后经过gem安装fastlane。github
更新ruby使用的是RVM工具,在命令行进行以下操做,安装时可能出现进度不动,多半多是由于被墙了。shell
#安装RVM工具 RVMcurl -L get.rvm.io | bash -s stable #列出可安装的ruby版本(有原始的ruby也有其余版本的版本) rvm list known #根据刚才列出的ruby版本,安装一个ruby版本 rvm install ruby-xxxxx(xxx为版本号) 复制代码
列出来ruby的版本,选择#MRI Rubies这一大类下面的,我装的是2.4的版本 api
由于我以前已经安装过了,因此提示是已经安装成功 ruby
若是ruby版本知足要求,能够直接在命令行执行如下命令安装fastlane,这个安装比较顺利没出现报错,若是有报错能够根据缘由搜索一下解决办法。bash
#安装fastlane sudo gem install -n /usr/local/bin fastlane 复制代码
使用的环境搭建好了,就能够进行这一步来配置fastlane了。markdown
执行默认的初始化app
cd 项目目录 fastlane init 复制代码
根据提示输入信息,这一步我没有按照提示处理,由于在有多个BundleID多个target的工程上使用,实际上生成的配置仍是要修改的。curl
若是你的项目只有一个bundle id也只有一个开发者帐号的话,能够直接遵循官方的步骤配置。
初始化完成后能够看到项目目录里多出了一个fastlane文件夹,内有两个比较重要的文件Appfile和Fastfile
经过在命令行执行fastlane [lane-name]
以执行fastlane/Fastfile
中的一个lane
。 这个操做会依次从.env文件、Appfile文件、Deliverfile文件读取配置信息,最后由Fastfile中的逻辑来进行工做。
fastlane能够经过配置 .env文件、Appfile、Deliverfile、Fastfile 来完成各类工做。
其中Fastfile是最核心的用来控制流程走向的配置文件,.env和Appfile能够辅助Fastfile来设置一些参数,Deliverfile可用于配置提交iTunesConnect的一些参数。
须要查看,样例配置可直接前往下载样例配置
Appfile是用来配置一些相似于AppleID、BundleID参数(参数是fastlane已经定义好的,新增的并无用,若是想新增变量须要使用.env方式),能够在Fastfile中使用,AppleID、BundleID等其实会被一些actions直接调用,并不须要写出来传递。
直接在Appfile里填写app_identifier、apple_id、team_id等,而后根据lane的不一样能够设置成不一样。
# 默认配置 app_identifier "com.devhy.test" apple_id "devhy1@xxxx.com" team_id "xxxxxxxxx1" # 若是lane是ent换成Dev的配置 for_lane :ent do app_identifier "com.devhy.testDev" apple_id "devhy2@xxxx.com" team_id "xxxxxxxxx2" end 复制代码
.env这个文件的做用是做为环境变量的配置文件,在fastlane init进行初始化后并不会自动生成,若是须要能够本身建立。
执行时默认会读取.env
和.env.default
文件里的配置。经过执行fastlane [lane-name] --env [envName]
来指定使用配置文件.env.[envName]
,读取顺序是.env -> .env.default -> .env.<envName>
,相同的变量名会被后面的覆盖。
如我建了文件.env.myDev,里面写了一些参数,那在执行的时候使用fastlane [lane-name] --env myDev
便可,想在Appfile、Deliverfile、Fastfile等调用,直接使用ENV['keyName']
便可
# .env.myDev文件 # bundle id App_Identifier = "com.devhy.testDev" # 开发者帐号 Apple_Id = "xx2@xxxx.com" # 开发者TeamId Team_Id = "xxxxxxxxx2" # project的target scheme名称 Scheme = "HYTestDev" 复制代码
# Appfile使用.env方式直接读取变量便可 app_identifier ENV['App_Identifier'] apple_id ENV['Apple_Id'] team_id ENV['Team_Id'] 复制代码
注意:由于是.env文件是.开头文件,默认是在finder中隐藏的,须要经过执行一下命令来显示
# 设置隐藏文件可见 defaults write com.apple.finder AppleShowAllFiles TRUE # 重启finder服务以生效 killall Finder 复制代码
普通配置方式:简单易懂,但不能自定义变量,且每一个lane想不同都要写一个for_lane .env配置方式:功能性强,但配置起来稍微麻烦一点
Deliverfile是用来配置上传到iTunesConnect所需信息的,因为咱们主要用fastlane来打包,发布是手动将ipa包提交审核,因为没有进行过尝试因此该文件配置方式就不叙述了。
Fastfile是对流程进行控制的核心文件,须要设定支持的平台和在一些环节里须要作的事情。
Fastfile主要是根据设定的平台,能够在before_all、after_all、error中作一些操做 以及 创建一些lane做为关键的执行逻辑,能够在其中使用fastlane内置的action,也能够调用自建action,还能够调用别的lane
# 由于fastlane存在新老版本兼容问题,因此通常会指定fastlane版本 fastlane_version "2.62.0" default_platform :ios platform :ios do # 全部lane执行以前,能够作如执行cocoapods的pod install before_all do cocoapods end # 名字叫ent的lane,命令行里执行fastlane ent lane :ent do # 执行一些action,如cert下载证书,sigh下载pp文件,gym进行编译和导出包 end # 执行fastlane store便可 lane :store do # 调用一些action # 调用别的lane,好比send_msg send_msg end lane :send_msg do # 调用一些action end # 全部lane完成以后,能够适用参数lane来区分 after_all do |lane| end # 全部lane失败以后,能够适用参数lane来区分 error do |lane, exception| end end 复制代码
下面的Fastfile样例是配置了.env+Appfile
后进行编写,由于这样在配置action时,能够省去一些入参。 由于使用了Appfile,cert
的username、team_id 以及 sigh
的app_identifier、username、team_id 能够不用传入了,fastlane在执行时会本身去从Appfile里取。以及以前在.env环境配置中设定了一个Scheme的字段,那么gym的scheme咱们可使用ENV['Scheme']来调用。
fastlane_version "2.62.0" default_platform :ios platform :ios do before_all do cocoapods end lane :store do # action(cert),下载[开发者证书.cer] # 下载的文件会存在项目根目录的build文件夹下 # fastlane会让你在命令行登陆开发者帐号,登陆成功后,会在你的[钥匙串]中建立一个 {deliver.[username]} 的登陆帐户 cert( # Appfile设置了这边就能够不用了 # username: "devhy2@xxxx.com", # team_id: "xxxxxxxxx2", # 下载.cer文件的位置 output_path: "build", ) # action(sigh),下载[安装app匹配的Provision Profile文件(pp文件)] # 建议本身去苹果开发者网站证书中手动处理一波provision_profile # 建议用 bundleId_导出方式 来命名好比: # 企业包pp文件叫 testDev_InHouse.mobileprovision sigh( # Appfile设置了这边就能够不用了 # app_identifier: "com.devhy.testDev", # username: "devhy2@xxxx.com", # team_id: "xxxxxxxxx2", # 下载pp文件的位置 output_path: "build", # 自动下载签名时,adc里pp名字,不写也能够会根据你的bundle id、adhoc与否去下载最新的一个 # provisioning_name: "testDev_InHouse", # 仅下载不建立,默认是false readonly: true, # 由于是根据BundleID下载,致使adhoc和appstore会优先appstore,致使最后导出报错,若是是adhoc包请设置为true adhoc: true, ) # 编译配置,编译的scheme,导出包方式 gym( # 使用.env配置的环境变量 scheme: ENV['Scheme'], # app-store, ad-hoc, package, enterprise, development, developer-id export_method: "enterprise", # 输出日志的目录 buildlog_path: "fastlanelog", # 输出编译结果 output_directory: "build", include_bitcode: false ) end after_all do |lane| end error do |lane, exception| end end 复制代码
在fastlane中使用的诸如cer()、sigh()、gym()都是action,其本质是预先写好的ruby脚本(如:sigh.rb),fastlane中有不少已经写好的actions,固然也能够本身进行编写。
命令行经常使用的操做有:
fastlane actions
fastlane action [action_name]
如(fastlane action gym
)编写完各类配置后怎么使用?其实使用方法仍是比较简单的, 不使用.env配置,执行fastlane [lane_name]
便可 使用某个.env配置,执行fastlane [lane_name] --env [env_name]
便可
好比我在须要执行样例的Fastfile的store,并使用.env.myDev配置,那我能够执行fastlane store --env myDev
在执行shell脚本之类的都是能够传递一些参数的,fastlane也是有的,options
就是存储了咱们在命令行中执行lane时传递的参数的字典,在befor_all
、after_all
、各类lane
里均可以使用这个options
# 使用key:value来传递一组对应的参数 fastlane ent key:value key2:value2 复制代码
platform :ios do before_all do |lane, options| #options参数 value = options[:key] value2 = options[:key2] end lane :ent do ... end end 复制代码
私有lane其实就像开发的时候的私有方法同样,外部是使用不到的,如在命令行中使用fastlane deal_param
是执行不了的,但在Fastfile内部能够调用到。
platform :ios do # 至关于全局变量 build_config = "debug" before_all do |lane, options| # 调用私有lane deal_param 并将options传递过去 deal_param options end lane :ent do # ... end # 私有lane,好比把传入的build参数进行一下处理 private_lane :deal_param do |options| build_config = build_config ? build_config : "debug" build_config.capitalize! end end 复制代码
执行fastlane new_action
,命令行提示输入自建的action名称,输入后fastlane会帮助生成一个action编写的模版ruby文件,在模版中编写本身的Action逻辑,具体由于暂时没有写过,请查看官方的文档。
由于fastlane能够在命令行中使用,因此只要在jenkins中,构建的一些环节中使用Excute Sell
方式,而后输入fastlane相关的命令便可了。
AppFile + Fastfile .Env + AppFile + Fastfile + Options传递参数