Как передать флаг компиляции всем фреймворкам для одной цели в Xcode / Swift - PullRequest
1 голос
/ 12 февраля 2020

Сценарий

Я не совсем уверен относительно подходящей терминологии для моего вопроса, поэтому позвольте мне попытаться объяснить сценарий. У меня есть приложение, которое использует несколько структур (которые я построил). У меня есть основная цель приложения, цель модульного теста и цель пользовательского интерфейса. Я хочу иметь отдельную цель, которая может быть запущена для автоматического бенчмаркинга. Эта новая цель будет целью тестирования пользовательского интерфейса и будет работать на физическом устройстве. Все каркасы, которые я использую, управляются из Карфагена.

Что я сделал

Для этого я создал новую цель с именем 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 *? Если есть способ сделать это, отредактировав схему для этой цели, это тоже хорошо, если только она будет применяться к этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...