#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. Это зависит от того, как структурирован ваш код и какие директивы препроцессора вы используете.