iOS持續整合(一)——fastlane 使用

ChenJz發表於2018-08-23

開篇

回想一下我們釋出應用,要進行多少步操作。一旦其中一步失誤了,又得重新來。這完完全全不是我們工程師的風格。在軟體工程裡面,我們一直都推崇把重複、流程化的工作交給程式完成,像這種浪費人生的工作,實在是不應該浪費我們的人生。這次的文章主角就是為了解放我們而來—— fastlane。這個明星庫在 github 已經高達 1w 多的start量。

Fastlane

fastlane 是 iOS (還有 Android ) 佈署和釋出最好的一套工具。它處理了所有重複的工作,例如生成截圖,處理簽名和釋出應用。

安裝

fastlane實際是由Ruby寫的,使用Ruby的Gem安裝是我們的不二選擇

sudo gem install fastlane -NV
複製程式碼

接著在終端進入專案裡面(目前fastlane swift 正在測試,就以之前的版本講解)

fastlane  init
複製程式碼

按照提示初始化完成之後,在專案下面生成 fastlane 資料夾

基本介紹

先普及兩個重要的檔案,初始化後在./fastlane檔案件即可找到

Appfile

存放著 AppleID 或者 BundleID 等一些fastlane需要用到的資訊。基本上我們不需要改動這個檔案的內容。 它放到你專案下面的 ./fastlane資料夾下面,預設生成的檔案如下:

app_identifier "net.sunapps.1" # The bundle identifier of your app
apple_id "felix@krausefx.com"  # Your Apple email address

# 如果賬號裡面有多個team,可以指定所有的team
# team_name "Felix Krause"
# team_id "Q2CBPJ58CA"

# 指定 App Store Connect 使用的team
# itc_team_name "Company Name"
# itc_team_id "18742801"
複製程式碼

更多詳細的配置,可以參考一下文件 Appfile Doc

FastFile

一開始生成的Fastlane檔案大概如下:

platform :ios do
  before_all do
    
  end

  desc "Runs all the tests"
  lane :test do
    scan
  end

  # You can define as many lanes as you want

  after_all do |lane|

  end

  error do |lane, exception|
    # slack(
    #   message: "Error message"
    # )
  end
end
複製程式碼

Fastfile裡面包含的塊型別有四種:

  • before_all 用於執行任務之前的操作,比如使用cocopods更新pod庫
  • after_all 用於執行任務之後的操作,比如傳送郵件,通知之前的
  • error 用於發生錯誤的操作
  • lane 定義使用者的主要任務流程。例如打包ipa,執行測試等等

如下面,來講解一下lane的組成。

  desc "Push a new beta build to TestFlight"   //該任務的描述
  lane :beta do  //定義名字為 beta 的任務
    build_app(workspace: "expample.xcworkspace", scheme: "example") //構建App,又叫gym
    upload_to_testflight //上傳到testfilght,
  end

複製程式碼

該任務的作用就是構建應用並上傳到 TestFilght。下面有兩個 Action

  • build_app 生成 ipa 檔案
  • upload_to_testflight 把 ipa 檔案上傳到 TestFilght

在控制檯進入專案所在的資料夾下面,執行下面命令

fastlane beta
複製程式碼

即可執行任務,按照上面的任務,會生成 ipa 並上傳到 TestFilght。其實很簡單,定義好任務,控制檯執行任務即可。

實踐

那麼如何寫一個我們屬於自己的 lane 呢? 就以釋出 ipa 到 fir 為例

  desc "釋出到Fir"
  lane :pulish_to_fir do
    # 執行 pod install 
    cocoapods 
    # 構建和打包ipa
    gym(
      clean: true,
      output_directory: './firim',
      scheme: 'xxxx',
      configuration: 'Test',
      export_options: {
        method: 'development',
        provisioningProfiles: {
            "xxx.xxx.xxx": "match Development xxx.xxx.xxx"
        },
      }
    )
    # 上傳ipa到fir.im伺服器,在fir.im獲取firim_api_token
    firim(firim_api_token: "fir_token")
  end
複製程式碼

下面解釋一下上面的內容

cocoapods
複製程式碼

在專案裡執行 pod install,詳細例子可見 Doc

sh "./update_version.sh"
複製程式碼

這是由作者本地寫的更新版本號的指令碼

gym (又名build_app)
複製程式碼

gym 是fastlane的裡面一部分,它可以方便生成和簽名ipa,能為開發者省下不少功夫。

Doc

firim
複製程式碼

firim 是一個外掛,執行 fastlane add_plugin firim 即可把外掛裝好

總結

fastlane裡面內建很多常用的Action,具體的使用方法建議多看一下官方文件。

fastlane專案裡面也有很多其他公司的 例子,在不清楚怎麼使用的時候,看看這些例子也未嘗不是一種方法。

相關文章