Xcodebuild вычислить рабочее пространство и настройка пользовательского путь сборки
Я пытаюсь использовать xcodebuild
для создания многопроектного проекта в рабочей области. Когда XCode создает рабочую область, он автоматически помещает все артефакты сборки в общий каталог в DerivedData, чтобы каждый проект мог получить доступ к его зависимостям.
если я использую эту команду:
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 couldnU2019t be completed. No such file or directory"";
}
проблема заключается в том, что xcodebuild больше не использует Центральный каталог для всех проектов в рабочей области и вместо этого хранит артефакты в каждом проекте. Поэтому он не может найти зависимости между компилируемым кодом и артефактами, созданными в других проектах.
кто-нибудь знает правильный параметр для установки в командной строке?
сборка Xcode Ссылка на настройку не обновлялась в течение двух лет, поэтому я не знаю, есть ли новые настройки сборки, которые я могу применить.
3 ответов
Я не уверен, что это новый вариант, но выпуск 5.0 xcodebuild
имеет параметр -derivedDataPath
что позволяет указать каталог, в котором вы хотите разместить все продукты сборки.
например, передает -derivedDataPath build
создается папка build
относительно того, куда вы побежали xcodebuild
from, и вы можете найти свое приложение предсказуемо в подпапке, как build/Build/Products/Release-iphoneos
.
документация: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html
лучшее решение я нашел до сих пор является использование 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
У меня есть решение, я доволен.
относительные пути не работают, как ожидалось. Мы должны подать отчет об ошибке.
Я также встретил эту проблему, когда я строю свой проект из инструмента Jenkins CI. Мой основной проект зависит от подпроекта. Я попытался построить решение follow @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 с абсолютными путями.