Fastlane + Bugly自動化部署測試包

對一個iOS開發者而言,當你專心利用一個週期快速開發了一個版本時,在上線以前老是面臨不斷對內或對外發布測試版本需求。而這個過程當中,應用發佈和證書管理基本上都是最使人頭疼的問題,好在證書的問題已經在XCode 8.0中獲得充分自動化管理,基本不須要額外接入。而打包則沒法避免的要走向以下重複的流程:git

  • 修改測試版本號
  • 修改Build版本號
  • 執行Archive
  • 選擇Adhoc導出IPA安裝包文件
  • 上傳Bugly測試平臺
  • 分享測試連接二維碼

如上流程是極爲繁瑣枯燥且毫無技術含量可言,而當一個小的需求發生變化甚至是一處小的文案的修改,你都要按照如上再次從新Rebuild. 簡直是扼殺工程師的寶貴時間. 若是你跟我同樣飽受部署的痛苦,我想Fastlane也許是你的救星.typescript


FastLane

初次邂逅Fastlane是其去年5月份,當我看到徹底有一個工具可以徹底自動化這個流程,異常的興奮。shell


Fastlane自己包含兩大模塊,一個是其內核部分,另一個就是Action了。Action是Fastlane自動化流程中的最小執行單元,直觀上來說就是Fastfile腳本中的一個個命令,好比:git_pull,deliver,pod_install等等,而這些命令背後都對應實際上是一個用Ruby編寫的腳本。
vim

Fastlane 是一套用 Ruby 編寫的 iOS 命令行工具集(後來也支持了 Android),主要組件包括:
api

  • match / cert / sigh 協助管理代碼簽名
  • pem 自動生成 APNs 證書
  • scan 自動化測試
  • gym 自動化編譯並打包生成簽名的 .ipa 文件
  • snapshot / frameit 協助處理 iOS 屏幕快照
  • pilot 上傳和管理 TestFlight
  • deliver 將應用及其它信息上傳到 App Store

而正是這些顆粒度極小的Action,根據本身需求組合成一個自動化的鏈條。我猜測,Fastlane的做者們在項目的早期甚至規劃的階段,應該就考慮到了這一點:在實際開發中,自動化的業務場景太多,每一個團隊可能都有本身的獨特需求,單靠一兩我的的力量是沒法知足的,因此如何將涉及到實際業務的功能開發,用優雅的方式交給開源社區中龐大工程師們來維護,成爲Fastlane架構中須要重點考慮的內容。因此你能夠看到官方Actions文檔中包含大約170多個Action,這些Action大部分來自開源社區貢獻。xcode


安裝

首先確保Xcode命令行工具是最新版本的:ruby

xcode-select --install複製代碼

安裝Fastlane:bash

sudo gem install fastlane -NV複製代碼

找到工程文件目錄下執行:架構

fastlane init複製代碼

在執行「Your Apple ID" 這一步輸入蘋果開發者帳號,fastlane 會自動獲取工程文件名,目錄等其餘數據。這一步「Please confirm the above values」,確認信息,沒問題則輸入 y。而後,fastlane 會進行一系列的初始化操做,包括下載 App Store 上的元數據和截屏文件。等待初始化完成以後,工程目錄下就多了一個 fastlane目錄:
app

$ cd fastlane && ls
Appfile            Fastfile           metadata           report.xml
Deliverfile        README.md          screenshots複製代碼

文件目錄:

  • metadata目錄下存放整個元數據文件,包括關鍵詞、版本更新日誌、圖標等.
  • screenshots目錄下存放應用截圖
  • Appfile文件記錄App的 bundle ID、Apple ID、Team ID三種信息.
  • Fastfile腳本的核心執行文件.有幾個默認的選項,可直接使用.
  • report文件時每次執行fastlane時生成報告.

安裝fastlane成功後,首先拆解咱們須要自動化的兩個流程:

  • 自動打包成Adhoc的安裝包ipa文件
  • 經過fastlane自動上傳到bugly

不少確定問爲何不合併成一步,其實徹底是能夠的,只是上傳bugly須要額外單獨設置對應版本一些描述信息。我爲了方便本身控制,拆分紅了兩步.


自動化打包

自動化打包使用最多就是Fastlane中gym這個Action, 轉爲打包而生, 安裝gym這個組件:

sudo gem install gym複製代碼

cd項目根目錄, 建立自動打包腳本:

vim gym.sh複製代碼

輸入腳本內容:

