Fastlane(一):用法

前言

fastlane是一個自動化構建工具,主要包含測試、打包、發佈等功能,它內部是由ruby實現的,是一款自動化很是高的腳本工具。android

1. 常規使用

使用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

  1. 初始化
  2. 配置Fastfile

下面以這兩步分別來說解如何使用fastlane:bash

1.1. 初始化

在使用fastlane時,通常是經過Fastfile這樣的配置文件來跟它交互的,因此第一步初始化的目的是建立Fastlane文件(若是有須要,也能夠建立其餘類型的配置文件,如Appfile、Matchfile、Gymfile等),具體而言,就是找到項目主目錄,也就是xcodeproj或xcworkspace所在的目錄下,建立一個名叫fastlane或.fastlane的文件夾,在這個文件夾下,建立配置文件Fastfile。目錄結構以下:併發

-test.xcodeproj
-fastlane
  -Fastfile
  -Appfile
複製代碼

除了手動建立,fastlane也提供一個命令來簡化這個過程app

fastlane init
複製代碼

1.2. 配置Fastfile

配置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文件。網站

2. switch lane

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都能相互調用,須要知足下面兩個條件之一:

  1. 兩個lane同屬於同一個platform
  2. 被調用的lane不屬於任何platform

那麼,platform又是什麼?

3. 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

4.default_platform

在實際使用中,不多有人會去執行帶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
複製代碼

5. action

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進行查詢。

6. 加載外部action

除了使用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的用法一致。

7. 加載plugin

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)

複製代碼
相關文章
相關標籤/搜索