Как заставить 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) явно добавлены в схему.
Для этого:

  1. Откройте лист "Управление схемами", выбрав меню "Продукт"> "Схемы"> "Управление схемами"...
  2. Найдите цель вашего приложения в списке. Убедитесь, что установлен флажок Общий в крайнем правом столбце листа.
  3. Если ваше приложение или цели тестирования включают межпроектные зависимости, такие как 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 скрипт, чтобы увидеть, как он работает, и как вы можете настроить его поведение, устанавливая различные переменные среды.

Полезные ссылки:

Другие вопросы по тегам