是否有一个构建预处理器宏我可以检查,#if或#ifdef,以确定我的当前
Xcode项目是否正在为iPhone或iPad构建?
编辑
正如几个答案所指出的,通常应用程序是通用的,同一个二进制文件可以在两台设备上运行.这些非常相似的设备之间的条件行为应该在运行时而不是编译时解决.
解决方法
无法确定您的应用程序是为iPhone还是iPad构建的.预处理器#if指令在构建期间得到解决.一旦您的应用程序构建并标记为Universal,它必须在两台设备上正常运行.在建筑没有人知道它将在以后安装,一个构建可以安装在两者上.
但是您可能希望执行以下操作之一:
>在运行时检测设备型号.
为此,请使用[[UIDevice currentDevice] model]并与iPhone,iPod touch或iPad字符串进行比较.即使在iPad兼容模式下运行(仅适用于iPhone的应用程序),这将返回正确的设备.这可以用于使用分析.
>在运行时检测用户界面成语.
当iPhone和iPad提供不同的内容时,这是大家检查的.使用[[UIDevice currentDevice] userInterfaceIdiom]并与UIUserInterfaceIdiomPhone或UIUserInterfaceIdiomPad进行比较.你可能想要这样做一些方便的方法:
@implementation UIDevice (UserInterfaceIdiom) - (BOOL)iPhone { return (self.userInterfaceIdiom == UIUserInterfaceIdiomPhone); } + (BOOL)iPhone { return [[UIDevice currentDevice] iPhone]; } - (BOOL)iPad { return (self.userInterfaceIdiom == UIUserInterfaceIdiomPad); } + (BOOL)iPad { return [[UIDevice currentDevice] iPad]; } @end
然后你可以使用:
if ([[UIDevice currentDevice] iPhone]) { } // or if ([UIDevice iPhone]) { } // or if (UIDevice.iPhone) { }