2012-08-15 15 views
26

xcodebuildを使用して、ワークスペースでマルチプロジェクトプロジェクトを構築しようとしています。 XCodeがワークスペースを作成すると、すべてのビルド成果物がDerivedDataの共通ディレクトリに自動的に配置され、各プロジェクトはその依存関係にアクセスできます。Xcodeをビルドしてカスタムビルドパスを設定する

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

Eveythingは動作しますが、成果物は通常の派生データディレクトリに置かれています。私は、このコマンドを使用する場合

。私はCIビルドからアクセスできる特定のディレクトリに表示したい。だから私はしかし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 -workspace myWorkspace.xcworkspace -schema builtIt -configuration Release SYMROOT=build/products OBJROOT=build/intermediates 

を試したことxcodebuildがもはやワークスペース内のすべてのプロジェクトのための中央ディレクトリを使用しており、中に成果物を記憶していることがないように見えます代わりにそれぞれのプロジェクト。したがって、コンパイルされるコードと他のプロジェクトで生成される成果物との間の依存関係を特定することはできません。

誰でもコマンドラインで設定する正しいパラメータを知っていますか?

Xcodeのビルド設定リファレンスが2年間更新されていないため、私が適用できる新しいビルド設定があるかどうかわかりません。

答えて

32

私は、これは新しいオプションであるのかはわからないが、xcodebuildの5.0リリースは、あなたがすべてのビルド製品はに座ってしたいディレクトリを指定することを可能にするオプション-derivedDataPathを持っている。

例えば-derivedDataPath buildを渡すとxcodebuildをどこから実行したかに関連してbuildというフォルダが作成され、build/Build/Products/Release-iphoneosのようなサブフォルダ内にアプリケーションがあると予想されます。

ドキュメント:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

+0

XCode 5がコマンドラインビルドをはるかに上手く処理するため、これを受け入れられた答えとして設定します。 – drekka

+1

私は、私が見ていたランダムな問題を固定したたくさんの私のビルド-derivedDataPathのために、CONFIGURATION_BUILD_DIR = "$ WORKSPACE/Build" OBJROOT = "$ WORKSPACE/Build" SYMROOT = $ WORKSPACE/Build DSTROOT = $ WORKSPACE/Build-Destinationを使用していました。 – StackRunner

18

私が今までに見つけた最良の解決策は、アブソリュートパス(例:/ tmp/$ PROJECT/build)にCONFIGURATION_BUILD_DIRパラメータを使用することです。このように:

私はJenkinsを使用しており、そこには変数$WORKSPACEがあります。 $WORKSPACE/buildと私のCONFIGURATION_BUILD_DIRには私が満足している解決策があります。

相対パスが期待どおりに機能していないようです。バグレポートを提出するべきです。

+1

私は同じことを発見しました。 BUILD_DIRまたはCONFIGURATION_BUILD_DIRを相対パスで設定すると、メインプロジェクトでは機能しますが、サブプロジェクトは間違った場所に移動します。絶対パスを使用することでこれが解決されます。先端に感謝します。 – Stew

+0

あなたは私のヒーローです! – David

5

Jenkins CIツールからプロジェクトをビルドするときにもこの問題が発生しました。私のメインプロジェクトはサブプロジェクトに依存します。私は建物が、このようなChilloutmanのソリューション@従って試してみました:それらの両方がエラーCould not find iphoneos in /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 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 

しかし、私は最終的にこの成功を使用します:

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を他のBUILD_DIRまたはCONFIGURATION_BUILD_DIR引数なしで使用する必要があることに気付くまで機能しませんでした)。マークされた正解は、Xcode 5の動作には適用されない可能性があります。 – Halle

-1

私は同様の問題を抱えていた、そしてそれは、ビルドマシン上でローカルにではなく、働いていました。私はビルドマシンでgitサブモジュールを初期化するのを忘れていました。これが誰かを助けることを望みます。

関連する問題