先說一下這次體驗的結果察蹲,將自己的一個項目提交到了flow.ci上,實現了基本的iOS持續(xù)集成的功能遏暴,它讓我們程序員的世界更美好了一點點贡耽。本文篇幅較長衷模,如果你沒時間看可以直接跳到 #詳細流程# 標題下,或者可以直接到flow.ci官網馬上進行體驗蒲赂。
1. 為什么需要iOS持續(xù)集成
持續(xù)集成是敏捷開發(fā)的重要實踐之一阱冶,設想這樣一個場景,你正在考慮如何寫一個正則表達式把HTML5里面的信息提取出來滥嘴,正當你寫到一半的時候木蹬,測試人員突然來到你后面對你說:“后端上接口了,你給這臺iPhone 7打個線上的包我過一下吧”若皱。這時候你剛剛想到一半的思路瞬間消失了镊叁,然后你只能中斷當前的工作,切換一下git分支是尖,將上個版本重新編譯一遍給測試意系。如果這時候storyboard布局還變動了...那你只好和測試人員大眼瞪小眼直到Xcode把應用安裝好了〗刃冢可是如果你的項目里使用了持續(xù)集成,你就能獲得以下優(yōu)點:
- 迭代速度加快痰催,甚至每次commit都可以交付可運行的代碼兜辞,而測試人員可以盡早進入測試環(huán)節(jié)。
- 花費在編譯夸溶,分發(fā)這樣低技術含量的時間變少逸吵,打包的成功率提高,節(jié)省更多時間缝裁。
- 可以接入測試腳本扫皱,在交付給測試人員之前就把低級錯誤發(fā)現出來,比如接口問題,編譯問題等韩脑。
2. 1 為什么選擇flow.ci
主要是因為搭建自建的服務器是非常耗時耗力的!
首先氢妈,iOS工程需要在MacOS環(huán)境下編譯,這個iOS閉源的特點使得我們在選擇服務器上有極大的限制段多。同時首量,每個團隊自建的服務器可能會有一定程度的不同。在錯誤發(fā)生的時候进苍,你的經驗決定了你能否準確定位錯誤加缘,到底是服務器問題?Pod問題觉啊?證書問題拣宏?還是代碼問題?
flow.ci 配置非常簡單杠人,迄今為止勋乾,我對 flow.ci 的體驗大部分情況下還很好。至于定價方面搜吧,因為還處于內測階段市俊,flow.ci 在內測期間完全免費。
2.2 為什么最近才開始
是的滤奈,我知道你聽得最多是Jenkins
摆昧,第二多是Travis CI
。
Jenkins
需要你有一臺CI服務器蜒程,除非你想把自己的Mac Pro貢獻出來媚污,不然還是申請一臺Mac Mini當CI服務器。Jenkins+gitlab+fir.im已經是一個比較成熟的持續(xù)集成解決方案了庇谆,網絡上也有一大堆教程幔翰,不過問題是需要處理的細節(jié)比較多,個人覺得很麻煩领炫,而且有些問題并不是那么容易找到解決方案的偶垮。
Travis CI
目前只對Github上的項目提供持續(xù)集成服務,對于商業(yè)項目來說帝洪,很少會考慮直接放在github上似舵。
因為 flow.ci 對iOS的集成是在11月4日左右內測,也就是說葱峡,這個功能是一個最近才上線的砚哗。據說主要是因為需要大量Mac服務器比較難找,這直接導致了我從 flow.ci 剛剛出現的時候就一直關注到現在才用上...真的蠻久了砰奕。而且這塊功能算是內測中的內測蛛芥,目前(11月17日)還需要向官方發(fā)郵件提鸟,等對方提供內測資格。
新上線的功能直接導致了文檔不全仅淑,如果出了一些問題称勋,沒有現成的文檔可以參考。幸虧官方團隊提供了一個討論組漓糙,反正我在獲得內測資格之后铣缠,馬上進行實驗,然后馬上就碰到問題昆禽,在Google一番未果之后求助于討論組蝗蛙,官方人員在第二天回復了我的問題,完美解決醉鳖。
3. 詳細流程
3.1 前期準備
- 獲取mobileprovision文件和p12捡硅,是的,iOS打包內測版時盗棵,需要發(fā)布證書及相關簽名文件壮韭。具體步驟可以參考這里。
- 整理工程項目纹因,提交到對應的代碼倉庫里喷屋。
3.2 開始創(chuàng)建工作流
首先打開flow.ci的操作面板,點擊創(chuàng)建項目
瞭恰。你可以開始選擇代碼倉庫屯曹。目前flow.ci 有四個代碼倉庫類型可選,分別是
GitHub
(世界最大的同性交友網站)
Gitlab
(大部分公司會使用gitlab自建git倉庫)
Bitbucket
(類似中國碼云服務惊畏,支持私有倉庫)
Coding
(國內的代碼托管服務恶耽,支持公有和私有倉庫,界面做的很棒颜启,我覺得速度蠻快的)
3.3 授權
github和coding在賬戶登錄的情況下會向你詢問是否提供授權(Auth)
偷俭,否則的話會要求你提供 RSA Key
和倉庫地址。如果你不知道的話缰盏,可以打開終端涌萤,輸入命令cd ~/.ssh
,將想要集成平臺的RSA文件內容提供給flow.ci 口猜。
3.4 配置工作流內容
選擇好想要持續(xù)集成的倉庫之后形葬,點擊創(chuàng)建第一個工作流來開始接下來的設置。
直接拉到底部暮的,選擇iOS模板
感覺你的工程設置對應的Xcode版本,之后提交工程匹配的證書
MobildProvision
和p12
文件淌实。如果找不到的話可以點擊這里來查看冻辩。下面設置
構建參數
猖腕,其實如果你本身有使用xcode自動構建的經驗的話,這幾個參數和xcodebuild
是直接對應的恨闪。你可以在工程根目錄下倘感,在終端使用 xcodebuild -list
命令查看信息來幫你確定下面五個輸入參數。FLOW_IOS_COMPILE_WORKSPACE
如果你是集成了CocoaPods的話咙咽,這里寫的應該是你的工程名.xcworkspace
! 注意的是這個地方如果不為空老玛,那么FLOW_IOS_COMPILE_PROJECT
就應該設置為空,二者取其一钧敞。FLOW_IOS_COMPILE_PROJECT
如果你是一個小項目而且沒有集成CocoaPods的話蜡豹,可以填工程名.xcodeproj
! 注意的是這個地方如果不為空,那么FLOW_IOS_COMPILE_WORKSPACE
就應該設置為空溉苛,二者取其一镜廉。FLOW_IOS_COMPILE_SCHEME
填Targets
下面的,如果有多個就需要指定你想要打包的targetFLOW_IOS_COMPILE_SDK
保持默認值即可FLOW_IOS_COMPILE_CONFIGURATION
Debug搞定!一個簡單的工作流就添加到了你的項目里愚战。我們繼續(xù)添加其他設置娇唯。
3.5 根據需求自定義工作流
- 觸發(fā)器 提供了根據事件觸發(fā)打包的Hook,包括Push寂玲、Pull塔插、Tag操作,你也可以設置幾個定時任務拓哟,比如每天下班后執(zhí)行一次打包想许。
- 初始化 提供了初始化時候顯示的一些信息,同時為一些編譯時候的變量進行賦值彰檬,下方提供了自定義輸出的模板可供選擇伸刃。
- Git倉庫克隆 即服務器
git clone
操作 - 緩存 即pod安裝包依賴,可以選擇啟用緩存逢倍,那么flow.ci只會在第一次的時候添加依賴(pod install)之后編譯就繼續(xù)使用第一次打包的pod文件捧颅。
- 安裝
- 編譯 即編譯時候的一些變量,大部分出錯是在這里設置錯了较雕,在自動化打包的時候會有對應的提示信息碉哑。
- 完成后,提供了Email和slack提醒方式亮蒋,你可以選擇在成功或者是失敗的情況下發(fā)送郵件到指定郵箱扣典。
3.6 分發(fā)到Fir.im
fir.im 為開發(fā)者提供測試應用極速發(fā)布的服務,測試人員可以通過生成的二維碼直接掃描安裝測試版應用慎玖。工作流中在完成后的左上角有一個+
贮尖,點擊之后選擇fir.im上傳插件
,將你在fir.im
里的token寫在FIR_API_TOKEN
中即可趁怔。其他兩個參數可以不填湿硝。
3.7 一些小細節(jié)
-
fir.im上的二維碼掃描后進入安裝薪前,但是手機報告無法安裝該應用
- 可能是在MobileProvision中沒有將這臺手機添加到測試列表中。 -
Code signing is required for product type 'Application' in SDK 'iOS 10.1'
關閉Automatically manage signing关斜,在signing中手動選擇mobileprovision
證書名示括。 -
You cannot specify both an Xcode project and a workspace.
編譯變量FLOW_IOS_COMPILE_WORKSPACE
和FLOW_IOS_COMPILE_PROJECT
選擇一個填就好了。 -
The workspace named "XXX" does not contain a scheme named "XXX".
查看你是不是選擇對了Scheme痢畜。如果確認自己寫的是正確的垛膝,那么在檢查Manage scheme
是否開啟shared
。
4. 下一步目標
集成單元測試和UI測試
5. 相關資源
flow.ci 討論組
Fir.im 應用分發(fā)
flow.ci官方網站
(轉載請注明來源)