在iOS開發中,你可能常常會遇到這樣的場景:html
本身負責的功能模塊開發完成後,將其合併到測試分支,而後打測試包給測試安裝。測試發現bug,這時你可能正在開發分支上作其餘的事情,可是你須要修改了bug,提交到測試分支,再次打測試包給測試人員使用。反反覆覆的切換分支,反反覆覆的構建打包將浪費你大量的時間,做爲一名工程師,最不能容忍的即是在重複的事情上浪費時間。因而,你想,我能夠本身動手寫一個自動構建發佈的小工具。git
本篇博客就是基於上面的想法,給你們介紹編寫一個簡潔的自動化工具的具體步驟與核心要點。在編寫本博客時,我也基於這樣的想法開發了一款Mac上的iOS自動構建,打包,發佈工具,而且將代碼開源在Github,若是有興趣,你也能夠做爲參考。github
開發工具也是一種產品,在開始作一件產品以前,需求分析是十分重要的步驟。商業產品的需求者是用戶,而開發工具的需求者就是你本身。首先,結合工做須要,一款自動化構建工具應該至少知足以下這些功能需求:數據庫
1.它應該支持多個項目同時進行自動化構建。 編程
2.應該能夠方便的新增與刪除項目。xcode
3.它應該具有Git操做能力,自動選擇合適的分支進行構建。服務器
4.它須要調用Xcode命令來完成打包工做。網絡
5.它具有發佈到第三方平臺的能力(例如蒲公英)。多線程
6.它能夠靈活的進行模式配置,Git模塊,Xcode構建模塊和發佈模塊能夠自由組合。框架
7.它應該有一個輸出窗口,可讓使用者獲取構建的進度以及log日誌。
8.它有記憶功能,會將配置信息保存到本地。
上面列出的功能點是這個自動化構建工具的一些基礎功能,實現了這些功能,你的軟件即可以正式的投入使用,可是它並不完善,你能夠在本身規劃的第二版,第三版中繼續豐富功能,優化體驗。
明確了需求,你下一步須要考慮的即是實現這些需求所須要的技術。
在界面上,能夠採用列表的方式進行已添加項目的展現。NSTableView是一個很好選擇,其使用方便,結合xib文件來編寫cell,其開發效率也十分高。關於進行多個項目的同時構建,能夠採用多線程編程技術,在Objective-C中,NSOperationQueue能夠方便的進行多線程任務管理,咱們可使用它來實現異步編程。
對於iOS工程的自動構建,新增和刪除項目無非就是保存或刪除xcode文件的路徑,固然,你能夠也須要一些附帶的數據用於顯示,例如項目名等。
安裝了Xcode工具,Git工具會被自動的安裝。你能夠直接在終端經過命令行來調用Git命令,你可使用Foundation框架中的NSAppleScript類來在OS X平臺軟件中執行腳本命令,關於Git模塊,你須要使用到的命令以下:
①拉取項目全部分支:git branch
②進行分支的切換:git checkout [分支名]
③從遠端拉取代碼:git pull
和操做Git命令相似,你須要使用到的Xcode的構建命令以下:
①清理工程:xcodebuild clean -[工程類型] [工程地址] -scheme [scheme名稱] CONFIGURATION=[DEBUG模式]
②導出archive文件:xcodebuild archive -[工程類型] [工程地址] -scheme [scheme名稱] -archivePath [導出路徑] CONFIGURATION=[DEBUG模式]
③導出IPA安裝包:xcodebuild -exportArchive -archivePath [archive文件路徑] -exportPath [導出路徑] exportOptionsPlist [配置plist文件]
這一步其實就是IPA安裝包的上傳,你能夠長傳到蒲公英平臺做爲私有項目供測試人員使用,你也能夠上傳到公司本身的服務器,AFNetworking是一個同時支持iOS和OS X的網絡第三方庫,你能夠選擇使用它來上傳文件。
這部分就徹底是代碼邏輯了,在設計時,你能夠將每一個模塊封裝成具體的任務,任務之間只能順序進行執行,而後自由組合這些任務便可。
使用NSTextView來顯示輸出信息,不管是執行腳本,仍是上傳文件,若是出錯,都會有信息反饋。
你能夠選擇使用數據庫來存儲每一個項目的信息,由於數據量並不大,我在開發這個軟件時,採用的是歸檔的原理來進行數據的持久化。
在Xcode中,使用storyboard開發界面是一件什麼暢快的事情。在開發項目的主界面時,我參照了SourceTress的設計,也感謝 @魔笛 提供的界面思路。我想做爲開發者的工具無需絢麗的外表,簡約是實用,而後看上去舒服就算達到要求。主頁面截圖以下,其也十分簡單,只是做爲數據的展現。
添加工程界面我採用的是彈出窗口的模式,正如上面分析,添加工程的實質就是拿到Xcode項目文件的地址,界面效果以下:
項目詳情界面略微複雜,其中須要配置編譯模塊,Git模塊和發佈模塊,界面以下:
關於邏輯與功能的編寫,代碼較多,須要的朋友能夠自動查看源碼。
Jenkins是一個持續集成與發佈軟件的平臺。後續你能夠爲你的自動構建工具添加輪詢打包的功能,將其運行在一臺做爲服務器的Mac電腦上,它就是具備了持續集成功能。
軟件下載地址:http://zyhshao.github.io/AutoBuild/welcome.html。
github源碼:https://github.com/ZYHshao/AutoBuild。 歡迎starO(∩_∩)O
歡迎指教 共同窗習