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傳遞參數