fastlane是一個自動化構建工具,主要包含測試、打包、發佈等功能,它內部是由ruby實現的,是一款自動化很是高的腳本工具。android
使用fastlane並不複雜,多數狀況下,只須要一個命令和一個Fastfile配置文件,就能使用fastlane去實現一些功能,好比簽名、測試、打包等 下面是一個Fastfile文件中的代碼,它的做用是打包程序。ios
default_platform :ios
lane :build do
gym(export_method: 'enterprise')
end
複製代碼
有了這個Fastfile文件以後,只須要在終端中執行cd project_path
進入到項目主目錄,而後執行fastlane build
,fastlane就會開始自動打包。固然,想要執行成功,那還須要提早把全部證書都配置正確了。xcode
在使用fastlane時,通常分爲兩步:ruby
下面以這兩步分別來說解如何使用fastlane:bash
在使用fastlane時,通常是經過Fastfile這樣的配置文件來跟它交互的,因此第一步初始化的目的是建立Fastlane文件(若是有須要,也能夠建立其餘類型的配置文件,如Appfile、Matchfile、Gymfile等),具體而言,就是找到項目主目錄,也就是xcodeproj或xcworkspace所在的目錄下,建立一個名叫fastlane或.fastlane的文件夾,在這個文件夾下,建立配置文件Fastfile。目錄結構以下:併發
-test.xcodeproj
-fastlane
-Fastfile
-Appfile
複製代碼
除了手動建立,fastlane也提供一個命令來簡化這個過程app
fastlane init
複製代碼
配置Fastfile主要是在其內部建立各類lane,這些lane的做用就是幫助你達到某一種目的,好比你可能有一個叫作appstore的lane,用來發布app到appstore的lane;或者一個叫作adhoc的類,用來發布測試版本,等等,下面的例子中定義一個名叫build的lane,咱們對它的指望打包app。工具
default_platform :ios
lane :build do
end
複製代碼
若是如今執行fastlane build
,app並不會被打包,由於lane自己並無任何具體的功能,它的做用是綁定各類具備特定功能的action,讓這些action順序執行。 那麼,爲了達到打包app的做用,須要在這個lane內部添加一個具備打包功能的action,好比gym,代碼以下:測試
default_platform :ios
lane :build do
gym(export_method: 'enterprise')
end
複製代碼
到目前爲止,一個簡單的Fastfile文件就配置完了,而後你能夠先測試一下,首先須要把證書設置好,而後在終端執行cd project_path
進入項目主目錄,執行fastlane build
,若是一切順利,打包完成後你會在項目主目錄獲得一個ipa文件。網站
switch lane 指的是在一個lane中調用另外一個lane
default_platform :ios
lane :lane1 do
puts "lane1"
lane2
end
lane :lane2 do
puts "lane2"
end
複製代碼
例子中,lane1方法中調用了lane2,執行fastlane lane1
,部分輸出以下
[✔] 🚀
[16:09:47]: Driving the lane 'lane1' 🚀
[16:09:47]: --------------------------------------
[16:09:47]: --- Step: Switch to lane2 lane ---
[16:09:47]: --------------------------------------
[16:09:47]: Cruising over to lane 'lane2' 🚖
[16:09:47]: Cruising back to lane 'lane1' 🚘
[16:09:47]:
lane1
lane2
複製代碼
能夠看出,執行是成功的,這說明fastlane支持lane之間相互調用。 不過,在fastlane中,並非全部lane都能相互調用,須要知足下面兩個條件之一:
那麼,platform又是什麼?
首先,瞭解一下platform如何使用,Fastfile的內容以下:
platform :ios do
lane :lane1 do
puts "lane1"
end
lane :lane2 do
puts "lane2"
end
end
複製代碼
在這個例子中,設置了兩個lane,名稱分別是lane1和lane2,這兩個lane被一個叫作ios的platform包圍。
platform的做用和lane的做用相似,lane的做用是綁定多個action,而platform則是綁定多個lane。 因爲fastlane目前能夠在iOS、android和Mac這三個平臺使用,因此可能在同一個Fastfile中存在不一樣平臺的lane,使用platform可使得lane的使用範圍更加明確。還有一個須要注意的是,正如上一節所說的,屬於不一樣platform的lane,不能相互調用
若是須要在Android端使用fastlane,則能夠額外添加一個叫作:android的platform。另外,也能夠在platform以外添加lane,這種lane叫作通用lane,能夠被全部的lane調用。
代碼以下:
lane :lane0 do
puts "\nlane0"
end
platform :ios do
lane :lane1 do
puts "\nlane1"
end
lane :lane2 do
puts "\nlane2"
end
end
platform :android do
lane :lane3 do
puts "\nlane3"
end
lane :lane4 do
puts "\nlane4"
end
end
複製代碼
這個時候,若是在終端執行fastlane lane1
,fastlane會告訴你它找不到lane1
[!] Could not find 'lane1'. Available lanes: lane0, ios lane1, ios lane2, android lane3, android lane4
複製代碼
可是,fastlane在錯誤信息裏面指出可用的lanes有這些:lane0, ios lane1, ios lane2, android lane3, android lane4,那麼不妨嘗試一下,執行fastlane ios lane1
[✔] 🚀
[16:21:29]: Driving the lane 'ios lane1' 🚀
[16:21:29]:
lane1
[16:21:29]: fastlane.tools finished successfully 🎉
複製代碼
成功了
通過屢次試驗,能夠發現當lane被定義在platform以內時,須要使用相似fastlane platform_name lane_name
的命令結構來調用,好比調用lane1,則須要執行fastlane ios lane1
;調用lane3,則須要執行fastlane android lane3
;對於定義在platform以外的lane0,能夠直接執行fastlane lane0
。
在實際使用中,不多有人會去執行帶platform的命令,通常是執行命令fastlane lane_name
,這是由於fastlane還提供了另外一個方法:default_platform
。
default_platform :ios
lane :lane0 do
puts "\nlane0"
end
platform :ios do
lane :lane1 do
puts "\nlane1"
end
lane :lane2 do
puts "\nlane2"
end
end
platform :android do
lane :lane3 do
puts "\nlane3"
end
lane :lane4 do
puts "\nlane4"
end
end
複製代碼
如今,在這個例子中,執行fastlane lane1
也能夠成功調用lane1。這是由於上面的例子中在設置了默認platform
default_platform :ios
複製代碼
action能夠看做是fastlane中的功能模塊,每個action都有其特定的功能,它規定了功能的具體實現。好比以前例子中的gym
就是action,它是被用來打包工程的。
在fastlane中,內置了一系列的action,官方文檔中將這些內置的action分爲了如下幾大類:
這裏以cert
這個action做爲例子,來簡單瞭解action通常如何使用。 Fastfile中的代碼以下
default_platform :ios
platform :ios do
lane :get_cert do
cert(username: your_apple_id_username, development:false)
end
end
複製代碼
如上述代碼所示,只要使用相似action_name(options)
的格式就能執行指定的action,其中options是一個Hash類型的值,因此也能寫成相似action_name(key1:value1,key2:value2)
的格式。
使用fastlane get_cert
執行上述代碼,fastlane會使用your_apple_id_username登陸到蘋果開發者網站查詢證書信息,若是本地鑰匙鏈中沒有安裝此帳號對應證書,則fastlane會嘗試建立一個新的證書,若是建立成功,fastlane會下載此證書並安裝到鑰匙鏈中,同時你也會獲得對應的CSR文件、證書文件和其私鑰。 除此之外,cert
這個action中有不少option可被設置,具體可執行fastlane action cert
進行查詢。
除了使用fastlane內置的action之外,還能夠建立一些自定義action,並加載到fastlane中做爲外部action。 當須要爲fastlane添加一些外部action時,只須要將這些自定義的action文件放在fastlane/actions/
路徑下便可,fastlane會自動加載。 具體目錄結構以下:
-test.xcodeproj
-fastlane
-Fastfile
-Appfile
-actions
-your_action1.rb
-your_action2.rb
複製代碼
在Fastfile配置文件中,內置的action和外部action的用法一致。
plugin是什麼? plugin實質上就是由一些action組成的,並且在加載到fastlane以後,這些action和其餘action沒有什麼區別,使用方法徹底一致。
plugin和外部action的區別? 若是你寫了一些自定義的action,想分享給其餘人使用,因而你提了一個PR給fastlane,可是fastlane因爲一些緣由沒有接受。這個時候你還有一條路可走,那就是建立一個包含這些action的plugin,併發布到RubyGems上。
這裏以加載fastlane-plugin-versioning爲例,在fastlane/或fastlane/../路徑下執行fastlane add_plugin versioning
便可,接下來你就能在Fastfile中使用這個plugin中包含的action了。
fastlane add_plugin plugin_name
的執行結果是在fastlane/路徑下建立文件Pluginfile,並修改Gemfile的內容,如下是執行命令以後Pluginfile和Gemfile中的內容。
Pluginfile中內容以下:
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
gem 'fastlane-plugin-versioning'
複製代碼
Gemfile中內容以下
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
source "https://rubygems.org"
gem 'fastlane'
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)
複製代碼