Подтвердить что ты не робот

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 не обновляется в течение двух лет, поэтому я не знаю, есть ли новые настройки сборки, которые я могу применить.

4b9b3361

Ответ 1

Я не уверен, что это новый вариант, но в версии 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

Ответ 2

Лучшим решением, которое я нашел до сих пор, является использование параметра CONFIGURATION_BUILD_DIR с помощью пути ABSOLUTE (например,/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 у меня есть решение, которым я доволен.

Относительные пути не работают должным образом. Мы должны представить отчет об ошибке.

Ответ 3

Я также встретил эту проблему, когда создаю свой проект из инструмента 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 с абсолютными путями.

Ответ 4

У меня была аналогичная проблема, и она работала локально, но не на машине сборки. Оказалось, что я забыл инициализировать подмодуль git на машине сборки. Надеюсь, это поможет кому-то.