Как заставить Travis CI создавать и тестировать проекты xcode, размещенные на Github?
У меня есть некоторый открытый исходный код, размещенный на github для добавления блочной категории в UITextField. Я добавил файл.travis.yml, чтобы заставить travis CI создавать и запускать код при каждом нажатии. Ссылка на предупреждение Travis CI. Он успешно строит проект. Предупреждение, которое я получаю при запуске скрипта.travis.yml:
WARNING: Using Objective-C testing without specifying a scheme and either
a workspace or a project is deprecated.
Пример проекта, который я хочу запустить, находится в папке /UITextView Blocks Example/ Как я могу добавить в файл.travis.yml для запуска этого проекта? Мой файл travis.yml теперь состоит из
language: objective-c
2 ответа
Обновление 2017
stone упоминает в комментариях:
Для тех, кто использует XCode 8 и выше:
xctool
больше не поддерживается и не работает.
Вместо этого используйте xcodebuild.
Оригинальный ответ (2013)
Вы можете проверить это руководство, которое объясняет:
xctool
является отличным выбором для запуска ваших тестов на сервере непрерывной интеграции, таком как Travis CI или Jenkins.
Чтобы запустить тесты в среде непрерывной интеграции, необходимо создать общие схемы для цели приложения и убедиться, что все зависимости (например, CocoaPods) явно добавлены в схему.
Для этого:
- Откройте лист "Управление схемами", выбрав меню "Продукт"> "Схемы"> "Управление схемами"...
- Найдите цель вашего приложения в списке. Убедитесь, что установлен флажок Общий в крайнем правом столбце листа.
- Если ваше приложение или цели тестирования включают межпроектные зависимости, такие как CocoaPods, то вам необходимо убедиться, что они были настроены как явные зависимости. Для этого:
- Выделите цель приложения и нажмите кнопку "Изменить...", чтобы открыть лист редактирования схемы.
- Перейдите на вкладку "Сборка" в левой панели редактора схем.
- Нажмите кнопку + и добавьте каждую зависимость в проект. CocoaPods появится в виде статической библиотеки с именем Pods.
- Перетащите зависимость над целью приложения, чтобы она была построена первой.
Теперь у вас будет новый файл в
xcshareddata/xcschemes
каталог под вашим проектом XCode.
Это общая схема, которую вы только что настроили.
Проверьте этот файл в своем хранилище, и xctool сможет найти и выполнить ваши тесты при следующей сборке CI.Для большей гибкости вы также можете контролировать, как Travis устанавливает и вызывает xctool:
language: objective-c
before_install:
- brew update
- brew install xctool
script: xctool -workspace MyApp.xcworkspace -scheme MyApp test
Эта последняя конфигурация похожа на подход, проиллюстрированный в этом другом уроке:
После того, как вы связали репо, следующим шагом будет добавление
.travis.yml
файл в корень репо.
language: objective-c
before_script: travis/before_script.sh
script: travis/script.sh
- Сначала я говорю Трэвису, что это объективный проект.
- Затем я рассказываю Трэвису, как я хотел бы, чтобы он выполнял CI против этого репо, давая ему инструкции о том, какие скрипты он должен запускать для фактического выполнения сборки.
Я также даю некоторые дополнительные инструкции о том, что нужно сделать непосредственно перед запуском сборки.
Весьма распространено помещать все этапы сборки прямо в файл.travis.yml, но я предпочитаю создавать сценарии bash в моем репо в каталоге travis в моем репозитории git, а затем просто ссылаться на эти сценарии из моего репозитория..travis.yml
,
Это держит.yml
файл хороший и маленький, а также облегчает мне тестирование сценариев сборки travis локально.Мы дали Трэвису
before_script
в.yml
файл выше. Он предназначен для использования агентом Travis для загрузки инструментов, необходимых для сборки. Вот как это выглядит:
travis/before_script.sh
#!/bin/sh
set -e
brew update
brew install xctool
Очень просто. Мы просто используем homebrew для установки
xctool
на агенте сборки.
Все агенты по сборке Travis идут сhomebrew
предустановлен, но иногда формула не обновляется, поэтому лучше запуститьbrew update
прежде чем пытатьсяbrew install
,
Это все, что нам нужно сделать, чтобы подготовить нашего агента к сборке.Теперь давайте посмотрим на сам скрипт сборки:
travis/script.sh
#!/bin/sh
set -e
xctool -workspace MyWorkspace -scheme MyScheme build test
Опять же, это действительно просто.
Сначала мы проводим базовую проверку работоспособности, спрашиваяxctool
построить наше приложение, указав рабочее пространство и схему.
Это просто проверяет, что у нас нет ошибок компиляции.
Предполагая, что это успешноxctool
Затем создаст и запустит цель модульного тестирования для нашего приложения, при необходимости запустив Симулятор на агенте Travis.
Когда вы указываете язык Objective-C в .travis.yml
файл CI-сервер по умолчанию будет использовать свою адаптированную версиюosx-cibuild.sh
, Это будет искать любые рабочие пространства в текущем каталоге и строить все цели по умолчанию.
Поскольку в вашем репо нет рабочих областей в корне (они находятся под Examples
), он не может найти, что построить, и поэтому не будет ничего строить.
Вы можете переместить файл проекта из-под Examples
в корень, или указать, что собирать, установив XCWORKSPACE
в вашей конфигурации Travis CI, или вы можете указать собственный скрипт для запуска, а затем вызвать xcodebuild
сам. Настройка конфигурации рабочей области, вероятно, является предпочтительным вариантом; не настраивайте это, если вам не нужно.
Добавьте что-то вроде следующего к вашему .travis.yml
:
env:
- XCWORKSPACE="Examples/UITextField-Blocks Example.xcodeproj"
(Кавычки там из-за имени файла, имеющего внутренний пробел.)
Стоит изучить osx-cibuild.sh
скрипт, чтобы увидеть, как он работает, и как вы можете настроить его поведение, устанавливая различные переменные среды.
Полезные ссылки: