Как заставить Travis CI создавать и тестировать проекты xcode, размещенные на Github?

у меня есть открытый исходный код, размещенный на github для добавления категория на основе блока в UITextField. Я добавил .Трэвис.YML-файл, чтобы заставить travis CI создавать и запускать код при каждом нажатии. ссылка на предупреждение Travis CI . Он успешно строит проект. Предупреждение, которое я получаю при запуске .Трэвис.скрипт YML-это:

WARNING: Using Objective-C testing without specifying a scheme and either
a workspace or a project is deprecated.

пример проекта, который я хочу запустить, находится в Примере Folder / UITextView Blocks/ Как я могу добавить к .Трэвис.файл yml для запуска этого проекта? Мой Трэвис.файл YML теперь состоит из

language: objective-c

2 ответов


обновление 2017

skypecakes упоминает в комментариях:

при использовании XCode 8 и выше: xctool больше не поддерживается, и не работает.
Использовать xcodebuild.


оригинальный ответ (2013)

вы можете проверить в этом уроке, который объясняет:

xctool - отличный выбор для запуска тестов под непрерывным сервером интеграции, таким как Travis CI или Jenkins.
чтобы выполнить тесты в среде непрерывной интеграции, необходимо создать общие схемы для целевого приложения и убедиться, что все зависимости (например, CocoaPods) добавляются явно в схему.
Для этого:

  1. откройте лист управление схемами, выбрав продукт меню > схемы > схемы...
  2. Найдите цель приложения в списке. Убедитесь, что установлен флажок Общий в крайнем правом столбце листа.
  3. если ваше приложение или тестовые цели включают межпроектные зависимости, такие как CocoaPods, вам нужно будет убедиться, что они были настроены как явные зависимости. Так поступать:
    • выделите цель приложения и нажмите Редактировать... кнопка для открытия редактирования схемы лист.
    • перейдите на вкладку сборка в левой панели редактора схем.
    • Нажмите кнопку + и добавьте каждую зависимость в проект. CocoaPods будет отображаться как статическая библиотека с именем Pods.
    • перетащите зависимость выше цели приложения, чтобы она была построена первой.

теперь у вас будет новый файл в xcshareddata/xcschemes каталог под вашим проектом Xcode.
Это общая схема, которую вы только что настроили.
Проверьте этот файл в своем репозитории, и xctool сможет найти и выполнить ваши тесты на следующей сборке CI.

для большей гибкости вы также можете контролировать, как Трэвис устанавливает и вызывает 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
  • сначала я говорю Трэвису, что это проект objective-C.
  • затем я говорю Трэвису, как я хотел бы, чтобы он сделал CI против этого РЕПО, дав ему инструкции о том, какие скрипты он должен запускать, чтобы фактически выполнить сборку.

я также даю некоторые дополнительные инструкции о том, что делать непосредственно перед запуском строить.
довольно часто все шаги сборки встроены прямо в.Трэвис.YML-файл, но я предпочитаю создавать сценарии bash в моем РЕПО внутри каталога travis в моем РЕПО git, а затем просто ссылаться на эти сценарии из моего .travis.yml.
это .yml файл хороший и маленький, а также позволяет мне легко тестировать сценарии сборки travis локально.

мы дали Трэвисуbefore_script на выше. Это предназначен для использования агентом Travis для загрузки инструментов, необходимых как часть сборки. Вот как это выглядит:

travis/before_script.sh

#!/bin/sh
set -e

brew update
brew install xctool

очень удобно. Мы просто используем homebrew для установки xctool на агенте построения.
Все агенты travis build поставляются с 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 к root, или укажите, что строить, установив XCWORKSPACE в конфигурации Travis CI или вы можете указать пользовательский скрипт для запуска, а затем вызвать xcodebuild себя. Настройка конфигурации рабочей области, вероятно, является предпочтительным вариантом; не настраивайте его, если вам это не нужно.

добавить что-то вроде следующего в ваш .travis.yml:

env:
  - XCWORKSPACE="Examples/UITextField-Blocks Example.xcodeproj"

(кавычки существуют из-за имени файла, имеющего внутреннее пространство.)

стоит рассматривать osx-cibuild.sh скрипт, чтобы увидеть, как это работает, и как вы можете настроить его поведение, установив различные переменные среды.

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