2015-10-14 51 views
0

我想检测我的应用程序在哪个iPhone上运行。 我发现这一点,在这里计算器:检查iPhone设备版本在设备上失败

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) 

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT)) 
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT)) 

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0) 
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0) 
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0) 
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0) 

但是,这并不为我工作。当我有标准模式(不缩放)的iPhone6时,它说它是iPhone5。 我还测试

[UIScreen mainScreen].bounds.size.width 

但这返回每次320

在模拟器它的作品完美,但在设备上失败。

有人可以帮我找出哪个iPhone使用?

问候

+2

如果您没有提供iPhone 6的launch_screen.xib或启动图像,则在iPhone6中缩放应用程序。 请检查您的状态栏的高度,当您的应用程序运行时,如果它说20,并且它看起来比平常高,应用程序被缩放。 – Alex

+0

我已经添加了launch_screen.xib。没有它也不适用于模拟器。 – BHuelse

回答

2

而不是依赖于屏幕尺寸,为什么不使用“[[UIDevice curentDevice] model]”呢?

Here's a tutorial that might help you out

如果“[[UIDevice currentDevice] model]”对于您来说不够详细,还有“sysctlbyname("hw.machine", machineNameAsCString, &size, NULL, 0);”,其中的教程显示了如何从中获得“漂亮的字符串”(或漂亮版本的模型名称)。

There's also Open Source available that you can drop in to determine the Device display name

+0

有了这个,我无法找出它是否是iPhone6。它只是说x86_64。 – BHuelse

+0

是的,你可以。通过“'hw.machine'”,“iPhone7,2'”是iPhone 6,“iPhone7,1'”是iPhone 6 Plus。 [更多信息可以在这个非常相关的问题中找到](http://stackoverflow.com/questions/18414032/how-to-identify-a-hw-machine-identifier-reliable)。 –

+0

是的你是对的,这是我的错。 hw.machine工作。 – BHuelse