介紹
xcodebuild 是蘋(píng)果發(fā)布自動(dòng)構(gòu)建的工具无牵。一般持續(xù)集成的時(shí)候都需要用到它夜只。可以在終端輸入man xcodebuild
查看用法及介紹蒜魄。也可以在官方文檔中查看扔亥,官方文檔可能會(huì)更新不及時(shí),我用到的就好幾個(gè)跟終端中輸出的解釋不一樣谈为。
在介紹中可以看到旅挤,xcodebuild
主要就是用來(lái)構(gòu)建projects
和workspaces
的:
xcodebuild -- build Xcode projects and workspaces
相關(guān)路徑說(shuō)明
基礎(chǔ)路徑
xcode設(shè)置的基礎(chǔ)路徑是:
/Users/username/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf
這個(gè)路徑可以在Xcode->Preferences->Locations
里設(shè)置。
下面用$()代替上面一長(zhǎng)串東東
$(SYMROOT) = $()/Build/Products
$(BUILD_DIR) = $()/Build/Products
$(BUILD_ROOT) = $()/Build/Products
在此目錄下沒(méi)一個(gè)配置或者模擬器真機(jī)都會(huì)有一個(gè)目錄伞鲫,比如
$()/Build/Products/Debug-iphonesimulator
$()/Build/Products/Release-iphonesimulator
$()/Build/Products/Debug-iphoneos
$()/Build/Products/Release-iphoneos
路徑介紹
我們能在xcodebuild的相關(guān)action說(shuō)明里看到這些路徑:SYMROOT
粘茄、DSTROOT
、SRCROOT
秕脓。
-
SYMROOT(Build Products Path)
:
debug版本編譯結(jié)果路徑柒瓣,默認(rèn)是在
/Users/username/Library/Developer/Xcode/DerivedData/tragetname-******/Build/Products
例子:
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest SYMROOT="/Users/username/Desktop"運(yùn)行以上例子之后就會(huì)在桌面上生成一個(gè)文件夾
Debug-iphoneos
,里面會(huì)有每一個(gè)pod對(duì)應(yīng)的編譯結(jié)果和此工程scheme的DemoTest.app
文件和DemoTest.app.dSYM
或者可以指定對(duì)應(yīng)的配置configuration:
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest SYMROOT="/Users/username/Desktop" -configuration ${CONFIGURATION}基本上默認(rèn)的配置是為Debug或Release吠架,有時(shí)候我們會(huì)自己添加一些配置芙贫,比如Dev,Publish之類(lèi)的傍药。那么最后桌面生成的文件夾就是
Dev-iphoneos
或者Publish-iphoneos
了
DSTROOT
全稱(chēng)
distribution root
, 表示archive的可安裝文件路徑磺平。默認(rèn)路徑為/tmp/$(PROJECT_NAME).dst
。只有當(dāng)build setting->$DEPLOYMENT_LOCATION
設(shè)置為YES的時(shí)候才會(huì)出現(xiàn)拐辽。當(dāng)為YES時(shí)$(DSTROOT)
和$(SYMROOT)
都會(huì)有DemoTest.app
拣挪,而$(SYMROOT)
里的即為$(DSTROOT)
里的替身版本。例子:
xcodebuild install -workspace Demo.xcworkspace -scheme DemoTest DSTROOT="/Users/username/Desktop"
或
xcodebuild -workspace Demo.xcworkspace -scheme DemoTest DSTROOT="/Users/username/Desktop" archive運(yùn)行以上例子之后就會(huì)在桌面上生成一個(gè)文件夾
Applications
俱诸,里面就是對(duì)應(yīng)的可安裝文件DemoTest.app
SRCROOT
即當(dāng)前工程所在的目錄
相關(guān)命令說(shuō)明
參數(shù) | 值 | 說(shuō)明 |
---|---|---|
-project | name.xcodeproj | 在當(dāng)前目錄下有多個(gè)項(xiàng)目時(shí)需要指定 |
-target | targetname | 如果不指定的話(huà)默認(rèn)會(huì)構(gòu)建第一個(gè)target |
-alltargets | 無(wú) | 表示同時(shí)構(gòu)建所有的target |
-workspace | name.xcworkspace | 構(gòu)建workspace菠劝, 需要指定scheme |
-scheme | schemename | 指定對(duì)應(yīng)的scheme,當(dāng)構(gòu)建workspace時(shí)是必選項(xiàng) |
-destination | destinationspecifier | 通過(guò)描述使用對(duì)應(yīng)的設(shè)備,默認(rèn)使用當(dāng)前scheme所匹配的設(shè)備 |
-destination-timeout | timeout | 搜索對(duì)應(yīng)設(shè)備時(shí)需要時(shí)間乙埃,可以設(shè)置搜索超時(shí)時(shí)間闸英,默認(rèn)為30s |
-configuration | configurationname | 使用對(duì)應(yīng)的配置進(jìn)行構(gòu)建,configurationname一般為Debug和Release |
-arch | architecture | 指定構(gòu)建的包所支持的指令集:arm64 armv7 armv7s
|
-sdk | sdkfullpath sdkname | 針對(duì)指定的SDK選擇適合的構(gòu)建工具構(gòu)建介袜。如-sdk iphoneos
|
-showsdks | 無(wú) | 列出所有的SDK甫何,一般列出的后面都會(huì)跟上版本號(hào),-sdk 不寫(xiě)版本號(hào)的話(huà)默認(rèn)就是所有版本 |
-list | 無(wú) | 列出當(dāng)前項(xiàng)目所有的Targets遇伞、Build Configurations辙喂、Schemes
|
-derivedDataPath | path | 構(gòu)建成功時(shí)相關(guān)的緩存文件路徑,默認(rèn)為/Users/dasheng/Library/Developer/Xcode/DerivedData 執(zhí)行xcodebuild -scheme schemeName archive build 時(shí)才會(huì)有相關(guān)緩存 |
-archivePath | xcarchivepath | 設(shè)置導(dǎo)出的.xcarchive 文件的路徑 |
Action
參數(shù) | 說(shuō)明 |
---|---|
build | 構(gòu)建target,當(dāng)沒(méi)有其他action指定時(shí)巍耗,這是xcodebuild默認(rèn)的一個(gè)action |
build-for-testing | 構(gòu)建target和對(duì)應(yīng)的相關(guān)單元測(cè)試秋麸,需要指定scheme |
analyze | 構(gòu)建和分析target或scheme,需要指定scheme |
archive | 存檔對(duì)應(yīng)的構(gòu)建scheme炬太,需要指定scheme |
test | 從SYMROOT目錄測(cè)試scheme灸蟆,需要指定scheme和可選的destination |
install | 構(gòu)建target然后安裝到target的安裝目錄的發(fā)布目錄(DSTROOT) |
clean | 從構(gòu)建目錄(SYMROOT)刪除構(gòu)建的products和一些中間文件 |
-destination
表示給特定的設(shè)備進(jìn)行構(gòu)建,使用:-destination destinationspecifier
亲族,destinationspecifier表示對(duì)應(yīng)設(shè)備的描述炒考,例子如下所示:
xcodebuild -destination "platform=iOS Simulator,id=36EB495C-4C6E-4233-A555-EF2B3866D470"
描述根據(jù)key=value的方式并用逗號(hào)進(jìn)行分割,key包括platform
霎迫、id
斋枢、name
、OS
知给。
相關(guān)設(shè)置的值可以通過(guò)終端執(zhí)行instruments -s
命令得到瓤帚。
-showBuildSettings
顯示當(dāng)前所有的BuildSettings的配置
xcodebuild -showBuildSettings
參考
apple documentation xcodebuild
iOS 自動(dòng)構(gòu)建命令——xcodebuild
環(huán)境變量路徑相關(guān)
buildsettings
Xcode Build Settings - Products Path