ワークスペースで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年間更新されていないため、適用できる新しいビルド設定があるかどうかはわかりません。
これが新しいオプションかどうかはわかりませんが、5.0リリースのxcodebuild
には-derivedDataPath
オプションがあり、すべてのビルド製品を配置するディレクトリを指定できます。
たとえば、-derivedDataPath build
を渡すと、build
を実行した場所に関連するフォルダーxcodebuild
が作成され、build/Build/Products/Release-iphoneos
のようなサブフォルダーでアプリを予想どおりに見つけることができます。
私がこれまでに見つけた最良の解決策は、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
にすると、満足できるソリューションがあります。
相対パスは期待どおりに機能しないようです。バグレポートを提出する必要があります。
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に絶対パスを設定します。