Добавление макросов препроцессора в Xcode 10 - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь добавить макросы pr-процессора в мой проект Xcode. Этот проект использует и код Swift, и код Objective-C, поэтому я не могу использовать Swift Compiler -> Other Swift Flags, потому что тогда я не могу прочитать их из кода Objective-C.

У меня есть следующий набор в основной цели моего приложения и в проекте:

enter image description here

затем, под второй целью моего приложения (моим расширением Today), я устанавливаю IS_MAIN = 0.

enter image description here

Однако, когда я запускаю этот код:

#if IS_MAIN
    print("main: true")
#else
    print("main: false")
#endif

Он никогда не печатает правильный.

Как я могу добавить этот флаг препроцессора, чтобы он учитывался и моими файлами Swift и Objective-C? Прямо сейчас это не работает ни в одном из типов.

Ответы [ 3 ]

2 голосов
/ 17 июня 2019

Вам необходимо установить пользовательские флаги swift для доступа к процессорам предварительного макроса в swift.

Если вы не хотите устанавливать макрос препроцессора для нескольких архитектур, то вы можете просто использовать вот так.enter image description here

Например, здесь в моей схеме отладки GEO = 1 со значением 1.

Для доступа в Objective C нет проблем, ноДля доступа в swift вам нужно выставить его в swift на другие флаги, подобные этому.

В вашем случае вам нужно добавить -DIS_MAIN в пользовательский флаг.

Надеюсь, это поможет!

enter image description here

1 голос
/ 17 июня 2019

Есть два способа достичь того, что вы хотите сделать. Прочитайте эту статью, чтобы узнать больше о предварительных процессорах и Swift.

По сути, перед Xcode 8 вам нужно будет добавить требуемый флаг в Other Swift Flags в Build settings. Добавьте это так. Обратите внимание на "- D" вариант

enter image description here

После Xcode 8 Apple добавила еще одну настройку под названием Active Compilation Conditions, в которую можно добавить макрос препроцессора без опции «-D» , и swift сможет его распознать.

В обоих случаях вы не добавляете значение =1. Вы просто упоминаете флаг в одной конфигурации и не упоминаете флаг в другой, и ваше #if условие будет работать

1 голос
/ 17 июня 2019

Добавить под Active Compilation Conditions как,

enter image description here

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