你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Xcode8以後的自動打包

Xcode8以後的自動打包

編輯:IOS開發基礎

本文類型:投稿

本文作者:tmactobefly

緣起

最近的工作需要頻繁使用企業證書給項目打包,用於當前項目的企業內部測試。由於測試工作的臨時性以及需要用外網發布的特性,所以並沒有使用當前用於開發測試組的CI。這個工作在我這裡就是簡單的導出用企業證書打包的IPA包並交付同事。

網上針對自動打包腳本的文章多如牛毛,本文只是自己在修改老腳本的過程中形成的一些細枝末節。

xcodebuild, xctool, xcbuild

翻出以前的腳本,看到以前的build腳本用xctool替代了官方的xcodebuild。習慣性地點開xctool的github主頁想看看有什麼更新,卻看到了README上的這段話:

Note: Support for building projects with xctool is deprecated and will not be updated to support future versions of Xcode. We suggest moving to xcodebuild (with xcpretty) for simple needs, or xcbuild for more involved requirements. xctool will continue to support testing (see above).

太久沒逛的緣故,這才發現了xctool在Xcode8以後不再支持build功能。對於build功能的簡單使用,Facebook團隊推薦轉回官方的xcodebuild(搭配xcpretty更給力),或者轉而使用他們家的xcbuild,而xctool將專注於測試功能(這篇文章也解釋了為何從xctool遷移回xcodebuild)。

對我而言xcbuild和xcpretty又是新鮮的東西,繼續點開鏈接。前者的主頁上寫道,在搭配Ninja的情況下,使用xcbuild來編譯速度甚至比xcodebuild還快。而回想當時使用xctool的緣由,僅僅是為了日志更好看些,再加上本能地也不想為一個簡單需求再增加依賴(Ninja),於是果斷選擇xcodebuild + 只是用於格式化輸出的xcpretty。

xcpretty非常簡單,安裝後作為管道使用:

   $ xcodebuild [flags] | xcpretty

 自動腳本打包

岔路走完,繼續回到主題。快使用xcodebuild,哼哼哈兮。要把工程打包IPA,攏共分幾步?兩步!

1、xcodebuild archive
2、xcodebuild -exportArchive -archivePath xcarchivepath -exportPath destinationpath -exportOptionsPlist path

嗑嗑,額,具體來講第一步呢,當然要根據實際情況加上-project, -configuration, -archivePath等參數,還可以搭配給力的xcpretty:

   xcodebuild archive -workspace /Path/To/Workspace/Demo.xcworkspace -scheme DemoScheme -configuration Release -archivePath /Path/To/Archive/Demo.xcarchive | xcpretty

第二條命令xcodebuild -exportArchive的-archivePath -exportPath ``-exportOptionsPlist三個選項很容易理解,其中-exportOptionsPlist替換了以前的-exportSigningIdentity -exportSigningIdentity等選項。這部分改動在官方文檔中還未更新,當然在man文檔中早有體現,-exportOptionsPlist要求指定一個plist文件作為配置文件,下面列舉幾個常用的key值:

   method : String
         Describes how Xcode should export the archive. Available options: app-store, ad-hoc, package, enterprise, development, and developer-id. The list of options varies based on the type of archive. Defaults to development.  
teamID : String
         The Developer Portal team to use for this export. Defaults to the team used to build the archive.

對應到具體的需求,我的plist裡就只指定了這兩個鍵值對,其中method選擇enterprise(其他發布方式對應選擇即可),teamID選擇對應值。這兩個選項也對應了在Xcode中手動arhive並導出包時要點選的兩個動作。

Xcode8中的設置

Xcode近年來致力於自動管理開發證書,每個大版本都會有修改(有方便的地方也有坑的地方)。到了Xcode8,在target的General設置面板中直接新增了“Signing”,看得出來,Automatically manage signing選項是蘋果推薦的簽名方式。如果恰巧不幸,你的證書裡的App ID與Xcode中的bundle ID不符(比如我的企業證書中的App ID帶有通配符),就應該關閉該選項,手動為某個configuration指定打包證書。不要忘記在-exportOptionsPlist指定的plist中配置對應的teamID,否則在xcodebuild -exportArchive時會報團隊不匹配的錯誤。

總結

  • 如果對編譯速度有較高要求,可以參考使用xcbuild;對於自動化測試工作,xctool有更好的支持;如果只是簡單的自動打包需求,官方的xcodebuild可以滿足,並且無需折騰也不用擔心失效,如果需要更直觀的輸出,可以搭配xcpretty。

  • Xcode8中根據實際情況打開或關閉Automatically manage signing

  • 自動打包是iOS開發中的一項基礎工作,作為自動化工作的一小部分往往被應用於CI系統。持續集成的內容很多,還有自動化測試、代碼靜態檢查、持續交付等內容。這篇文章概括了其中一些方面,並給出了實際工程方案。

文章寫了這麼多,其實只是說了很多人再熟悉不過的一條命令xcodebuild。在實際工作中,肯定會有更多的需求,比如我以前的腳本簡單地用Python檢查了項目中的一些配置項,如IP地址、插件的api key、BundleDisplayName(大廠也犯過錯噢)等,檢查通過後再打包。最後,如果文章有錯誤或纰漏,非常歡迎指出。


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved