区分iPhone 4和iPhone 4S

时间:2011-11-07 13:04:52

标签: iphone ios

我需要区分iPhone 4S和iPhone 4.我浏览了帖子并获得了以下代码。如果这是唯一的方法,请告诉我,并确认Apple使用时没有问题。

            struct utsname systemInfo;
            uname(&systemInfo);
            NSString *iPhoneVersion = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

对于4S,iPhoneVersion字符串会给我iPhone4,1和iPhone 4会说iPhone3,1。

感谢您的建议。

2 个答案:

答案 0 :(得分:6)

在CDMA模型(here is a not-quite-up-to-date list)的情况下,也可以将iPhone 4称为iPhone3,3。通常,它更安全且“向前兼容”以测试平台的能力(例如[someSystemClass respondsToSelector:@selector(someMethodName)]或类似的),而不是基于设备模型手动确定能力。你能说出为什么需要区分iPhone 4和4S吗?

答案 1 :(得分:5)

正如其他人所建议的那样,您应该专注于您需要的功能,而不是选择特定设备(如果Apple推出变体或下一个型号时将会中断)。 iPad上推出的唯一iPhone应用程序是那些进行硬件模型检测的应用程序,因为他们不知道iPad即将推出,因此无法查找特定的设备ID。

如果您的应用程序绝对无法在iPhone 4上运行,由于蓝牙4.0低功耗支持等特定硬件要求,您最好将bluetooth-le添加到信息中的UIRequiredDeviceCapabilities .plist,就像我描述here一样。这将阻止用户甚至在非4S设备上安装您的应用程序,但是为未来的iPhone提供了可能性,这很可能具有蓝牙低功耗硬件。

如果您需要扩展硬件功能以利用A5,您可能需要使用glGetString( GL_EXTENSIONS )检查是否支持A5具有的一些新OpenGL ES扩展,并检查扩展名比如APPLE_shadow_samplers。 A4上没有这些扩展,但是A5上有这些扩展,应该可以用于Apple硬件的下一次迭代。

您可能也可以使用轻微记录的新Core Core框架来测试设备在运行时是否存在4.0低功耗硬件,但我没有花太多时间在该框架上。