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

Ios 检测使用预编译器宏编译的目标,ios,Ios,我正在使用Xcode 5和一个浏览器,试图制作我的应用程序的精简版和付费版。我复制了目标并将预编译器宏设置为IS_PRO=1和IS_LITE=1。然后我在我的应用程序委托中添加了以下代码 if (self.window.frame.size.height == 568) { #ifdef IS_PRO UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@

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

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之间的代码为白色。谁能帮帮我吗

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

它的工作原理如下:

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

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

目标-->生成设置-->预处理器宏


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

不清楚您做了什么。确保在每个目标中只定义一个宏。“pro”目标应该只定义
IS_pro
,而“lite”版本应该只定义
IS_lite
。这应该是
#if(IS_lite)
。根据问题,没有名为
LITE\u VERSION
的宏。是的,它是LITE,而不是LITE\u VERSION。我原来的帖子有一个拼写错误。现在更正了。但是,当我键入上面的简单NSLog示例时,Xcode只识别#if(IS#LITE)和#else之间的代码。#else和#endif之间的代码是白色的,这让我相信它没有被识别。我重新复制了目标并再次设置了预处理器编译器代码,它出于某种原因开始工作……这次我没有重命名新的目标方案或info.plist,所以可能与此有关??无论如何,谢谢你的帮助!