компиляция iPhone зависит от цели - PullRequest
3 голосов
/ 18 декабря 2010

У меня есть проект с несколькими целями для нескольких клиентов, однако большая часть приложения практически одинакова, и до сих пор мне удавалось контролировать различные потоки программ с помощью списков свойств, читаемых во время выполнения.

У одного клиента есть конкретное представление, которое мне нужно показать перед всеми остальными.

Моя проблема в том, что я получаю ошибку компоновки (на самом деле ошибку компоновки), потому что класс контроллера не входит в цель других клиентов, и я также не хочу его включать.Поэтому я искал некоторый контроль времени компиляции.

Я ищу что-то вроде

#ifdef client1target
     ... do something
#else
     ... do something else
#endif    

Часть программы, с которой у меня сейчас проблемы, выглядит вот так

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSString *client = [myEnvVariables getShortName]; // In this class method I read the plist

    if ([client isEqualToString:@"CLIENT1"]) {

        Client1SpecificController *mm = [[Client1SpecificController alloc] initWithNibName:@"Client1SpecificView" bundle:nil];
// here happens the compile error because Client1SpecificController is not known at other targets

        mm.view.frame = CGRectMake(0,20,320,460);

        [window addSubview:mm.view];
        [window makeKeyAndVisible]; 

    } else {

        [window addSubview:navigationController.view];
        [window makeKeyAndVisible]; 
    }

    return YES;
}

Ошибка выглядит следующим образом

undefined symbols:
  "_OBJC_CLASS_$_Client1SpecificController", referenced from:
      objc-class-ref-to-Client1SpecificController in myAppDelegate.o

1 Ответ

9 голосов
/ 18 декабря 2010

откройте настройки одной цели и перейдите в «Макросы препроцессора», установите там все, что вам нравится, например CLIENT_ONE

тогда вы можете использовать это в своем коде, как описано

#ifdef CLIENT_ONE
    #import "ClassOneController.h"
#else
    #import "OtherController.h"
#endif

Вот скриншот настройки сборки для цели: For This Example add CLIENT_ONE = 1

...