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

NO IMAGE

開篇

回想一下我們發佈應用,要進行多少步操作。一旦其中一步失誤了,又得重新來。這完完全全不是我們工程師的風格。在軟件工程裡面,我們一直都推崇把重複、流程化的工作交給程序完成,像這種浪費人生的工作,實在是不應該浪費我們的人生。這次的文章主角就是為了解放我們而來—— 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 "[email protected]"  # 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項目裡面也有很多其他公司的 例子,在不清楚怎麼使用的時候,看看這些例子也未嘗不是一種方法。

相關文章

iOS性能優化之頁面加載速率

iOS持續集成(四)——Jenkins

iOS持續集成(三)——fastlane自定義插件

iOS持續集成(二)——證書管理神器match