Xcode / iOS: модульные тесты, схемы и конфигурации

Мой проект iOS имеет пять схем: локальное развитие, интеграция, качество, демонстрация и производство. Каждая схема использует различную конфигурацию для управления такими вещами, как частота опроса сети, конечные точки API, аналитика и т. Д.

Аналогично, у нас есть пять соответствующих целей: локальное развитие, интеграция, качество, демонстрация и производство. Каждая цель имеет несколько пользовательских настроек сборки, которые содержат ключи API, числовые значения для синхронизации и т. Д.

В файле Info.plist нашего приложения используются переменные приложения, такие как ${SOME_ENDPOINT_URL} для рисования соответствующих пользовательских настроек сборки.

Чтобы получить переменные, я делаю что-то вроде следующего:

 [[[NSBundle mainBundle] infoDictionary] valueForKey:@"Some Endpoint URL"] 

Это соответствует пользовательской настройке сборки, например:

 "Some Endpoint URL" = ${SOME_ENDPOINT_URL} 

Теперь я смотрю, как правильно настроить проект для выполнения модульных и логических тестов.

Чтобы построить тесты, чтобы определить, правильно ли настроены среды, я не уверен, что такое лучшая практика.

  • Правильно ли создавать пять дополнительных целевых показателей для каждой среды?
  • Или лучше переопределить параметр «Запустить действие» для тестового компонента для каждой схемы и предоставить что-то вроде аргумента, чтобы указать, на какой схеме мы смотрим?
  • Существуют ли какие-либо существующие ссылки для настройки модульных и логических тестов для проектов iOS с несколькими средами? Сложность этого проекта, по-видимому, превышает объем большинства документов.

Вот что я делаю.

Info.plist

  • Создайте главный файл Info.plist
  • Напишите сценарий запуска (Shell Script) для каждой схемы для создания Info.plist, зависящего от среды, путем изменения настроек в master Info.plist (используйте PlistBuddy -c)
  • Добавьте сценарий запуска для построения фаз (выше «Скомпилировать источники»)

файл .h

  • Определите параметры конфигурации в файле .h (например, config.h)

     #if defined (CONFIG_FILE) #import CONFIG_FILE #endif 
  • Импортируйте config.h в свой код.

  • Используйте макросы предварительного процессора для каждой схемы, чтобы выбрать целевой файл .h.

     -DCONFIG_FILE=local-env-config.h 
Interesting Posts

StackView isHidden атрибут не обновляется, как ожидалось

Рисование линии с тенью, но нужно только сохранить тень. IOS

Использование класса Swift в Objective c. Необъявленная ошибка идентификатора ocurs

Стратегия тестирования API-интерфейса Dropbox iOS

Apple просит iPad скриншот (в iTunes Connect) на iPhone приложение?

Pod install, зависимость `*****` не используется в какой-либо конкретной цели

Передача NSString, возвращающая значение null в следующем ViewController

iOS – Идентификатор UIBarButtonItem – возможность создания кнопки «настройки» cogwheel

Использование неразрешенных идентификаторов countElements

stringByReplacingOccurrencesOfString не дает мне желаемого результата

NSLocaleUsesMetricSystem всегда ДА на iPad

Подписание этапа продукта при создании приложения в xCode 6 занимает слишком много времени

Как изменить DisplayName приложения iOS?

Использование $ (BUILT_PRODUCTS_DIR) в пути поиска заголовка пользователя

Не установлен BUILT_PRODUCTS_DIR.

Давайте будем гением компьютера.