Rock Me 專案改版至今,需要一直不斷的發佈測試版給內部人員測試用為了方便後續整合,iOS team決定建置fastlane節省時間成本。
在前公司曾經導入fastlane 也曾經導過fastlane swift 版,這次在Rock Me 裡面還是導入ROR版的fastlane,因為不確定fastlane swift是否符合Rock Me 的發板需求,已彈性和功能來說還是ROR版本的較為穩定也比較多彈性。
Fastlane 好處在於
- 自動化包版、上傳流程
- 多個App同時打包
- 自動更換版號
- 節省手動等待的時間
直接在專案目錄下面在Terminal裡輸入
fastlane init
會生成一個fastlane 的子目錄,裡面包含最基本Fastfile 和 Appfile,其餘檔案則是紀錄檔。
Fastfile是定義包板流程的主要檔案,Appfile則是可以定義你的App參數,包含App identifier, team id等等。
Tips for writing Fastfile
今天主要是紀錄一下在寫客製化化Fastfile遇到的問題,正規包版的流程應該是
但因為我們專案流程還未確定,因此都會少掉切回master包版的步驟,但正確來說都應該切回master再包版喔!
首先,我會先定義一個叫release的lane,lane是一個外部可以呼叫的function
也可以將lane定義成private,禁止外部呼叫。
呼叫lane的方式就是在Terminal 輸入
fastlane
your lane name
接下來,就是定義細部release這個lane裡面的流程
Step 1: 給定所需要的環境變數,如果是外部來,可以用function 給入參數,也可以用Tips 1 讓user 輸入
Tips 1 — user interaction, 讓user 輸入所需要的訊息,例如帳號
Step 2:更改版號、build 號
Tips 2–在Fastfile 裡執行shell script 指令
可以寫
sh('your command')
或者
sh "your command.sh or command"
Step 3: 包ipa檔案
Tips 3 — global 環境變數
可以看到上面有許多 ENV['xxxxx']
等的global參數,這些都是在Fastfile一開始時候定義,定義完也可以改變。像我們就會定義正式版和測試版的target name、bundle id,之後如果一個不小心需要變更,不必在整隻file裡面反覆找尋和更改
Step 4:上傳至appstore/ Testfligt
Step 5: slack notification
Tips 4— 讀取local file 的內容,並且送到slack web hook 中
這是我想嘗試的一個功能,因為每次在送出一個新版本,我們都必須整理一個文件列舉這次修改、新增的功能讓QA驗測。ios team 會把新增的功能列舉在README.md裡面,但我在想,是不是可以發版完就在slack通知中顯示更新的README.md內容,QA接到通知後,可以直接在slack 上面看到新增的大綱,也不需要再來詢問工程師了。
果然,是可行的,如上gist所示,fastlane有內建的slack呼叫指令,我們可以去定義是成功或是失敗,並且增加slack通知的欄位,所要做的就是讀出README.md的內容,並將他塞進slack通知裡。
我用一個變數存取讀出來的內容
data = File.read("../README.md")
並將內容轉成string 的格式
buildMsg = data.to_s
接下來塞進slack裡就ok
結果如下圖