检测使用预编译器宏编译的目标

时间:2014-02-13 03:48:41

标签: ios

我正在使用Xcode 5并尝试制作我的应用程序的精简版和付费版。我复制了目标并将预编译器宏设置为IS_PRO = 1 AND IS_LITE = 1。然后我在我的App Delegate中添加了以下代码。

if (self.window.frame.size.height == 568)
        {
            #ifdef IS_PRO

                UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone5" bundle:nil];

                UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone5"];

                self.window.rootViewController = viewController;
                [self.window makeKeyAndVisible];

                return YES;

            #else

            UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone5 Lite" bundle:nil];

            UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone5 Lite"];

            self.window.rootViewController = viewController;
            [self.window makeKeyAndVisible];

            return YES;

            #endif

        }
        else
        {
            #ifdef IS_PRO

            UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone3.5" bundle:nil];

            UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone3.5"];

            self.window.rootViewController = viewController;
            [self.window makeKeyAndVisible];

            return YES;

            #else

            UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"iPhone3.5 Lite" bundle:nil];

            UIViewController *viewController = [storyBoard instantiateViewControllerWithIdentifier:@"iPhone3.5 Lite"];

            self.window.rootViewController = viewController;
            [self.window makeKeyAndVisible];

            return YES;

            #endif
        }

然而,唯一有效的是#ifdef和#else之间的代码。 #else和#endif之间的代码是白色的(不像Xcode接受代码时那样多色)。如果我删除预编译器宏并且只是尝试检测屏幕大小,此代码可以正常工作。

我还做了一个快速无关的测试,看看我是否可以让以下工作:

#ifdef IS_LITE
    NSLog(@"LITE VERSION");
#else
    NSLog(@"PRO VERSION");
#endif

我得到了同样的结果。 Xcode只会读取#ifdef和#else之间的代码,#else和#endif之间的代码是白色的。有人可以帮帮我吗?!?

2 个答案:

答案 0 :(得分:0)

如果定义了宏,#ifdef始终为true。它的值是0还是1。

它会像这样工作:

#if(IS_LITE)
    NSLog(@"LITE VERSION");
#else
    NSLog(@"PRO VERSION");
#endif

答案 1 :(得分:0)

必须为

中的每个目标定义预处理器宏

目标 - >构建设置 - >预处理器宏。

当您构建特定目标时,将编译特定代码。