為iOS項目添加Daily Build

來源:互聯網
上載者:User

為iOS項目添加Daily Build

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

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

  1. 快速定位錯誤。那天的Daily Build出問題了就是那天繼承到系統中得代碼出的問題。有check in到SVN的代碼必須是可以編譯的這樣的約定也無濟於事,一個疏忽就扒瞎。Daily Build才是對代碼可啟動並執行最好保證。
  2. 給客戶想要的軟體。及早的把可啟動並執行代碼給客戶看。使用者可以及時看到可用的功能,可以及早的提出開發和需求理解不一致的內容。這個客戶不一定是特質甲方。也可以理解為給開發部門提出需求的產品等其他部門。一般來說,如果最後給“客戶”一個“出乎意料”的軟體,這有可能不是客戶想要的。
  3. 開發進度約%60。軟體開發這個東西就是不能像蓋樓一樣看到明顯的結果。%60是個多少?Daily Build可以讓需要瞭解進度的人非常清楚的瞭解開發的進度。
  4. Daily Build對軟體的品質也有很大的協助。每天一個可啟動並執行版本出來,測試就可以開始測了。儘早的測出bug來,儘早的修改。這些都會在不大量增加工作量的前提下保證代碼品質。比在最後的最後通宵熬夜效果好到不知道多少。

    XCODEBUILD

    下面Daily Build iOS項目。Xcode有一個command tool的工具xcodebuild。用這個工具可以用來使用命令列編譯Xcode項目。

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

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

    切換到你項目所在的目錄

    cd /Users/username/Desktop/MyiOSApp/

    試試這句

    xcodebuild -configuration Distribution clean build

    最後看到這句** BUILD SUCCEEDED **就算是命令執行成功了。你可以在你的目錄下發現一個建立的檔案夾build,在這個檔案夾裡就可以找到編譯並且打包好的你的app:YourProjectName.app。沒錯這個打好得包是app格式的。我們要得時ipa的包,腫麼辦呢。往下看。

    xcodebuild -scheme MyiOSApp archive -archivePath /Users/username/Desktop/MyiOSApp.xcarchive

    xcodebuild命令,這裡使用-scheme來打包成xcarchive。然後。

    xcodebuild -exportArchive -exportFormat ipa -archivePath    /Users/username/Desktop/MyiOSApp.xcarchive -exportPath    /Users/username/Desktop/MyiOSApp.ipa

    這個命令執行完成之後,你就會在剛剛產生的build檔案夾裡找到你的app的ipa包了。

    自動化起來

    用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.argv[1:], x, [scheme=])

    參數從第二個開始算sys.argv[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 osdirectory = your ios project pathos.chdir(directory)

    2. archive

    import subprocessarchiveCmd = xcodebuild -scheme  + targetName +  archive -archivePath  + directory + targetName + .xcarchivesubprocess.Popen(archiveCmd, shell=True)

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

    3. 打包成ipa

     

    ipaCmd = xcodebuild -exportArchive -exportFormat ipa +  -archivePath  + directory + / + targetName + .xcarchive +  -exportPath  + directory + / + targetName + .ipasubprocess.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語言本身非常的靈活。在這一代碼上可以很容易擴充出其他的功能。比如定時執行,編譯或者打包不成功發送通知訊息等。

     

     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.