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

标签 ios

我正在使用 Xcode 5 并尝试制作我的应用程序的精简版和付费版。我复制了目标并将预编译器宏设置为 IS_PRO =1 和 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 之间的代码是白色的。有人能帮帮我吗?!?

最佳答案

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

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

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

关于ios - 检测使用预编译器宏编译的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21744816/

相关文章:

ios - 解释 iOS 中的纵横比和各自的术语?

ios - 如何在 objective-c 中正确使用实例变量?

ios - 是否可以通过编程方式更改 iOS 设备的时间

ios - TableView 从单独队列中的数据库填充

ios - iCloud:NSUbiquitousKeyValueStore 问题

ios - 字典对象无法转换为 JSON 对象 objective-c

ios - 错误套接字 SO_NOAPNFALLBK 失败 : [42] Protocol not available, 转储回溯

ios - 如何解决 Ionic 4 到 IOS 应用程序中的错误 'EXC_CRASH (SIGKILL)'

ios - 检查两个日期是否等于分钟精度

ios - 从 iPhone 日历中删除所有 future 重复发生的事件