Xcode: макросы препроцессора для условного кода DEBUG/TEST

У меня есть разделы в моем коде (например, в AppDelegate.m), которые не должны компилироваться для Unit Tests, например

#ifndef CONFIGURATION_TESTS
// Code that should not be compiled in the Unit Tests
#endif

Цели настраиваются Xcode, когда вы выбираете 'add Unit Tests' при создании нового проекта. В файле проекта я добавил флаг CONFIGURATION_TESTS для макросов препроцессора для встроенного объекта MyAppTests, но не для MyApp Target.

Это был предложенный способ во многих сообщениях, которые я нашел.

Но это не сработает, потому что (я думаю) целевая точка MyAppTests имеет целевое назначение MyApp в качестве зависимости, и поскольку AppDelegate.m добавляется в целевой объект MyApp, он компилируется с настройками сборки MyApp и, следовательно, CONFIGURATION_TESTS не определен.

В файлах тестового теста макрос определен и работает как ожидалось (потому что тестовые файлы создаются только с помощью цели MyAppTests?)

Кто-нибудь знает, как это сделать, я думал, что это будет общей проблемой...

Ответ 1

Наконец-то я нашел ответ: ключом является создание новой конфигурации сборки (позволяет вызвать эту конфигурацию Тестирование)

Затем вы соответствующим образом настроите значения макроса препроцессора, поэтому для настройки Debug и Release вы устанавливаете CONFIGURATION_TESTS = 0 и для тестирования конфигурации вы устанавливаете CONFIGURATION_TESTS = 1

Наконец, вы редактируете схему Unit-Test, чтобы использовать Testing as build configuration. Что это: P

Я написал подробное пошаговое объяснение на моем blog

Ответ 2

Вам нужно установить "CONFIGURATION_TESTS = 1", а не только "CONFIGURATION_TESTS"