检查iOS模拟器的类型和版本

萨加尔·科塔里(Sagar R.Kothari)

我有以下代码片段来检测iOS设备。

NSString * platformNSString () {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

NSString * platformString () {
    NSString *platform = platformNSString();

    // iphones
    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (UK+Europe+Asis+China)";
    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (UK+Europe+Asis+China)";
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6";
    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6 Plus";

    // ipods
    if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch (1 Gen)";
    if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch (2 Gen)";
    if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch (3 Gen)";
    if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch (4 Gen)";
    if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";

    // ipads
    if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
    if ([platform isEqualToString:@"iPad1,2"]) return @"iPad 3G";
    if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini";
    if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
    if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
    if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini Retina (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini Retina (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini Retina (GSM+CDMA)";
    // iPad5,3

    // simulators
    if ([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"] || [platform isEqualToString:@"ppc"] || [platform isEqualToString:@"ppc64"]) {

    }

    else return @"Unknown";
    return platform;
}

我还期望有iOS模拟器列表?

见下图。

IOS仿真器列表

简而言之,我还想在检测设备时检测运行时使用哪种类型的模拟器以及哪个iOS版本。

这是其代码块,表明我在此方面所做的努力。

// simulators
if ([platform isEqualToString:@"i386"] || [platform isEqualToString:@"x86_64"] || [platform isEqualToString:@"ppc"] || [platform isEqualToString:@"ppc64"]) {
    CGSize size = [[UIScreen mainScreen] bounds].size;
    CGFloat simulatorHeight = (size.height>size.width)?size.height:size.width;
    if(simulatorHeight>=2048) {
        return @"Retina iPad Simulator";
    } else if(simulatorHeight>=1920) {
        return @"Retina iPhone 6+ Simulator";
    } else if(simulatorHeight>=1334) {
        return @"Retina iPhone 6 Simulator";
    } else if(simulatorHeight>=1136) {
        return @"Retina iPhone 5/5S/5C Simulator";
    } else if(simulatorHeight>=960) {
        return @"Retina iPhone 4/4S Simulator";
    } else if(simulatorHeight>=480) {
        return @"Retina iPhone 4/4S Simulator";
    }
}
杰里米·哈德斯顿红杉

如我上面的评论中所述,您确实不需要此信息。

但是,为了至少使用Xcode 6提供答案,可以使用getenv("SIMULATOR_MODEL_IDENTIFIER")代替sysctlbyname("hw.machine", ...)不能保证这会在将来的版本中起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态类型和iOS模拟器:如何设置值?

来自分类Dev

iOS-Xcode停止显示模拟器的iOS版本

来自分类Dev

iOS模拟器可访问性检查器冻结

来自分类Dev

iOS模拟器版本未出现-Xcode 12.2

来自分类Dev

创建IOS模拟器版本,但缺少预制件

来自分类Dev

如何获得iOS 9版本模拟器?

来自分类Dev

使用 iOS 版本 11.3.1 创建 iPad 模拟器

来自分类Dev

生成模拟器版本

来自分类Dev

如何从模拟器(IOS)获取Iphone类型

来自分类Dev

较旧版本的iOS模拟器,例如带有XCode 5.1和OS X 10.9.2的6或5

来自分类Dev

NSDate在iOS 8.4和9.3版本上的模拟器不到5s时崩溃

来自分类Dev

IOS App在iTunes版本上崩溃,但在本地模拟器和真实设备测试中运行良好

来自分类Dev

XCode 5.0.1和iOS 5.1模拟器问题

来自分类Dev

模拟器和设备之间的iOS按钮差异

来自分类Dev

iOS模拟器启动屏幕和图像黑色

来自分类Dev

Xcode 7和iOS 7模拟器

来自分类Dev

在线iOS模拟器

来自分类Dev

iOS模拟器-Xcode

来自分类Dev

模拟CoreMotion iOS模拟器

来自分类Dev

编码横向模式:iOS模拟器有检查器吗?

来自分类Dev

ios模拟器中未显示“显示检查器”和android react-native中的“地图大小属性不可写”问题

来自分类Dev

在模拟器选择中使用GUID而不是iOS版本号的XCode

来自分类Dev

Xcode版本5.1.1(5B1008)-在iOS 7.0而非7.1上运行模拟器

来自分类Dev

从XCode 6.0.1的模拟器列表中选择合适的iOS版本

来自分类Dev

UI测试,无法运行iOS ui测试-无法确定X的模拟器版本

来自分类Dev

在模拟器中更改ios版本后,ViewController中组件的位置错误

来自分类Dev

XCode7实时版本中的iOS7模拟器?

来自分类Dev

如何确定模拟器的设备和操作系统版本?

来自分类Dev

Visual Studio 2015在不同的OS版本模拟器上运行和调试

Related 相关文章

  1. 1

    动态类型和iOS模拟器:如何设置值?

  2. 2

    iOS-Xcode停止显示模拟器的iOS版本

  3. 3

    iOS模拟器可访问性检查器冻结

  4. 4

    iOS模拟器版本未出现-Xcode 12.2

  5. 5

    创建IOS模拟器版本,但缺少预制件

  6. 6

    如何获得iOS 9版本模拟器?

  7. 7

    使用 iOS 版本 11.3.1 创建 iPad 模拟器

  8. 8

    生成模拟器版本

  9. 9

    如何从模拟器(IOS)获取Iphone类型

  10. 10

    较旧版本的iOS模拟器,例如带有XCode 5.1和OS X 10.9.2的6或5

  11. 11

    NSDate在iOS 8.4和9.3版本上的模拟器不到5s时崩溃

  12. 12

    IOS App在iTunes版本上崩溃,但在本地模拟器和真实设备测试中运行良好

  13. 13

    XCode 5.0.1和iOS 5.1模拟器问题

  14. 14

    模拟器和设备之间的iOS按钮差异

  15. 15

    iOS模拟器启动屏幕和图像黑色

  16. 16

    Xcode 7和iOS 7模拟器

  17. 17

    在线iOS模拟器

  18. 18

    iOS模拟器-Xcode

  19. 19

    模拟CoreMotion iOS模拟器

  20. 20

    编码横向模式:iOS模拟器有检查器吗?

  21. 21

    ios模拟器中未显示“显示检查器”和android react-native中的“地图大小属性不可写”问题

  22. 22

    在模拟器选择中使用GUID而不是iOS版本号的XCode

  23. 23

    Xcode版本5.1.1(5B1008)-在iOS 7.0而非7.1上运行模拟器

  24. 24

    从XCode 6.0.1的模拟器列表中选择合适的iOS版本

  25. 25

    UI测试,无法运行iOS ui测试-无法确定X的模拟器版本

  26. 26

    在模拟器中更改ios版本后,ViewController中组件的位置错误

  27. 27

    XCode7实时版本中的iOS7模拟器?

  28. 28

    如何确定模拟器的设备和操作系统版本?

  29. 29

    Visual Studio 2015在不同的OS版本模拟器上运行和调试

热门标签

归档