Создание сервера CI для сборки всех целевых объектов XCode как .ipa

#xcode #jenkins #continuous-integration #teamcity #xcrun

#xcode #дженкинс #непрерывная интеграция #teamcity #xcrun

Вопрос:

Я изучаю TeamCity и Дженкинс для сервера CI.

Моя цель такова: каждый раз, когда кто-то вносит изменения в наше репозиторий, сервер CI создает все целевые объекты в проекте как .ipa — готовые для загрузки / установки на устройство.

Я запустил Teamcity и Дженкинс, используя Mac mini в качестве подчиненного устройства для сборки. Эта часть работает нормально.

Используя плагин Jenkins XCode, мне удалось создать все целевые объекты как .ipa. Мне не повезло с Teamcity. Плагин XCode не позволяет создавать все целевые объекты. Скорее, вы должны указать, какие целевые объекты вы хотите построить, в каждой конфигурации сборки. Я обратился к создателям Teamcity, и они дали мне какой-то сложный метод, включающий мета-раннеры и множество дублирований, для достижения моей цели.

Вместо того, чтобы полагаться на плагины, я бы предпочел создавать .ipa с использованием сценариев оболочки. Однако, поскольку я не скриптовый ниндзя, я не могу понять, как это сделать.

Я могу понять, как создать одну цель с помощью сценариев, но мне непонятно, как заставить ее создавать их все. Каждый раз, когда я создаю новую цель в проекте, я не хочу добавлять ее на сервер CI. Сервер должен иметь возможность автоматически создавать все целевые объекты в проекте.

… Может быть, у кого-то есть лучшее решение? Любая помощь очень ценится.

Ответ №1:

Что вам следует делать (коды представляют собой фрагменты сценария bash, готовые к запуску в OS X, вам не нужно устанавливать ничего, кроме инструментов командной строки Xcode):

  • если вы хотите сделать это для каждого файла проекта Xcode, который у вас есть в вашем репозитории, вам следует сначала выполнить поиск по ним (если у вас есть конкретный проект Xcode, вы можете пропустить это)

     for path in $(find . -type d -name '*.xcodeproj' -or -name '*.xcworkspace')
      

    сделать

  • после этого вы можете запросить все общие (!) схемы с помощью инструмента командной строки Xcode

     if [[ "$project" == *".xcodeproj" ]]; then
      xcodebuild_output=($(xcodebuild -list -project "$project"))
    else
      xcodebuild_output=($(xcodebuild -list -workspace "$project"))
    fi
      
  • теперь у вас есть все схемы, так что вы можете просто xcodebuild их один за другим

Вот скрипт bash, который мы разработали для поиска каждого проекта Xcode и каждой конфигурации схемы в репозитории: https://github.com/concretebuilder/steps-cocapods-and-repository-validator/blob/master/find_schemes.sh

Примечание: вам нужно пометить свои схемы как общие, чтобы xcodebuild (интерфейс командной строки Xcode) перечислил их.