#!/bin/bash
#計時
SECONDS=0複製代碼#假設腳本放置在與項目相同的路徑下複製代碼project_path=$(pwd)複製代碼#取當前時間字符串添加到文件結尾複製代碼now=$(date +"%Y_%m_%d_%H_%M_%S")複製代碼#指定項目的scheme名稱
scheme="Xitu"複製代碼#指定要打包的配置名
configuration="Adhoc"複製代碼#指定打包所使用的輸出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method參數複製代碼export_method='ad-hoc'複製代碼#指定項目地址
workspace_path="$project_path/Xitu.xcworkspace"複製代碼#指定輸出路徑
output_path="project_path/APP"複製代碼#指定輸出歸檔文件地址
archive_path="$output_path/Xitu${now}.xcarchive"複製代碼#指定輸出ipa地址
ipa_path="$output_path/Xitu${now}.ipa"複製代碼#指定輸出ipa名稱
ipa_name="Xitu${now}.ipa"複製代碼#獲取執行命令時的commit message
commit_msg="$1"複製代碼#輸出設定的變量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="複製代碼#先清空前一次build
gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}

#輸出總用時
echo "===Finished. Total time: ${SECONDS}s==="
複製代碼

把如上腳本中Xitu改爲你的項目名稱便可. 爲腳本執行提高權限:

chmod +x gym.sh複製代碼

執行一下腳本看一下打包效果:

./gym.sh複製代碼

執行結果:

通過572s,Adhoc版本的ipa文件打包成功,咱們在項目根目錄下找到App目錄:

會發現如上三個文件. ok.至此自動化打包ipa文件流程完成. 關於gym這個action調用強烈推薦看一下官方文檔的調用參數,對你調試過程會很是有幫助.


上傳Bugly

爲何選擇Bugly呢?其實緣由很簡單,他可以把崩潰發生時頁面訪問路徑和崩潰堆棧信息自動根據符號表翻譯能夠讀懂調用代碼路徑. 在定位異常上更爲直觀,而最關鍵的是Bugly官方在插件版本是支持fastlane的,能夠看這個文檔.

官方文檔提供了兩個比較重要的擴展一個是上傳文件和更新插件. 首先下載兩個插件,而如何在fastlane中調用者兩個插件呢?咱們知道針對官方定義action, 直接經過fastfile文件就修改便可,那如何在fastlane中定義本身的action?

步驟很簡單,首先執行:

fastlane new_action複製代碼

這時命令行會要求你輸入自定義action名字,直接以bugly上傳文件命名:

upload_app_to_bugly複製代碼

而後Fastlane會在當前目錄的建立一個名爲actions文件夾, 這個文件夾下默認也會建立一個名爲upload_app_to_bugly.rb的ruby文件。而咱們要作就是把剛纔下載上傳插件文件在這個文件進行替換便可.

自定義action成功,改如何調用呢?這是就須要回到fastfile這個文件了。這個文件基本是整個fastlane的核心,我在調試過程花了不少時間浪費它的規則和調試錯誤解決上。那根據Bugly文檔定義在fastfile文件添加以下代碼:

而當你點擊api說明你發現這個你根本打不開這個頁面。這樣會致使你根本不知道fastlane這些參數每一個參數應該傳什麼值。不過不要緊,通過一番折騰,仍是在google上找到關於這篇文檔的網頁快照,而快照其實就是上個月20號左右的(可能由於最近控制第三方app在國內內測平臺分發須要身份認證,Tencent繼續這個角度考慮,把接口文檔從官方網頁入口隱藏了):

繼續在快照找到這個上傳接口文檔的參數說明:

as you see. 咱們仍是弄到fastlane每一個參數意義, 這是基於如上參數表修改後的:

這裏須要額外說明參數就是filepath,這個參數在fastlane定義中通常指向ipa所在的文件夾,後來我調試過程發現不是,必須是相對於當前工程目錄一個ipa文件絕對路徑.

ok.到這裏,上傳fastlane自定義已經ok了,讓咱們測試一下,let's do it:

執行結果:


fastlane upload複製代碼

上傳成功. 登陸bugly後臺看一下內測分發:

上傳成功. 掃二維碼測試安裝,一切正常。同理關於更新插件流程基本相似這裏就不在贅述了。


小結

如上基於bugly自動打包整個流程,我故意拆分紅兩步,目的是方便本身控制,固然你也能夠改形成一步自動打包上傳,fastlane自己在fastfile文件中也是支持調用shellscript腳本的,調用很簡單,參考官方文檔便可.

well,這個自動化流程基本一開始就不須要你來管了,很是方便.

相關文章
相關標籤/搜索