iOS持續集成(一)——fastlane 使用

開篇

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

Fastlane

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

安裝

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

sudo gem install fastlane -NV
複製代碼

接着在終端進入項目裏面(目前fastlane swift 正在測試,就以以前的版本講解)swift

fastlane  init
複製代碼

按照提示初始化完成以後,在項目下面生成 fastlane 文件夾api

基本介紹

先普及兩個重要的文件,初始化後在./fastlane文件件便可找到bash

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 Docapp

FastFile

一開始生成的Fastlane文件大概以下:ide

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項目裏面也有不少其餘公司的 例子,在不清楚怎麼使用的時候,看看這些例子也何嘗不是一種方法。

相關文章
相關標籤/搜索