前言:
今天認(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
上面截圖中顯示了命令執(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的好處有:
- 擴(kuò)展項(xiàng)目的可視域,即可以在多個項(xiàng)目之間跳轉(zhuǎn)非区,重構(gòu)瓜挽,一個項(xiàng)目可以使用另一個項(xiàng)目的輸出。Workspace會負(fù)責(zé)各個Project之間提供各種相互依賴的關(guān)系;
- 多個項(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
:
這樣我們想要的Target有了块蚌,Schemes也有了,Configurations也有了膘格。
再來看看xcodebuild -showsdks
:
用下面這個命令查看項(xiàng)目配置:
xcodebuild -target <target> -configuration <configuration> -showBuildSettings
那參數(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