постоянный проект iPhone - PullRequest
       18

постоянный проект iPhone

2 голосов
/ 13 января 2010

Я хочу, чтобы в моем проекте была постоянная для переключения между Lite и Pro версией. Я не думаю, что это лучший способ сделать это, но я пытаюсь:

  1. добавить константу в моем приложении делегат

    #define BUILD_PRO 1 //0 => LITE, 1 => PRO
    
  2. когда мне это нужно, я импортирую appDelegate и проверяю его:

    #import "myAppDelegate.h"
    

    затем позже

    #if (BUILD_PRO==1)
    NSLog(@"this is pro version");
    #endif
    

Проблема в том, что этот код работает в некоторых файлах и не работает в других. Я не нашел никакого объяснения этому поведению; у кого-нибудь есть объяснение этому?

Как правильно иметь две версии (pro и lite) из одного проекта?

Ответы [ 3 ]

7 голосов
/ 13 января 2010

Да. Определение препроцессора - способ сделать это.

Я предполагаю, что он работает в некоторых файлах, а не в других, потому что некоторые могут не включать ваш файл myAppDelegate.h и, следовательно, не получить определение. Я предлагаю определить цель "Lite Version" и "Pro Version" и установить переменную препроцессора в конфигурации сборки для каждой цели.

После того, как вы создали облегченную цель (просто выберите дублирующийся пункт контекстного меню цели в вашей цели "Pro Version", чтобы создать облегченную цель):

  • Перейти в пункт меню Project / Edit Target «Pro Version»
  • Перейдите на вкладку сборки и найдите раздел «Предварительная обработка» (внизу).
  • добавить BUILD_PRO = 1 в раздел «Макросы предварительной обработки».

Таким образом, вам не нужно изменять какие-либо заголовочные файлы, вам просто нужно создать облегченную или полную цель. Если вам нужно добавить профессиональную функциональность в любом месте вашего продукта, просто используйте:

#ifdef BUILD_PRO
// do some pro stuff
#endif
2 голосов
/ 13 января 2010

Один из способов сделать это - иметь цель для профессиональной версии и цель для облегченной версии. Затем вы объявляете свои константы в настройках сборки в Preprocessor Macros Pro версии.

Тогда в вашем коде вы можете сделать:

#ifdef BUILD_PRO
   //super awesome pro code here.
#endif
0 голосов
/ 13 января 2010

Я объявляю переменную в заголовке AppDelegate.m:

int DEVICE_TYPE;

А затем в приложении DidFinishLaunching в моем AppDelegate я вызываю:

- (void) setDeviceType {

  NSString* machineType = [[UIDevice currentDevice] machine];
  if ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"]) {
    DEVICE_TYPE = IPOD_TOUCH;
  } else if ([machineType isEqualToString:@"iPhone1,2"] || 
             [machineType isEqualToString:@"iPhone1,1"]) {
    DEVICE_TYPE = IPHONE3G;
  } else {
    DEVICE_TYPE = IPHONE3GS;
  }
}
...