iOS CI(持續(xù)集成)之Xcodebuild命令

前言:

今天認(rèn)真研究了一下Jenkins持續(xù)集成iOS項(xiàng)目(我會再找時間單獨(dú)總結(jié)這部分內(nèi)容)入宦,那就不得不提一下Xcodebuild命令蝗蛙,當(dāng)然今天的重點(diǎn)就是這個啦煌抒。

正文:

平時我們打包ipa文件,一般都是通過GUI操作進(jìn)行霍掺,大家覺得很簡單侈百,但作為會偷懶的程序猿滨彻,我們當(dāng)然采用更加簡單的方式了鸳谜。就是通過執(zhí)行簡單的命令前塔,靜靜的等待整個過程完成嚣艇。那xcodebuild 這個命令就是來完成這個事情的。
目前已經(jīng)有不少封裝得很不錯的第三方打包服務(wù)可以用华弓,比如最出名的有 AFNetworking 的作者 mattt 大大的 shenzhen (沒錯食零,就是深圳),還有一個名叫 gym 也很不錯寂屏。這些庫都是對 xcodebuild 這個命令做了一些封裝贰谣,更方便使用而已。

什么是xcodebuild迁霎?

xcodebuild 命令是 Xcode Command Line Tools 的一部分吱抚。通過調(diào)用這個命令,可以完成 iOS 工程的編譯考廉,打包和簽名過程秘豹。這個命令隨著 Xcode 的版本不同使用方法上也會有所不同。打開命令行芝此,調(diào)用以下命令查看使用方法:

xcodebuild --help
xcodebuild-help.png

上面截圖中顯示了命令執(zhí)行結(jié)果憋肖。

語法:

在shell里面 [ ]表示這個參數(shù)是可選的,< > 表示參數(shù)是必須的婚苹。
如:

xcodebuild [-project name.xcodeproj] -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]
  • -project 你的項(xiàng)目名字岸更,該項(xiàng)目會負(fù)責(zé)管理生成一個或者多個軟件產(chǎn)品的全部文件和配置,一個Project可以包含多個Target膊升。
  • Workspace:簡單來說怎炊,Workspace就是一個容器,在該容器中可以存放多個你創(chuàng)建的Xcode Project廓译, 以及其他的項(xiàng)目中需要使用到的文件评肆。使用Workspace的好處有:
  1. 擴(kuò)展項(xiàng)目的可視域,即可以在多個項(xiàng)目之間跳轉(zhuǎn)非区,重構(gòu)瓜挽,一個項(xiàng)目可以使用另一個項(xiàng)目的輸出。Workspace會負(fù)責(zé)各個Project之間提供各種相互依賴的關(guān)系;
  2. 多個項(xiàng)目之間共享Build目錄征绸。
  • -target 不過可以通過xcodebuild -list獲取
  • -configrtion 默認(rèn)就是Debug和Release這兩個版本久橙,沒有指定默認(rèn)為Release版本,也可以通過xcodebuild -list獲取
  • -sdk 這個可由 xcodebuild -showsdks得到管怠,一般都是默認(rèn)
  • Scheme:一個定義好構(gòu)建過程的Target成為一個Scheme淆衷。可在Scheme中定義的Target的構(gòu)建過程buildaction 有:Build/Run/Test/Profile/Analyze/Archive
  • BuildSetting:配置產(chǎn)品的Build設(shè)置渤弛,比方說祝拯,使用哪個Architectures?使用哪個版本的SDK她肯?佳头。在Xcode Project中,有Project級別的Build Setting辕宏,也有Target級別的Build Setting畜晰。Build一個產(chǎn)品時一定是針對某個Target的,因此瑞筐,XCode中總是優(yōu)先選擇Target的Build Setting凄鼻,如果Target沒有配置,則會使用Project的Build Setting聚假。

let's see see xcodebuild -list:

xcodebuild -list.png

這樣我們想要的Target有了块蚌,Schemes也有了,Configurations也有了膘格。

再來看看xcodebuild -showsdks:

xcodebuild -showsdks.png

用下面這個命令查看項(xiàng)目配置:

xcodebuild -target <target> -configuration <configuration> -showBuildSettings
showBuildSettings.png

那參數(shù)咱們也了解了峭范,下面開始構(gòu)建吧。

打包簽名:

首先進(jìn)入工程目錄瘪贱,執(zhí)行以下命令:

xcodebuild [-project name.xcodeproj] [[-target targetname] … | -alltargets] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

xcodebuild [-project name.xcodeproj] -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

參數(shù)說明:SchemeName 就是工程的 scheme 的名字纱控。
命令中可以添加一些參數(shù)實(shí)現(xiàn)在命令執(zhí)行時配置不同的環(huán)境辆毡。比如,如果想 archive 出 Debug 環(huán)境的包甜害,那么就可以在命令中添加 -configuration Debug 參數(shù)舶掖。對于非 workspace 的工程,還可以通過添加 PROVISIONING_PROFILE=的參數(shù)來指定簽名所用的 Profile 文件尔店,參數(shù)的值為 profile 文件的 UUID眨攘。

