歡迎光臨
每天分享高質量文章

iOS效率神器fastlane自動打包

作者:mirrorzyb

鏈接:https://www.jianshu.com/p/5d836e89d9d1


Fastlane是一套使用Ruby寫的自動化工具集,旨在簡化Android和iOS的部署過程,自動化你的工作流。它可以簡化一些乏味、單調、重覆的工作,像截圖、代碼簽名以及發佈App。

Github:https://github.com/fastlane/fastlane

官網:https://fastlane.tools/

文件:https://docs.fastlane.tools/

我認為我們在選擇一些三方開源庫或是工具的前提是:可以滿足我們當下的需求並且提供好的擴展性, 無疑對我而言Fastlane做到了。我當前專案的需求主要是下麵幾方面:

  • 一行命令實現打包工作,不需要時時等待操作下一步,節省打包的時間去做其他的事。

  • 避免頻繁修改配置導致可能出現的Release/Debug環境錯誤,如果沒有檢查機制,那將是災難,即使有檢查機制,我們也不得不重新打包,浪費了一次打包時間。畢竟人始終沒有程式可靠,可以告別便利貼了。

  • 通過配置自動上傳到蒲公英,fir.im內測平臺進行測試分發,也可以直接上傳到TestFlight,iTunes Connect。

  • 證書的同步更新,管理,在新電腦能夠迅速具備專案打包環境。

如果你也有上述需求,那我相信Fastlane是一個好的選擇。

那既然說Fastlane是一套工具的集合,那認識並瞭解其中的工具的作用是必不可少的環節。按照功能屬性Fastlane對工具進行瞭如下分類(鏈接至官網詳細介紹):

  • Testing 測試相關

  • Building 打包

  • Screenshots 截圖

  • Project 專案配置

  • Code Signing 代碼簽名

  • Documentation 文件

  • Beta 內測相關

  • Push 推送

  • Releasing your app 發佈

  • Source Control Git工作流

  • Notifications 通知相關

  • Misc 其他的雜七雜八

分類下對應的就是具體的每一個工具的介紹,在這裡每一個工具Fastlane叫做action,下文我們也統一叫action。這裡我會列舉一些我認為常用的action,其他的大家可以去官網看下

  • gym:是fastlane提供的打包工具。

  • snapshot: 生成多個設備的截圖檔案

  • frameit :對截圖加一層物理邊框

  • increment_build_number:自增build number 然後與之對應的get_build_number。Version number同理。

  • cert:創建一個新的代碼簽名證書

  • sigh:生成一個provisioning profile並儲存打當前檔案

  • pem:確保當前的推送證書是活躍的,如果沒有會幫你生成一個新的

  • match:在團隊中同步證書和描述檔案。(這是一種管理證書的全新方式,需要重點關註下)

  • testflight:上傳ipa到testflight

  • deliver:上傳ipa到AppStore

當然官網裡面其實是有很多可以劃等號的Action,大家在看的時候註意下。Actions官網關於Action的介紹

多說無益,開始上手

當前最新版本是2.8.4

一、安裝xcode命令列工具

xcode-select –install,如果沒有安裝,會彈出對話框,點擊安裝。如果提示xcode-select: error: command line tools are already installed, use “Software Update” to install updates表示已經安裝

二、安裝Fastlane


sudo gem install fastlane -NV或是brew cask install fastlane我這裡使用gem安裝的

安裝完了執行fastlane –version,確認下是否安裝完成和當前使用的版本號。

三、初始化Fastlane

cd到你的專案目錄執行

fastlane init

這裡會彈出四個選項,問你想要用Fastlane做什麼? 之前的老版本是不用選擇的。選幾都行,後續我們自行根據需求完善就可以,這裡我選的是3。

如果你的工程是用cocoapods的那麼可能會提示讓你勾選工程的Scheme,步驟就是打開你的xcode,點擊Manage Schemes,在一堆三方庫中找到你的專案Scheme,在後面的多選框中進行勾選,然後rm -rf fastlane檔案夾,重新fastlane init一下就不會報錯了。

接著會提示你輸入開發者賬號和密碼。


[20:48:55]: Please enter your Apple ID developer credentials

[20:48:55]: Apple ID Username:

登錄成功後會提示你是否需要下載你的App的metadata。點y等待就可以。

如果報其他錯的話,一般會帶有github的相似的Issues的鏈接,裡面一般都會有解決方案。

四、檔案系統

初始化成功後會在當前工程目錄生成一個fastlane檔案夾,檔案目錄為下。

其中metadata和screenshots分別對應App元資料和商店應用截圖。

Appfile主要存放App的apple_id team_id app_identifier等信息

Deliverfile中為發佈的配置信息,一般情況用不到。

Fastfile是我們最應該關註的檔案,也是我們的工作檔案。

Fastfile


之前我們瞭解了action,那action的組合就是一個lane,打包到蒲公英是一個lane,打包到應用商店是一個lane,打包到testflight也是一個lane。可能理解為任務會好一些。

打包到蒲公英

這裡以打包上傳到蒲公英為例子,實現我們的一行命令自動打包。

蒲公英在Fastlane是作為一個插件存在的,所以要打包到蒲公英必須先安裝蒲公英的插件。

打開終端輸入fastlane add_plugin pgyer

更多信息查看蒲公英文件

新建一個lane


desc "打包到pgy"
lane :test do |options|
gym(
  clean:true#打包前clean專案
  export_method: "ad-hoc"#匯出方式
  scheme:"shangshaban"#scheme
  configuration: "Debug",#環境
  output_directory:"./app",#ipa的存放目錄
  output_name:get_build_number()#輸出ipa的檔案名為當前的build號
  )
#蒲公英的配置 替換為自己的api_key和user_key
pgyer(api_key: "xxxxxxx"user_key: "xxxxxx",update_description: options[:desc])
end

這樣一個打包到蒲公英的lane就完成了。

option用於接收我們的外部引數,這裡可以傳入當前build的描述信息到蒲公英平臺

執行

在工作目錄的終端執行

fastlane test desc:測試打包

然後等待就好了,打包成功後如果蒲公英系結了微信或是郵箱手機號,會給你發通知的,當然如果是單純的打包或是打包到其他平臺, 你也可以使用fastlane的notification的action集進行自定義配置。

其他的一些配置大家可以自己組合摸索一下,這樣會讓你對它更為瞭解。

match

開頭已經說了,match是一種全新的證書同步管理機制,也是我認為在fastlane中相對重要的一環,介於篇幅這篇就不細說了,有興趣的可以去官網看下,有機會我也會更新一篇關於match的文章。match

其他的一些小提示

1、可以在before_all中做一些前置操作,比如進行build號的更新,我個人建議不要對Version進行自動修改,可以作為引數傳遞進來。

2、如果ipa包存放的檔案夾為工作區,記得在.gitignore中進行忽略處理,我建議把fastlane檔案也進行忽略,否則回退版本打包時缺失檔案還需要手動打包。

3、如果你的Apple ID在登錄時進行了驗證碼驗證,那麼需要設置一個專業密碼供fastlane上傳使用,否則是上傳不上去的。

4、如果你們的應用截圖和Metadata信息是運營人員負責編輯和維護的,那麼在打包到AppStore時,記得要忽略截圖和元資料,否則有可能因為不一致而導致改寫。skip_metadata:true, #不上傳元資料 skip_screenshots:true,#不上傳屏幕截圖

關於fastlane的一些想法

其實對於很多小團隊來說,fastlane就可以簡化很多操作,提升一些效率,但是還不夠極致,因為我們沒有打通Git環節,測試環節,反饋環節等,fastlane只是處於開發中的一環。許多團隊在進行Jenkins或是其他的CI的嘗試來摸索適合自己的工作流。但是也不要盲目跟風,從需求出發切合實際就好,找到痛點才能找到止痛藥!



編號297,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