Сценарий
Я не совсем уверен относительно подходящей терминологии для моего вопроса, поэтому позвольте мне попытаться объяснить сценарий. У меня есть приложение, которое использует несколько структур (которые я построил). У меня есть основная цель приложения, цель модульного теста и цель пользовательского интерфейса. Я хочу иметь отдельную цель, которая может быть запущена для автоматического бенчмаркинга. Эта новая цель будет целью тестирования пользовательского интерфейса и будет работать на физическом устройстве. Все каркасы, которые я использую, управляются из Карфагена.
Что я сделал
Для этого я создал новую цель с именем MyAppBenchmarkingTests и создал новую схему с тем же именем "MyAppBenchmarkingTests". У меня есть каркас журналирования, который принимает тип журнала и сообщение. Для бенчмаркинга я использую его так:
Logger.shared.log(.benchmark, "...")
Однако я хочу, чтобы информация о бенчмаркинге регистрировалась только в том случае, если текущим целевым объектом является «MyAppBenchmarkingTests». Чтобы сделать это, я хочу добавить следующий код в каркас логгера.
func allowLog(_ type: LogType) -> Bool {
if type == .benchmark {
#if BENCHMARK
return true
#else
return false
#endif
}
// logic for other log types
}
Проблема
Я не могу заставить #if BENCHMARK
работать внутри каркаса логирования. В «MyAppBenchmarkTests» я добавил Active Compilation Condition
с именем «BENCHMARK». Я также попытался добавить Other Swift Flags
с именами "-DBENCHMARK" и "-D BENCHMARK". Все три из них работают, чтобы сделать #if BENCHMARK
истинным, но это работает только в тестах пользовательского интерфейса внутри платформы MyAppBenchmarkTests. Мне нужно, чтобы этот флаг передавался не только к коду «MyAppBenchmarkTests», но также к исполняемому файлу и всем тестируемым средам. Есть ли способ сделать это? 1020 *? Если есть способ сделать это, отредактировав схему для этой цели, это тоже хорошо, если только она будет применяться к этой цели.