检查 iOS 模拟器类型和版本

2023-11-29

我有以下代码片段来检测 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 模拟器列表?

请参见下图。

LIST OF IOS SIMULATORS

简而言之,我还想在检测设备时检测运行时使用的 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", ...)。无法保证这在未来的版本中有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 iOS 模拟器类型和版本 的相关文章

随机推荐

  • 对齐 Highcharts 中图例中的文本

    目前图例将文本左对齐 即 表示项目标签 在大多数情况下只是不同的颜色 Legend item 2 Legend item 3 Legend item 244 我希望它能像这样 Legend item 2 Legend item 3 Lege
  • 检查map中的元素是否存在

    我有一张表格的地图map
  • 埃拉托斯特尼筛法问题 Java

    我的作业有一个问题 需要使用数组 我需要创建埃拉托斯特尼筛法算法并打印出所有素数 我很困惑 因为据我所知 我的操作顺序是正确的 这是代码 Declare the array boolean numbers new boolean 1000
  • 在链表的开头插入新节点

    在 C 语言的简单链表实现中 我无法找出一行名为 insert 的函数 它需要一个字符并按字母顺序添加到链接列表中 该行是关于当列表为空时创建一个新节点 由于列表上只有一个节点 因此该行应该像我评论的那样 我错了吗 void insert
  • 复杂MySQL查询错误结果

    我正在尝试构建复杂的 mysql 查询 但它返回错误的结果 SELECT b name AS batch name b id AS batch id COUNT DISTINCT s id AS total students COALESC
  • 如何在我的应用程序中将状态栏设置为白色背景和黑色文本(黑色图标)

    我想在我的应用程序中将状态栏设置为白色背景和黑色文本 和黑色图标 我发现一些应用程序可以做到这一点 但是从谷歌搜索 我找不到任何解决方案来做到这一点 有很多关于如何设置状态栏颜色的解决方案 还有像 SystemBarTint 它只能设置背景
  • 使用 jQuery 获取当前 URL? [复制]

    这个问题在这里已经有答案了 我正在使用 jQuery 如何获取当前 URL 的路径并将其分配给变量 示例网址 http localhost menuname de foo bar amp number 0 要获取路径 您可以使用 var p
  • 如何通过脚本创建 crontab

    我需要通过运行来设置服务器的脚本添加一个 cron 作业 我目前正在使用Ubuntu 我可以用crontab e但这将打开一个编辑器来编辑当前的 crontab 我想以编程方式执行此操作 可以这样做吗 这是一个不使用 不要求新作业位于文件中
  • 如何在循环遍历向量时从向量中删除元素?

    我正在循环遍历一个带有循环的向量 例如for int i 0 i lt vec size i 在此循环中 我检查该向量索引处元素的条件 如果某个条件为真 我想删除该元素 如何在循环遍历向量元素时删除向量元素而不崩溃 从 STL 容器中删除满
  • Python - 在列表理解中保留计数器

    是否可以为以下循环编写列表理解 m counter 0 for i x in enumerate l if x field something counter 1 m append counter i 我不知道如何增加列表理解中的计数器 你
  • Symfony - 未找到表单请求的 url

    我正在从事 symfony 项目 我正在与一个不会重定向到自己页面的表单作斗争 action 属性设置为 method 设置为 post 在这种情况下 它应该调用同一页面 但我会以 404 页面结束 这是我的页面在操作文件中的代码 公共函数
  • 无法识别的选择器发送到实例

    我向核心数据支持的 UITableView 添加了索引搜索 搜索工作正常 但是导航回 tableView 后出现此错误 NSSQLRow controllerDidChangeContent 无法识别的选择器发送到实例 0x815edf0
  • javascript - 在单击再次起作用之前需要 onclick 走完全程

    我有这个 javascript 函数 我使用它 当单击时会移动一定的距离 这是在使用大约 7 个 div 的从左到右的滚动条中使用的 我的问题是 在再次使用点击之前 如何让点击先走完整距离 问题是 如果用户快速单击箭头按钮 它会重置距离 有
  • 在属性窗口中更改自定义属性时不会保存

    我为 DataGridView 创建了一个自定义列 原因是我想向列添加属性 类型 我右键单击 DataGridView 并选择 编辑列 然后 当我选择作为自定义列类型的列时 我可以编辑该属性 但如果我在编辑后单击 确定 然后再次转到 编辑列
  • iOS 8 中 UIKeyboardWillShowNotification 的行为是否有变化?

    我有一个简单的UIView块动画 用于在键盘显示时将一组文本字段动画化到视图中 并在键盘隐藏时将它们动画化回来 这在 iOS 6 和 7 中工作得很好 但现在我得到了不正确的行为 这一切都表明了一些变化UIKeyboardWillShowN
  • 查询包含对不同数据上下文中定义的项目的引用

    我在 Stackoverflow 上阅读了其他几篇文章 但我的问题很简单且不同 我有 2 个独立的数据库 这就是为什么我有两个独立的 Datacontext 这是我的查询 我在其中传递参数并将其绑定到我的 GridView if Sessi
  • Ruby/Rails - 如何根据十进制进行验证?

    如何根据小数位数进行验证 例如 假设我们要存储小数点后最多 2 位小数的酒店评级 4 34 3 76 ETC 我在网上读到了基于您与列绑定的精度 比例截断的 sqlite 因此 如果您的精度为 3 小数位数为 2 并输入 1 34567 则
  • 将特定文件复制到新文件夹,同时保留原始子目录树

    我有一个大目录 其中有许多子目录 我正在尝试对其进行排序 我正在尝试将特定文件类型复制到新文件夹 但我想保留原始子目录 def copyFile src dest try shutil copy src dest except shutil
  • 交换两个变量的 XOR 技巧如何真正在字符串上起作用?

    我刚刚遇到了这段代码 用于在 PHP 中交换两个变量的值
  • 检查 iOS 模拟器类型和版本

    我有以下代码片段来检测 iOS 设备 NSString platformNSString size t size sysctlbyname hw machine NULL size NULL 0 char machine malloc si