【问题标题】:Identify iphone's version识别iphone的版本
【发布时间】:2013-03-22 11:54:45
【问题描述】:

我正在开发一个只能安装在 iPhone 4 及更高版本中的应用程序。我还检查了 UIRequiredDeviceCapabilities 和设备兼容性矩阵。我需要更多解决方案。

【问题讨论】:

  • 您是说您只希望您的应用在 iPhone 设备上运行,而不是在 iPod 或 iPad 上运行?
  • @NimitParekh 这似乎有点不必要,因为您可以在构建设置中设置目标操作系统版本。我认为他是在谈论取消对特定设备的支持。
  • 这可能是个坏主意。 Apple 有自己的兼容性矩阵来决定应用程序与哪些设备兼容;如果他们发现您在运行时检查设备然后(我假设)退出应用程序,他们可能会将其从商店中拉出。这是一种糟糕的用户体验。
  • 对于 iPhone 5S & 5C 平台字符串,请看这篇帖子stackoverflow.com/questions/18854244/…

标签: iphone ios objective-c ipad ios5


【解决方案1】:

首先,您可以使用UIDevice 类将模型作为字符串接收:

[[UIDevice currentDevice] model]

这将返回“iPod touch”或“iPhone”之类的内容。

您可以使用以下代码获得确切的模型平台:
(你必须#include <sys/types.h><sys/sysctl.h>

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = @(machine); // Old syntax: [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]
free(machine);

现在platform 是一个包含设备生成的字符串,例如:

  • iPhone1,1 iPhone 2G(第一部 iPhone)
  • iPhone1,2 iPhone 3G
  • iPhone2,1 iPhone 3GS
  • iPhone3,1iPhone3,2 适用于 iPhone 4
  • iPhone4,1 iPhone 4S
  • iPhone 5iPhone5,1iPhone5,2

注意,iPhone 4平台逗号前面的数字实际上是3,而不是4。 使用此字符串,您可以隔离此数字并检查它是否大于或等于 3:

if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) {
    if ([[[platform componentsSeparatedByString:@","][0] substringFromIndex:6] intValue] >= 3) {
        // Device is iPhone 4 or newer
    } else {
        // Device is older than iPhone 4
    }
}

但是:您实际上可以检查屏幕的比例,因为 iPhone 4 是第一款配备视网膜显示屏的 iPhone:

[[UIScreen mainScreen] scale]  // Returns 2.0f on the iPhone 4 and newer and 1.0f on older devices

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2021-08-13
    相关资源
    最近更新 更多