Добавление определения препроцессора с помощью схемы Xcode
В настоящее время у меня есть ряд специальных "вкусов" приложения iPhone, которые мне нужно создать. В идеале я хотел бы иметь схему для каждого "аромата", и каждая схема определяла (или задавала) одно или несколько определений препроцессора, которые я могу использовать для включения в свой код и, возможно, даже препроцесс моего файла info.plist. Очевидно, это можно сделать с несколькими целями, но поскольку у меня могло бы быть много разных "вкусов" приложения, было бы здорово сделать это с помощью схем, чтобы сохранить отсчет цели. Моя нынешняя мысль заключается в том, чтобы добавить эти определения препроцессора во время предварительного действия script, но я не могу на всю жизнь найти способ обновления GCC_PREPROCESSOR_DEFINITIONS. Поскольку это переменная среды, не должен ли я иметь доступ к добавлению в GCC_PREPROCESSOR_DEFINITIONS?
Ответы
Ответ 1
Чтобы удовлетворить мое требование разрешить схемы для определения препроцессоров, лучшим решением, которое я придумал, является создание сценария предварительного действия и сценариев последействия, изменяющих файл xcconfig. Этот файл, в свою очередь, обновляет конфигурацию сборки, задает определения препроцессора и даже позволяет мне определять определения препроцессора для условного изменения info.plist. Если кто-то еще пойдет по этому маршруту, убедитесь, что вы учитываете, как этот файл обрабатывается с помощью управления источником.
Этот вопрос и связанные с ним ответы были полезны для меня: Как добавить значения в переменные xcconfig?
Ответ 2
В худшем случае вы можете выполнить предварительную сборку script для этой схемы. Вам нужно будет включить script для каждой схемы:
![]()
Я бы предпочел прикрепить его к настройке:
![]()
Затем вы можете легко добавить макросы препроцессора для различных конфигураций, например, у меня здесь для Debug:
![]()
Файл <ProjectName> _Prefix.pch - отличное место для размещения макросов, которые влияют на всю программу, например, здесь:
![]()
В моем примере мы фактически отключим вывод консоли, когда он не находится в режиме отладки, обеспечивая небольшое ускорение скорости.
Ответ 3
Как определить несколько целей и определить макросы предварительного процессора в целевых вариантах сборки? Тогда вам нужна только одна схема, и вы можете собрать все цели одним выстрелом, все со своими собственными конфигурациями сборки.
Ответ 4
Если я правильно понял ваш вопрос, вы хотите добавить некоторые определенные пользователем макросы препроцессора в исходный код, есть способ добавить их в свою цель с помощью Xcode. (например, GCC_PREPROCESSOR_DEFINITIONS = USE_TAPJOY)
Шаг 1) Определите название маркой, например USE_TAPJOY
Шаг 2) Перейдите в целевую → вкладку "Настройка сборки" (убедитесь, что все вкладки включены)
Шаг 3) в поле поиска поиска для "Макропроцессора" )
Шаг 4) Проверьте раздел "Отладка/выпуск"
Шаг 5) Введите свой Марко там
![enter image description here]()
Шаг 6) Используйте этот макрос в исходном коде ниже
For conditional include
#ifdef USE_TAPJOY
#import <Tapjoy/Tapjoy.h>
#endif
For conditional source code
#ifdef USE_TAPJOY // Tapjoy Connect Notifications
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(tjcConnectSuccess:)
name:TJC_CONNECT_SUCCESS
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(tjcConnectFail:)
name:TJC_CONNECT_FAILED
object:nil];
#endif
Удачи.