Как проверить TARGET_NAME моего приложения для iPhone в XCode? - PullRequest
8 голосов
/ 22 июня 2009

Я пытаюсь использовать 2 версии своего приложения для iPhone в одном проекте XCode. Кодовая база почти такая же, и там, где мне нужно другое поведение, я решил использовать условия препроцессора и тег ${TARGET_NAME}.

Я установил в OTHER_CFLAGS значение "-DTARGET_NAME=${TARGET_NAME}".

Тогда в моем коде я попытался сделать

#if TARGET_NAME == myApp
  NSLog(@"pro");
#elif TARGET_NAME == myAppLite
  NSLog(@"lite");
#endif

К сожалению, я всегда распечатываю "lite", поскольку TARGET_NAME == myApp это всегда так: поскольку TARGET_NAME определено. Я не могу на всю жизнь понять, как оценить это сравнение строк. Есть идеи?

заранее спасибо

Ответы [ 3 ]

11 голосов
/ 22 июня 2009

Нельзя сравнивать подобные строки в блоке #if. Вместо этого добавьте определения к каждой конкретной цели. Например, на цели полной версии откройте панель «Информация» и перейдите на вкладку «Сборка» и добавьте что-то вроде FULL_VERSION в настройку GCC_PREPROCESSOR_DEFINITIONS. Затем для облегченной цели введите что-то вроде LITE_VERSION. В своем коде вы можете сделать:

#ifdef FULL_VERSION
NSLog(@"Full");
#else
NSLog(@"Lite");
#endif
1 голос
/ 30 марта 2016

На самом деле вы можете получить имя цели для сравнения, но это не пропустит ненужный код из других целей во время компиляции, чтобы сделать это:

Сначала перейдите в меню Product -> Scheme -> Edit Scheme ... (или CMD + <) Затем в разделе аргументов добавьте в переменные окружения что-то вроде: </p>

setup environment variables

В вашем коде вы можете получить имя цели как:

NSString *targetName = [[NSProcessInfo processInfo] environment][@"TARGET_NAME"];
NSLog(@"target = %@", targetName); // Will print the target's name

Вы можете сравнить эту строку сейчас во время выполнения.

Но следуя вашему примеру: если вы хотите, чтобы весь код версии Pro был пропущен во время компиляции. Вы должны делать то, что говорит @ Джейсон-Коко. И перейдите к макросам препроцессора в настройках сборки и добавьте туда $(TARGET_NAME):

enter image description here

Код внутри #define будет скомпилирован и выполнен, если моя цель "MLBGoldPA"

#if defined MLBGoldPA
    NSLog(@"Compiling MLBGoldPA");
#endif
0 голосов
/ 15 июля 2009

, чтобы ваша условная оценка работала, вы должны сделать что-то вроде:

#define myApp       1
#define myAppLite   2

заранее, как в вашем файле _Prefix.pch.

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