2012-08-15 36 views
26

我試圖使用xcodebuild在工作區中構建多項目項目。當XCode構建工作空間時,它會自動將所有構建工件放置在DerivedData的公共目錄中,以便每個項目都可以訪問它的依賴關係。Xcodebuild'ing工作區和設置自定義構建路徑

如果我使用這個命令:

xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release 

Eveything工作,但文物放置在平時得到的數據目錄。然後我想要出現在我可以從CI構建中訪問的特定目錄中。所以,我想這個

xcodebuild -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release SYMROOT=build/products OBJROOT=build/intermediates 

然而xcodebuild聯編失敗,這句話

Details: Failed to load dependencies output contents from ``/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d''. 
Error: Error Domain=NSCocoaErrorDomain Code=260 "The file 「DNRootSelector.d」 couldn’t be opened because there is no such file." 
UserInfo=0x4012fea40 {NSFilePath=/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d, NSUnderlyingError=0x4012fc240 "The operation couldn’t be completed. No such file or directory"}. 
User info: { 
    NSFilePath = "/Users/d4rkf1br3/projects/dNodi/build/intermediates/dNodi.build/Debug-iphoneos/dNodi.build/StaticAnalyzer/normal/armv7/DNRootSelector.d"; 
    NSUnderlyingError = "Error Domain=NSPOSIXErrorDomain Code=2 \"The operation couldn\U2019t be completed. No such file or directory\""; 
} 

這個問題似乎是xcodebuild聯編不再使用工作區中的所有項目的中央目錄中,存儲僞影改爲每個項目。因此它無法找到正在編譯的代碼和其他項目中產生的工件之間的依賴關係。

有誰知道在命令行上設置的正確參數?

Xcode的構建設置引用兩年沒有更新,所以我不知道是否有我可以應用的新構建設置。

回答

32

我不知道這是否是一個新的選擇,但是5.0版本的xcodebuild有一個選項-derivedDataPath它允許您指定您希望所有構建產品在坐的目錄。

例如,通過-derivedDataPath build創建文件夾build,相對於您從中運行xcodebuild的位置,您可以在build/Build/Products/Release-iphoneos這樣的子文件夾中找到您的應用程序。

文檔:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

+0

將此設置爲接受的答案,因爲XCode 5處理命令行構建要好得多。 – drekka 2014-04-30 01:11:42

+1

我正在使用CONFIGURATION_BUILD_DIR =「$ WORKSPACE/Build」OBJROOT =「$ WORKSPACE/Build」SYMROOT = $ WORKSPACE/Build DSTROOT = $ WORKSPACE/Build -destination for my builds -derivedDataPath修復了我所看到的大量隨機問題。 – StackRunner 2014-07-30 10:21:39

18

迄今爲止發現的最佳解決方案是使用帶有ABSOLUTE路徑的CONFIGURATION_BUILD_DIR參數(例如/ tmp/$ PROJECT/build)。像這樣:

xcodebuild -scheme "scheme" -configuration Debug -sdk iphoneos clean build CONFIGURATION_BUILD_DIR=$ABSOLUTE_BUILD_PATH 

我使用詹金斯,在那裏我有一個變量名爲$WORKSPACE$WORKSPACE/build作爲我的CONFIGURATION_BUILD_DIR我有一個我很滿意的解決方案。

相對路徑似乎沒有按預期工作。我們應該提交一個錯誤報告。

+1

我找到了同樣的東西。使用相對路徑設置BUILD_DIR或CONFIGURATION_BUILD_DIR適用於主項目,但子項目會出錯。使用絕對路徑解決了這個問題。謝謝你的提示。 – Stew 2012-09-18 05:55:17

+0

你是我的英雄! – David 2015-03-26 01:02:00

5

我在Jenkins CI工具中構建項目時也遇到了這個問題。我的主要項目取決於一個子項目。我試圖建立後續@ Chilloutman的解決方案是這樣的:

xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build BUILD_DIR =/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

xcodebuild -target TravelGuideMdd -sdk iphoneos -configuration DailyBuild clean build CONFIGURATION_BUILD_DIR=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

他們都出現錯誤Could not find iphoneos in /Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build

但我最後用此獲得成功:

xcodebuild -target TravelGuideMdd -sdk iphoneos6.1 -configuration DailyBuild clean build SYMROOT=/Users/mobileserver/jenkins_home/jobs/TravelGuide-Buid-For-Me/workspace/build 

即:用絕對路徑設置SYMROOT。

+1

非常感謝,這也爲我解決了這個問題(如果這不適用於其他人,我不能使它工作,直到我注意到在這個版本中,SYMROOT必須被使用_without_任何其他BUILD_DIR或CONFIGURATION_BUILD_DIR參數)。我認爲明顯的正確答案可能不適用於Xcode 5的行爲。 – Halle 2013-11-27 09:14:17

-1

我也有類似的問題,並在本地而不是工作在構建機上。原來我忘了在構建機器上初始化git子模塊。希望這可以幫助某人。