為iOS專案新增Daily Build

2021-09-23 19:23:36 字數 3905 閱讀 7228

很多人在說到daily build的時候總是喜歡背書。背書就背書吧,總比混跡軟體行業連書都沒看過的強。很久以前遇到乙個奇葩。每次到**提交測的通知就著急忙慌的催促組員趕緊幹活,開始嚴重加班,晚飯都不吃。。。偶爾還需要開通宵。但是即使如此,最後也不會得到什麼好的反饋。那個team就是這樣迴圈往復的做著專案,直到永恆。如果專案的相關人員能背背敏捷什麼的開發書籍,想必情況總能有所改善。

相信以上情況各位多少都遇到過,那麼daily build為什麼會對這樣的情況有所改善呢?

快速定位錯誤。那天的daily build出問題了就是那天繼承到系統中得**出的問題。有check in到svn的**必須是可以編譯的這樣的約定也無濟於事,乙個疏忽就扒瞎。daily build才是對**可執行的最好保證。

給客戶想要的軟體。及早的把可執行的**給客戶看。使用者可以及時看到可用的功能,可以及早的提出開發和需求理解不一致的內容。這個客戶不一定是特質甲方。也可以理解為給開發部門提出需求的產品等其他部門。一般來說,如果最後給「客戶」乙個「出乎意料」的軟體,這有可能不是客戶想要的。

開發進度約%60。軟體開發這個東西就是不能像蓋樓一樣看到明顯的結果。%60是個多少?daily build可以讓需要了解進度的人非常清楚的了解開發的進度。

daily build對軟體的質量也有很大的幫助。每天乙個可執行的版本出來,測試就可以開始測了。盡早的測出bug來,盡早的修改。這些都會在不大量增加工作量的前提下保證**質量。比在最後的最後通宵熬夜效果好到不知道多少。

xcodebuild

下面daily build ios專案。xcode有乙個command tool的工具xcodebuild。用這個工具可以用來使用命令列編譯xcode專案。

然後先看看這個xcodebuild都能做些什麼。輸入man xcodebuild命令:

功能很強大!不過我們目前要用到的還只是其中的一小部分。一點點的看。

切換到你專案所在的目錄

試試這句

xcodebuild -configuration distribution clean build
最後看到這句** build succeeded **xcodebuild命令,這裡使用-scheme來打包成xcarchive。然後。

xcodebuild -exportarchive -exportformat ipa -archivepath

"" -exportpath

""

自動化起來用shell把xcodebuild命令串起來?no,用python。使用python可以做shell能做的,還可以做shell不能的。而且python簡單易學,誰拿過來都可以分分鐘學會。最關鍵的一點,很多的linux系統都已經預裝了python。mac也不例外。現在mac預設安裝的時python2.7的環境。所以,下面的**都是基於python2.7的。

上面講了「大象裝冰箱」的三步走。一一的用python**實現出來。

準備工作

下面用接收命令列的方式傳入三步走中需要指定的內容。python在執行的時候是這樣的:

python yourfilename.py command line
我們要傳入的引數包括scheme的名稱,專案所在的目錄等。還有別的,目前所用到的主要是這兩個。例如:

python yourfilename.py --scheme=[your scheme name] -x [project path] [out put path.format]
有了命令了,就應該解析了:

opts, args = getopt.getopt(sys.ar**[1:], "

x", ["

scheme=

"])

引數從第二個開始算sys.ar**[1:],因為第乙個是yourfilename.py。getopt方法會把長引數名都拿出來給opts陣列。opts陣列中得每乙個元素都是乙個tuple的結構,第乙個元素是長引數的名稱,第二個元素是長引數對應的值。-x後面的引數都放在args陣列中。args的每乙個元素都是乙個字串,相當於"[project path] [out put path.format]"字串按照空格split成的字串陣列。

走三步,1.cd。。。

跳轉到專案所在的目錄。參考這麼一句import os os.system("ls")可以執行ls命令。但是,這個卻不能執行「cd」命令。因為那個不能修改python主程序的工作目錄。用這個:

import os

directory = "your ios project path"

os.chdir(directory)

2. archive

import subprocess

archivecmd = "

xcodebuild -scheme

" + targetname + "

archive -archivepath

" + directory + targetname + "

.xcarchive

"subprocess.popen(archivecmd, shell=true)

第一句就是拼乙個字串。乙個xcodebuild的命令字串,然後放到subprocess中執行。

3. 打包成ipa

ipacmd = "

xcodebuild -exportarchive -exportformat ipa

" + "

-archivepath

" + directory + "

/" + targetname + "

.xcarchive

" + "

-exportpath

" + directory + "

/" + targetname + "

.ipa

"subprocess.popen(ipacmd, shell=true)

和第二部一樣,拼乙個字串把上一步中打好包的xcarchive重新打包成ipa並輸出。

so far so good?

這幾條命令分開執行,確實都不會有任何的問題。會在專案的目錄下生成乙個build的目錄,在裡面可以找到我們在前面兩部的命令中得到的xcarchive檔案和最後輸出的ipa檔案。很好,都放在python的檔案中按照我們預定的方式執行一次。python yourfilename.py -scheme yourschemename -x youriospeojectpath。執行之後會輸出滿螢幕的xcodebuild的輸出內容。但是看看專案資料夾下,沒有ipa檔案!

原來,subprocess執行命令的時候,xcodebuild命令沒有執行完成就已經返回了。也就是ipa打包的命令執行的時候上一步的命令還沒有執行完,xcarchive還沒有生成。這一點很好解決,python給subprocess提供了乙個wait方法。等命令全部執行完了再執行下一步。

process = subprocess.popen(archivecmd, shell=true)

process.

wait()

so far so good!這個時候就算是全部的問題都解決了。**在這裡。python語言本身非常的靈活。在這一**上可以很容易擴充套件出其他的功能。比如定時執行,編譯或者打包不成功傳送通知郵件等。

為iOS專案新增Daily Build

很多人在說到daily build的時候總是喜歡背書。背書就背書吧,總比混跡軟體行業連書都沒看過的強。很久以前遇到乙個奇葩。每次到 提交測的通知就著急忙慌的催促組員趕緊幹活,開始嚴重加班,晚飯都不吃。偶爾還需要開通宵。但是即使如此,最後也不會得到什麼好的反饋。那個team就是這樣迴圈往復的做著專案,...

iOS 為分類新增屬性

我們知道分類可以很簡單的新增方法,但是新增屬性卻無能為力,但是我們還是可以通過動run time的associate就可以做到 比如說我要在uimage中新增乙個url屬性 h inte ce uiimage url property nonatomic,copy nsstring url end ...

iOS為Category新增屬性

一般認為category不能新增變數,其實可以使用 dynamic 來動態新增的。即執行時runtime 分類裡面不能新增ivar是因為分類本身並不是乙個真正的類,它並沒有自己的isa。原文出自 1.建立uiviewcontroller的類別並新增幾個屬性 import inte ce uiview...