最近公司要整持續整合打包,於是就入坑了,在搜尋的過程中發現並沒有一些完備的資料,於是我就決定開始開坑了。。。發車!
工具—fastlane(快發車-_-!)
fastlane
是一套自動化打包的工具集,用 Ruby 寫的,用於 iOS 和 Android 的自動化打包和釋出等工作,然而 Android 的似乎更喜歡用用 Grandle -_-! fastlane 的官網看這裡, fastlane 的 github 看這裡,它用起來大約是這樣的:
1 2 3 4 5 6 7 8 |
lane :beta do increment_build_number cocoapods match testflight sh "./customScript.sh" slack end |
上面這段程式碼的意思就是定義了一個 lane
叫做 beta,然後描述了這個 lane
要做的事情,上面的例子就是:增加編譯號,執行 cocoapods,執行 match ,執行 testflight,執行在當前目錄下的 customScript.sh 的指令碼,通知slack。這樣,這個 lane 就執行完畢了。fastlane 的強大之處就在於其提供的工具比較全,基本可以覆蓋打包釋出的所有流程,下面我們慢慢來看。
fastlane
使現有的工程支援 fastlane 是非常簡單的,只要執行一句 fastlane init
就可以了,執行完這步之後在你的工程目錄下會建立一個名叫 fastlane 的資料夾,裡面會有一個叫 Fastfile 的檔案,這個是 fastlane 的主檔案,也就是在 jenkins 中要呼叫的指令碼。Fastfile 一建立裡面就會有一些模板的 lane 可以自己點進去看一下,一看就懂。下面來說一下 fastlane 的一些常用命令。
fastlane actions
: 列出所有的 fastlane 的 actions,可以看到 fastlane 支援的所有 action。大約是這樣的:fastlane action [action_name]
: 顯示某一個 action 的詳細配置,比如想看到match
的可配置選項可以執行,fastlane action match
,顯示結果大約是如下這樣:
fastlane lanes
: 列出所有的可用的 lane 及其描述。這裡顯示的就是你的 Fastfile 裡面定義的所有 lane,比如筆者顯示出來的結果大約是這樣的:fastlane list
: 顯示所有的 lane,但是不顯示描述。fastlane new_action
: 建立一個 action。
OK,fastlane 命令介紹的基本差不多了,筆者認為,最常用的還是前兩個,特別是第二個 fastlane action [action_name]
,當你不知道某個工具在 XXXfile 中有哪些可配置選項的時候,請抬起頭,別讓皇冠掉 般的敲入這個命令。下面我們來看一下一個更常用的工具 match
match
我知道你們都 revoke 過證書。。。雖然這只是一個梗,但是 iOS 開發最麻煩的莫過於證書啊,配置檔案,開發人員隨意在後臺刪除,或者新建配置檔案,而其他的同事卻無法被通知到,會導致大量無謂的工作量。[match] (https://github.com/fastlane/fastlane/tree/master/match) comes to rescue。match 提出了一套全新的管理證書和配置檔案的方案,用來進行簽名,思想是使用私有倉庫來管理證書和配置檔案,每一個機器通過拉取該倉庫來安裝證書和配置檔案,再也不用進開發者後臺自己弄了。。一顆賽艇。具體的步驟可以點選上面的網址,裡面有很詳細的介紹。
match 的使用同樣很簡單,一行 match init
就搞定了,和 fastlane 一樣的套路,在 fastlane 資料夾下面會生成一個 Matchfile
。後面我們很多的配置都可以在這個 Matchfile
裡面寫。
上面是官方倉庫的demo,但是此處有坑 此處有坑 此處有坑,git_url
欄位的 git 地址要改成 ssh 協議。如果你在 jenkins 打包的 console 發現進度始終卡在 clone 這個倉庫的話,就要看看你的 git_url
欄位是不是沒改成 ssh 協議了。但是一個公司也許有多個專案,總不能來一個專案就建一個私有倉庫吧,沒錯,fastlane 的開發者們早就想到的最佳實踐,那就是 分支。使用一個分支去管理一個專案的證書和配置檔案,不同的 team 也可以使用不同的分支,這樣只需要一個倉庫,就完美的解決了問題。Matchfile
的可選配置可以用 fastlane action match
檢視。
下面來說一下 match
的基本用法,它的使用流程大約是這樣的:
match init
: 初始化match
,並建立 Matchfilematch development
: 建立開發證書和配置檔案,並安裝在本機上。match adhoc
: 建立 adhoc 釋出證書和配置檔案,並安裝在本擠上。match appstore
: 建立 appstore 釋出證書和配置檔案,並安裝在本機上。
配置檔案安裝的目錄是~/Library/MobileDevice/Provisioning Profiles
,證書和私鑰則是安裝在 Keychain 上的。
Passphrase
當在一臺新的機器上,第一次執行 match
的時候,會要求你為 Git 倉庫填寫一個 passphrase,這是出於安全的考慮,每一個檔案都會使用 openssl
進行加密,請記住你輸入的 passphrase,當在另一臺機器上執行 match
的時候,你需要輸入相同的 passphrase 才能繼續下去。如果需要在環境變數中使用的話,passphrase 的環境變數叫做 MATCH_PASSWORD
。
關於 match
就先介紹這麼多吧,更多詳細的東東去match主站發掘吧。下面我們說一說更為重要的打包命令 gym
。
Gym
打包了打包了。。。QA苦苦相逼何時了,哪有那麼多妹可撩啊,姐姐和包才治百病,這句話充分體現了包在移動開發領域的重要性。還記得曾經的你是如何打包的麼?
拔掉真機,點開工程,切換證書和配置檔案,怒點 archive,接下來就是一段風扇狂轉,電腦卡死,CPU跑滿的驚心動魄,終於風扇安靜了,可以 export 了,然後 F**k,誰TM把證書給幹了。。。。(此處應有燭光)。
不要慌。。。gym
comes to rescue。gym 就是 fastlane 提供的打包工具,包括簽名步驟,It’s super easy,一行搞定上面所有操作,保證無痛…!-_- 讓我們來看一下如何使用:
gym init
: 這是 fastlane 的老套路了,我知道你們都是老司機
gym
恩,用完了。。。臥槽,就沒了? 恩,就沒了
gym init
: 初始化 gym ,並建立 Gymfile。
gym
: 開始執行打包命令,當然你可以配置更多的 gym 選項,比如輸出路徑啊,指定scheme啊,是否 clean 啊等等,不知道還有哪些選項可配置? fastlane action gym
給你驚喜。
筆者的建議是能夠在 Gymfile 裡配置好的選項就在 Gymfile 裡配置,其餘的再使用程式碼。
Gymfile大約是這樣的:
gym
常用就是這麼多啦,更多套路歡迎移步gym主站
合體
前面分別介紹了 fastlane
,match
,gym
命令,他們每一項的功能我們都大致瞭解了,是時候讓他們合體了。。。現在我們腦補一下我們編譯打包的流程,以 adhoc 方式為例。
- 執行一下
cocoapods
- 獲取證書和配置檔案
- 開始打包
- 將 ipa 釋出到內測平臺,比如:Fir.im 蒲公英等
於是乎我們似乎就能寫出自己的第一個 lane
了,(騷年,你還不去學 Ruby 麼?)
1 2 3 4 5 6 7 |
desc "描述這個 lane 是幹啥用的,比如 upload ipa to fir for test" lane: appname_adhoc_to_fir do cocoapods match gym system "fir publish appname.ipa" end |
上面我們就完成了一個 lane。貫通了整套打包、上傳 ipa 的流程。其實 match 和 gym 同樣可以指定引數,但是如果你在各自對應的 XXXfile 裡面寫過了配置,這裡就可以省略了。上面最後一行的 fir publish
,是 fir 的命令,可以參見這個repo。
寫完了我們自定義的 lane 之後,就可以使用啦,用起來也是 so easy.
fastlane ios appname_adhoc_to_fir
,中間的 ios 指定了平臺,在 Fastfile 中就是最外層的 platform :ios
。敲完上面的命令,你只需要泡一壺好茶靜靜地等著控制檯顯示 Success(報錯)
血的教訓
match error
: 如果你在 jenkins 打包的 console 發現進度始終卡在 clone 證書倉庫的話,請將你的 Matchfile 的git_url
改成 ssh 協議,別問我為什麼。。。gym error
: 在 jenkins 打包的最後一步如果報錯code sign error
,請試試下面兩個辦法:(1) 將 login.keychain 中的證書拖到 System.keychain 下面
(2) 在gym
之前執行一下system "security unlock-keychain -p yourMacPassword
別問我為什麼。。。
總結
在下一篇中會介紹如何使用 fastlane 打企業證書籤名的包。
參考
https://everettjf.github.io/2015/09/08/ios-ci-with-fastlane
http://www.cocoachina.com/ios/20150728/12733.html
https://github.com/fastlane/fastlane
http://www.devlizy.com/ios-da-bao-quan-cheng-pei-zhi/