web-dev-qa-db-ja.com

ワークスペースをXcodebuildし、カスタムビルドパスを設定する

ワークスペースで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のビルド設定リファレンスは2年間更新されていないため、適用できる新しいビルド設定があるかどうかはわかりません。

35
drekka

これが新しいオプションかどうかはわかりませんが、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

39
Nick Farina

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

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

私はJenkinsを使用しており、$WORKSPACEという名前の変数があります。 $WORKSPACE/buildCONFIGURATION_BUILD_DIRにすると、満足できるソリューションがあります。

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

19
Chilloutman

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

8
SFeng