iOS如何實現自動化打包

年糕媽媽技術團隊發表於2019-03-02

前言

在我們的日常開發工作中,避免不了會出現這樣的場景:需求迭代開發完成之後,需要提供ipa包給QA同學進行測試,一般會執行如下流程:1.執行Git Pull命令,拉最新的程式碼到本地 2.Pod Install安裝最新的依賴庫 3.在Xcode點選Archive編譯並打包 4.選擇輸出一個iOS AdHoc模式的ipa檔案 5.將ipa上傳到Fir平臺,生成二維碼供測試同學安裝。

即便整個過程很順利,也需要消耗開發同學十到二十分鐘的時間,但如果測試過程中發現有問題,那麼需要修復完畢後重覆上面的這幾個步驟。對於開發同學來說,這種重複且沒有技術含量的機械工作簡直是噩夢啊!

正文

那麼什麼樣的工具可以幫助開發同學解決這個問題呢?下面就介紹一下,目前市面上比較流行的自動化流程工具——Fastlane。Fastlane是用Ruby語言編寫的一套自動化工具集和框架,每一個工具實際都對應一個Ruby指令碼,用來執行某一個特定的任務,而Fastlane核心框架則允許使用者通過類似配置檔案的形式,將不同的工具有機而靈活的結合在一起,從而形成一個個完整的自動化流程。到目前為止,Fastlane的工具集基本上涵蓋了打包,簽名,測試,部署,釋出,庫管理等等移動開發中涉及到的內容。同時該套件也支援與 Jenkins 、CocoaPods、xctools 等其他第三方工具的整合。

初步瞭解之後,讓我們來看一下在如何專案裡面應用fastlane。

第一步、安裝及初始化:

1.安裝 Xcode command line tools:

xcode-select —install

2.安裝fastlane

sudo gem install fastlane -NV

3.進入專案路徑下,初始化fastlane(這部分可根據實際專案需要配置)

fastlane init

3.1.選擇想使用fastlane做什麼?

iOS如何實現自動化打包

3.2.要求你輸入Apple開發證書的App ID

iOS如何實現自動化打包

3.3.是否管理APP的metadata

iOS如何實現自動化打包

3.4.一路enter,直到初始化成功

iOS如何實現自動化打包

3.5.初始化完成後的檔案目錄結構

iOS如何實現自動化打包


第二步、知識準備:

1.檔案介紹

Appfile

儲存App資訊,比如Apple ID,App Identifier,Team ID等資訊。

Fastfile

自動化指令碼配置檔案,所有的任務都是在這個檔案來排程的。

.env

全域性的環境配置檔案,檔案裡面我們可以配置一些全域性的資訊,其他檔案可以通過類似ENV['Apple_Id']這種方式獲取。

Deliverfile

上傳AppStore包需要的配置檔案,在這個檔案裡面可以設定App Store Connect的所有配置項。

metadata

存放APP後設資料檔案,包括關鍵詞、版本更新日誌、圖示等。

screenshots

存放應用截圖

2.常用的工具集(action)介紹

  • scan(run_tests):自動執行測試工具。
  • cert(get_certificates):自動建立iOS程式碼簽名證書(.cert檔案),如果存在則下載已存在的證書檔案。
  • sigh(get_provisioning_profile): 下載provisioning profiles。
  • gym(build_ios_app): 編譯、打包,生成簽名的ipa檔案 。
  • deliver(upload_to_app_store): 上傳App到App Store Connect。
  • snapshot(capture_ios_screenshots): 截圖。
  • 。。。

更多的action介紹可以參考fastlane文件中的介紹:docs.fastlane.tools/actions/

3.lane介紹

當我們對Fastfile檔案進行編寫時,實際上就上通過在自定義的lane中新增合適的工具集action讓fastlane按照我們的意願去順序執行任務,當然fastlane預設就有一些系統級lane。

系統級lane:

  • before_all,就是在執行一次指令碼之前首先執行的程式碼,我們可以在這裡面執行一些公共的東西,比如git_pull,cocoapods。
  • after_all, 成功結束之後,處理共有的後置邏輯。
  • before_each,每次執行 lane 之前都會執行一次。
  • after_each,每次執行 lane 之後都會執行一次。
  • error,在執行上述情況任意環境報錯都會中止並執行一次。

    第三步、程式碼示例:

    有了上面的知識準備,我們就以上傳ipa包到Fir為例,來看看fastlane自動化打包具體的程式碼是怎麼實現的。

    首先看一下.env檔案:

    iOS如何實現自動化打包

    然後是Appfile:

    iOS如何實現自動化打包

    最後就是我們的FastFile:

    iOS如何實現自動化打包

    iOS如何實現自動化打包

    iOS如何實現自動化打包

    iOS如何實現自動化打包

    當我們完成上面的操作以後,我們就可以在終端工具內通過fastlane upload_fir build:PublicDebug log:update_info一行程式碼來實現打包並上傳ipa包到Fir平臺了,是不是很酷!

    當然你也可以在我們的專案目錄中找到我們的ipa包、dsym檔案、fastlane的打包日誌檔案等等。

    iOS如何實現自動化打包

    iOS如何實現自動化打包

    結語

    通過使用Fastlane實現自動化打包以後,開發同學終於可以跟繁瑣的機械工作說拜拜了~

    除了本文介紹的功能,fastlane還有更多的妙用等著大家去挖掘,比如自定義action,Plugin,又比如持續整合,等等。在此本文也僅是起一個拋磚引玉的作用,希望大家能共同探討fastlane的更深層的用途。

    最後宣告,本文主要是為了用於階段性學習記錄,不會用於商業用途,如不慎存在侵權行為,請隨時聯絡maojiadong921@gmail.com。

    參考資料:

    fastlane GitHub地址:github.com/fastlane/fa…

    fastlane 文件說明地址:docs.fastlane.tools/



    相關文章