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 с абсолютными путями.