我正在使用 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/