如果工程使用了 Cocoapods 來管理第三方庫或使用workspace,那么命令的執(zhí)行方式上有所不同嚣州,因?yàn)?Cocoapods 會把工程變成一個 workspace鲫售。將 workspace 工程 archive 的命令如下。

xcodebuild -workspace name.xcworkspace -scheme schemename [[-destination destinationspecifier] …] [-destination-timeout value] [-configuration configurationname] [-sdk [sdkfullpath | sdkname]] [action …] [buildsetting=value …] [-userdefault=value …]

workspacename跟schemename必須要指定该肴。
例如我的項(xiàng)目:

xcodebuild -workspace RRTuiGuang.xcworkspace -scheme RRTuiGuang -configuration Release

如果 build 成功情竹,會看到 ** BUILD SUCCEEDED ** 字樣,且在終端會打印出這次 build 的簽名信息沙庐,如下:

Signing Identity: “iPhone Developer: xxx(xxxxxx)”
Provisioning Profile: “iOS Team Provisioning Profile: xxx"

該目錄下會多出一個 build 文件夾鲤妥,該目錄下有 Release-iphoneos 和 工程名.build 文件,根據(jù)我們 build -configuration 配置的參數(shù)不同拱雏,Release-iphoneos 的文件名會不同棉安。在 Release-iphoneos 文件夾下,有我們需要的xxx.app文件铸抑,這樣第一步就完成了贡耽,但是要安裝到真機(jī)上,我們需要將該文件導(dǎo)出為ipa文件鹊汛,使用 xcrun 命令蒲赂。
PackageApplication新版Xcode不兼容被廢棄

xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/xxx.app -o ~/Desktop/xxx.ipa
xcodebuild archive工程

上面的方法被棄用,相當(dāng)惡心啊刁憋。所以我們還有從頭來過滥嘴,(不要打我)不過下面會介紹最新的打包方式,兩句話:

1.生成archive包

// 使用pod管理第三方  
xcodebuild archive -workspace 項(xiàng)目名稱.xcworkspace -scheme 項(xiàng)目名稱 -configuration Release -archivePath archive包存儲路徑 CODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID  
// 未使用pod管理第三方  
xcodebuild archive -project 項(xiàng)目名稱.xcodeproj -scheme 項(xiàng)目名稱 -configuration Release -archivePath archive包存儲路徑 CODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID 

如果項(xiàng)目工程里已經(jīng)設(shè)置CODE_SIGN_IDENTITY證書和PROVISIONING_PROFILE描述文件至耻,在這里就不需要添加了若皱。
2.生成ipa包

xcodebuild -exportArchive -exportFormat ipa文件格式 -archivePath archive包存儲路徑 -exportPath ipa包存儲路徑  -exportProvisioningProfile 描述文件名稱,同上尘颓,在這里就不需要添加了走触。

如果exportProvisioningProfile描述文件已經(jīng)設(shè)置,

  • -archivePath:archive包保存目錄疤苹;
  • CODE_SIGN_IDENTITY:證書(證書名稱)
  • PROVISIONING_PROFILE:描述文件UUID
  • -exportProvisioningProfile:描述文件(描述文件名稱)
    大功告成互广!之后我會總結(jié)一下,jekens+svn和xctool
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惫皱,隨后出現(xiàn)的幾起案子像樊,更是在濱河造成了極大的恐慌,老刑警劉巖旅敷,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凶硅,死亡現(xiàn)場離奇詭異,居然都是意外死亡扫皱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門捷绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韩脑,“玉大人,你說我怎么就攤上這事粹污《味啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵壮吩,是天一觀的道長进苍。 經(jīng)常有香客問我,道長鸭叙,這世上最難降的妖魔是什么觉啊? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沈贝,結(jié)果婚禮上杠人,老公的妹妹穿的比我還像新娘。我一直安慰自己宋下,他們只是感情好嗡善,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著学歧,像睡著了一般罩引。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枝笨,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天袁铐,我揣著相機(jī)與錄音,去河邊找鬼伺帘。 笑死昭躺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伪嫁。 我是一名探鬼主播领炫,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼张咳!你這毒婦竟也來了帝洪?” 一聲冷哼從身側(cè)響起似舵,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葱峡,沒想到半個月后砚哗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砰奕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年蛛芥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片军援。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡仅淑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胸哥,到底是詐尸還是另有隱情涯竟,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布空厌,位于F島的核電站庐船,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘲更。R本人自食惡果不足惜筐钟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赋朦。 院中可真熱鬧盗棵,春花似錦、人聲如沸北发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琳拨。三九已至瞭恰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狱庇,已是汗流浹背惊畏。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留密任,地道東北人颜启。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像浪讳,于是被迫代替她去往敵國和親缰盏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容