39

xcodebuildワークスペースでマルチプロジェクト プロジェクトをビルドするために使用しようとしています。XCode がワークスペースをビルドすると、すべてのビルド アーティファクトが DerivedData の共通ディレクトリに自動的に配置され、各プロジェクトがその依存関係にアクセスできるようになります。

このコマンドを使用する場合:

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

すべてが機能しますが、アーティファクトは通常の派生データ ディレクトリに配置されます。次に、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 の Build Setting Reference は 2 年間更新されていないため、適用できる新しいビルド設定があるかどうかわかりません。

4

3 に答える 3

52

これが新しいオプションかどうかはわかりませんが、 の 5.0 リリースには、すべてのビルド製品を配置するディレクトリを指定できるxcodebuildオプションがあります。-derivedDataPath

たとえば、渡すと、実行した場所に関連する-derivedDataPath buildフォルダーが作成され、アプリは予想どおり のようなサブフォルダーに配置されます。buildxcodebuildbuild/Build/Products/Release-iphoneos

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

于 2014-04-29T00:41:20.780 に答える
21

これまでに見つけた最善の解決策は、CONFIGURATION_BUILD_DIRパラメーターを絶対パス (/tmp/$PROJECT/build など) で使用することです。このような:

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

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

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

于 2012-09-04T07:58:02.627 に答える
9

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 を絶対パスで設定します。

于 2013-08-20T05:00:35.560 に答える