Добавление определения препроцессора с помощью схемы 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

Удачи.