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

Сгенерировать файл .xcscheme из командной строки

Я работаю на сервере непрерывной интеграции моей компании, и процесс сборки не работает, потому что сервер не имеет доступа к схемам в проекте xcode.

В основном, они используют Cmake для генерации проектов xcode "на лету" для использования в одной сборке, а затем отбрасываются до следующей проверки.

Мои исследования показывают, что эта проблема будет исправлена, если есть файл .xcscheme с файлом .xcodeproj, но по разным причинам, которые не могут быть сгенерированы и проверены заблаговременно.

Есть ли способ сгенерировать этот файл с помощью xcodebuild или другого инструмента командной строки, чтобы мы могли работать в существующих скриптах оболочки сборки?

Документация xcodebuild, google и S.O. на удивление не хватает этой темы.

4b9b3361

Ответ 1

Я действительно смог сделать это, используя cmake для создания проекта, а затем с помощью xcode gui, чтобы сделать файлы схемы мне нужными. Я использовал терминал для извлечения файлов xcscheme из проекта и помещал их в другой каталог, отслеживаемый с помощью элемента управления источником. В рамках процесса генерации я просто добавил немного оболочки script, чтобы скопировать копии, которые я сделал ранее, в вновь созданный проект, а затем продолжить процесс сборки как обычно.

Ответ 2

Я создаю проект XCode с помощью -G Xcode; Я использую плагин scan-build (http://blog.manbolo.com/2014/04/15/automated-static-code-analysis-with-xcode-5.1-and-jenkins) в jenkins. Для этого требуются файлы рабочей области. Мой script для запуска и просмотра xcode выглядит следующим образом: ($ WORKSPACE устанавливается дженкинсом)

#!/bin/bash

/Applications/Xcode.app/Contents/MacOS/Xcode "${WORKSPACE}/Build/arangodb.xcodeproj" &
XCODE_PID=$!

# now we wait for xcode to build the workspace:
WAIT_FOR_XCODE=0
while test ${WAIT_FOR_XCODE} -lt 6; do
    WAIT_FOR_XCODE=`find "${WORKSPACE}/Build/arangodb.xcodeproj" |wc -l`
    sleep 2
    COUNT=`ps -p ${XCODE_PID} |wc -l`
    if test ${COUNT} -lt 2; then 
        echo "XCode went away unexpectedly!"
        exit -1
    fi
done

#ok, we believe its done. kill it, and wait until its realy dead.
kill ${XCODE_PID}
COUNT=2;
while test ${COUNT} -gt 1; do 
    sleep 1
    COUNT=`ps -p ${XCODE_PID} |wc -l`
done

Ответ 3

К сожалению, с Xcode 5.1.1 не существует механизма автоматического генерации схем сборки .xcodeproj или .xcworkspace из командной строки, как это делает пользовательский интерфейс Xcode. Хорошей новостью является то, что разметка pcxproj проекта Xcode на порядок сложнее, чем разметка XML, описывающая схему сборки. Если вам удалось заставить CMake развернуть хорошо сформированный проект Xcode on-commit, то, используя очень похожую процедуру, вы можете построить 100 или около того строк XML, которые описывают архив build-run-test-profile-archive действия этого проекта Xcode.

Если вы не заглянули в основную структуру XML схемы, создайте образец проекта iOS от новых мастеров проекта, а затем перейдете к содержимому файла .xcodeproj или .xcworkspace для файлов .xcscheme. Структура довольно самодокументирована, и вы даже можете уйти без фактического указания разметки XML для тех действий, которые вы знаете, которые не будут выполняться на CI.

В противном случае менее надежный подход состоял бы в том, чтобы открыть файл проекта/файла рабочей области Xcode по завершении процесса сборки CMake. Через несколько секунд индексатор Xcode успеет идентифицировать проекты и автоматически генерировать схемы для проектов в самом файле главного проекта. Очевидно, что, поскольку вы полагаетесь на операцию на уровне UI в этом подходе, вы подчиняетесь прихотям Xcode, и индектору может потребоваться более нескольких секунд для создания своего индекса (например, более крупные проекты занимают больше времени, чтобы автоматически генерировать схемы!)... и не существует триггеров, предупреждающих процессы командной строки, что индексирование и генерация преуспели или не удались. Вам придется опросить наличие файла с соответствующим тайм-аутом, который может стать немного рискованным в автоматизированной сборке и тестовой среде.

Ответ 4

Последняя версия cmake добавила эту функцию:

https://blog.kitware.com/cmake-3-9-0-rc3-is-now-ready-for-testing/

Генератор "Xcode" научился создавать файлы схемы Xcode. Эта   является экспериментальной функцией и может быть активирована путем установки    "CMAKE_XCODE_GENERATE_SCHEME" значение "TRUE".