Оператор Xcode if никогда не распознает активные условия компиляции

#ios #objective-c #swift #target #compiler-flags

#iOS #objective-c #swift #цель #флаги компилятора

Вопрос:

введите описание изображения здесь

введите описание изображения здесь

Как вы можете видеть, в моем Active compilation conditions у меня есть 2 flags(or whatever it is called) , A и B.
У меня есть 2 цели, поэтому первая цель имеет флаг A, вторая цель имеет флаг B…
В коде я пытаюсь определить значение в зависимости от выбранной цели приложения, но проблема в том, что оно никогда не входит в #if блок, но всегда в #else блок.
Я пытался решить эту проблему в течение нескольких часов, но мне ничего не помогло. Я также попытался ввести -D название своего флага, попытался также определить A и B в Other Swift Flags … Ничего не получалось.

Это мой простой код:

 #if A
    #define kId @"a1a2a3" //never executed.
#else
    #define kId @"b1b2b3" //always executed. Weird thing is also that I put a breakpoint here but its never catched...
#endif
  

Яблочный лязг - Предварительная обработка

Комментарии:

1. Это для Swift или Objective-C? Вы пробовали устанавливать A=1 ?

2. его objc в коде, который я поместил выше. A = 1? где?

3. Если вы написали свой простой код в части Objective-C, напишите A=1 так же, как вы там DEBUG=1 .

4. Хорошо, @Larme, возможно B , мне следует что-нибудь добавить для =2 ?

Ответ №1:

Активные условия компиляции предназначены для Swift и аналогичны макросам препроцессора в Objective-C / C / C .

В языках на основе C строки, начинающиеся с # , являются директивами препроцессора.

Поскольку вы используете Objective-C, для использования #if в вашем коде значение A должно быть ненулевым. Если вы хотите только проверить, A определено ли, вы можете использовать #ifdef вместо этого. Определите A=1 в Preprocessor Macros разделе Apple Clang - Preprocessing .

Комментарии:

1. Я вас плохо понимаю. Я отредактировал свой вопрос и прикрепил изображение внизу, где вы можете увидеть мое Apple Clang - Preprocessing . Пожалуйста, проверьте это.

2. Я предполагаю, что вы хотите установить условие как для целей отладки, так и для выпуска. Дважды щелкните значения отладки ( DEBUG=1 COCOAPODS=1 ) в Preprocessor Macros , щелкните на листе, чтобы добавить новое значение, и введите A=1 . Затем сделайте то же самое для конфигурации выпуска.

3. Хорошо @sbooth, возможно, B мне следует что-нибудь добавить для =2 ?

4. Это зависит от того, как структурирован ваш код и какие директивы препроцессора вы используете.