如何识别“hw.machine”标识符可靠?

2024-03-25

我正在寻找最官方的来源来完成/维护此方法:

-(NSString*)platformString
{
    NSString *platform = [self platform];

    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    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 (Other Carrier)";
    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:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";

    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";

    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 WiFi";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 GSM";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 CDMA";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 CDMAS";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini Wifi";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad mini (Cellular ATT)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad mini (Cellular Verizon)";

    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 WiFi";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 CDMA";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 GSM";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 Wifi";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 3 (Cellular ATT)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 3 (Cellular Verizon)";

    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad 4 WiFi";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad 4 GSM";
    if ([platform isEqualToString:@"iPad4,3"])      return @"iPad 4 CDMA";

    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";

    return [NSString stringWithFormat:@"Unknown: %@", platform];
}

苹果公司是否对此有任何声明?

或者是一个在某处进行过不错研究的富有探索精神的人?


为了澄清,我在幕后使用这段代码:

-(NSString*)getSysInfoByName:(char*) typeSpecifier
{
    size_t size;
    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);

    char *answer = malloc(size);
    sysctlbyname(typeSpecifier, answer, &size, NULL, 0);

    NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];

    free(answer);
    return results;
}

-(NSString*)platform
{ return [self getSysInfoByName:"hw.machine"]; }

到目前为止我发现的一些非官方来源:

型号 - iPhone Wiki http://theiphonewiki.com/wiki/Models

iClarified - iPhone- 从哪里下载 iPhone 固件文件 http://www.iclarified.com/entry/index.php?enid=750

iClarified - iPad- 从哪里下载 iPad 固件文件 http://www.iclarified.com/entry/index.php?enid=8500

iClarified - iPod touch- 从哪里下载 iPod touch 固件文件 http://www.iclarified.com/entry/index.php?enid=757

不过,仍在寻找更官方的来源。


刚刚从 iPhone Wiki 中摘录(直到 iPhone 5S、iPad Air):

-(NSDictionary*)deviceModelDataForMachineIDs
{
    return @{

         //iPad.
         @"iPad1,1" : @[ @"iPad 1G", @"Wi-Fi / GSM", @"A1219 / A1337" ],
         @"iPad2,1" : @[ @"iPad 2", @"Wi-Fi", @"A1395" ],
         @"iPad2,2" : @[ @"iPad 2", @"GSM", @"A1396" ],
         @"iPad2,3" : @[ @"iPad 2", @"CDMA", @"A1397" ],
         @"iPad2,4" : @[ @"iPad 2", @"Wi-Fi Rev A", @"A1395" ],
         @"iPad2,5" : @[ @"iPad mini", @"Wi-Fi", @"A1432" ],
         @"iPad2,6" : @[ @"iPad mini", @"GSM", @"A1454" ],
         @"iPad2,7" : @[ @"iPad mini", @"GSM+CDMA", @"A1455" ],
         @"iPad3,1" : @[ @"iPad 3", @"Wi-Fi", @"A1416" ],
         @"iPad3,2" : @[ @"iPad 3", @"GSM+CDMA", @"A1403" ],
         @"iPad3,3" : @[ @"iPad 3", @"GSM", @"A1430" ],
         @"iPad3,4" : @[ @"iPad 4", @"Wi-Fi", @"A1458" ],
         @"iPad3,5" : @[ @"iPad 4", @"GSM", @"A1459" ],
         @"iPad3,6" : @[ @"iPad 4", @"GSM+CDMA", @"A1460" ],
         @"iPad4,1" : @[ @"iPad Air", @"Wi‑Fi", @"A1474" ],
         @"iPad4,2" : @[ @"iPad Air", @"Cellular", @"A1475" ],
         @"iPad4,4" : @[ @"iPad mini 2", @"Wi‑Fi", @"A1489" ],
         @"iPad4,5" : @[ @"iPad mini 2", @"Cellular", @"A1517" ],
         @"iPad4,6" : @[ @"iPad mini 2", @"N/A", @"A1491" ],
         @"iPad4,7" : @[ @"iPad mini 3", @"N/A", @"A1599" ],
         @"iPad4,8" : @[ @"iPad mini 3", @"N/A", @"A1600" ],
         @"iPad4,9" : @[ @"iPad mini 3", @"N/A", @"A1601" ],
         @"iPad5,3" : @[ @"iPad Air 2", @"N/A", @"A1566" ],
         @"iPad5,4" : @[ @"iPad Air 2", @"N/A", @"A1567" ],

         //iPhone.
         @"iPhone1,1" : @[ @"iPhone 2G", @"GSM", @"A1203" ],
         @"iPhone1,2" : @[ @"iPhone 3G", @"GSM", @"A1241 / A13241" ],
         @"iPhone2,1" : @[ @"iPhone 3GS", @"GSM", @"A1303 / A13251" ],
         @"iPhone3,1" : @[ @"iPhone 4", @"GSM", @"A1332" ],
         @"iPhone3,2" : @[ @"iPhone 4", @"GSM Rev A", @"-" ],
         @"iPhone3,3" : @[ @"iPhone 4", @"CDMA", @"A1349" ],
         @"iPhone4,1" : @[ @"iPhone 4S", @"GSM+CDMA", @"A1387 / A14311" ],
         @"iPhone5,1" : @[ @"iPhone 5", @"GSM", @"A1428" ],
         @"iPhone5,2" : @[ @"iPhone 5", @"GSM+CDMA", @"A1429 / A14421" ],
         @"iPhone5,3" : @[ @"iPhone 5C", @"GSM", @"A1456 / A1532" ],
         @"iPhone5,4" : @[ @"iPhone 5C", @"Global", @"A1507 / A1516 / A1526 / A1529" ],
         @"iPhone6,1" : @[ @"iPhone 5S", @"GSM", @"A1433 / A1533" ],
         @"iPhone6,2" : @[ @"iPhone 5S", @"Global", @"A1457 / A1518 / A1528 / A1530" ],
         @"iPhone7,2" : @[ @"iPhone 6", @"N/A", @"A1549 / A1586" ],
         @"iPhone7,1" : @[ @"iPhone 6 Plus", @"N/A", @"A1522 / A1524" ],

         //iPod.
         @"iPod1,1" : @[ @"iPod touch 1G", @"-", @"A1213" ],
         @"iPod2,1" : @[ @"iPod touch 2G", @"-", @"A1288" ],
         @"iPod3,1" : @[ @"iPod touch 3G", @"-", @"A1318" ],
         @"iPod4,1" : @[ @"iPod touch 4G", @"-", @"A1367" ],
         @"iPod5,1" : @[ @"iPod touch 5G", @"-", @"A1421 / A1509" ]

    };
}

它现在是GitHub 上的 eppz!kit https://github.com/eppz/eppz-kit以及代码的其余部分。实施于EPPZDevice.h https://github.com/eppz/eppz-kit/blob/master/eppz!kit/EPPZDevice.h class.

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

如何识别“hw.machine”标识符可靠? 的相关文章

随机推荐

  • Python单元测试,仅在测试失败时才执行某些操作

    当使用unittest来自 python 3 的库我只想在测试失败时执行一些操作 但这应该在类级别上 所以我不必为每个测试编写它 例如当使用behave有这样的事情 def after step context step if step s
  • 删除文本文件中的一行

    好的 我尝试从文件中删除包含 的行 该文件如下所示 Lorem ipsum Text 我的代码 f File open C websites ahr txt f each line do line if line include a lin
  • Scala import 语句位于 scala 类的顶部和内部

    在scala中这两种导入策略有什么区别 Option 1 import com somepackage class MyClass further code Option 2 class MyClass import com somepac
  • 我可以更改 apk 的版本代码吗?

    我为 Android 构建了一个应用程序 并且已经将其导出为 apk 如果已经导出 我可以更改其版本代码吗 我怎样才能做到这一点 我丢失了备份代码 我只有更新版本 需要返回第一个版本 我唯一能做的就是从 apk 备份中增加版本代码 然后我的
  • php中计算每个子数组中的元素

    一个例子来自php net http php net manual en function count php提供以下内容 如何独立于 food 数组 输出 3 获取水果和蔬菜的数量 你可以这样做 e
  • 当 Flexbox 项目以列模式换行时,容器不会增加其宽度

    我正在研究一个嵌套的弹性盒布局 它应该按如下方式工作 最外层 ul main 是一个水平列表 当向其中添加更多项目时 该列表必须向右扩展 如果它变得太大 应该有一个水平滚动条 main display flex flex direction
  • maven2:从 WAR 中排除目录

    I tried this http maven apache org plugins maven war plugin examples adding filtering webresources html从我的 WAR 文件中排除整个目录
  • 查找将一个 NumPy ndarray 的行映射到另一个 NumPy ndarray 的一组索引

    我有两个结构化的 2Dnumpy数组是equal原则上 意义 A numpy array a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 B numpy array a2 b2 c2 a4 b4 c4 a3 b3 c
  • 在 React 中将类组件转换为函数式组件

    我正在学习 React hooks 因此为了做到这一点 我尝试将类组件转换为函数组件 但我仍然遇到一些错误 这是作为类编写的原始工作组件 import React Component from react import NavBar fro
  • Restkit:迁移到 0.20

    我正在尝试迁移到 RestKit 0 20 pre2 目前我设法迁移我的映射 至少编译器不再抱怨 但我在创建请求时遇到问题 之前我使用了不再存在的 RKObjectLoader 我之前的代码如下 RKObjectLoader objectL
  • 如何从 Cassandra 获取排序计数器

    我有一排计数器 我想让它的列按值排序 有什么策略或数据模型吗 恐怕没有办法让 Cassandra 为你做这件事 您需要从 Cassandra 获取整行 对大行进行分页 并在客户端中对其进行排序 如果您的解决方案可以处理非最新结果 您可以使用
  • R 中的 na.strings = c()

    我是 R 新手并开始探索na strings c 函数与read csv 我已经读到 使用此选项 所有缺失的值将被替换为 NA 但我在我的文件中没有看到这种情况发生 尽管使用了 但我没有看到输出有任何差异na strings c 如果我遗漏
  • 如何删除由 addEventListener 以事件对象作为参数绑定的匿名函数

    例如 document addEventListener keyup function ev if ev ctrlKey dosomething false 有什么办法可以去掉匿名函数吗 你可以自己写一个小接口addEventListene
  • tinymce 4 如何添加事件处理程序

    在tinymce 3中 我们似乎可以这样做 Adds a click handler to the current document tinymce dom Event add document click function e conso
  • Angular:延迟加载模块重新加载时重置服务状态

    我的申请中关于服务的结构如下 AppModule AppComponent and HomeComponent Lazy1 Lazy2 Lazy3 我的应用程序从 AppComponent 开始 它重定向到 HomeComponent 然后
  • 正则表达式不以数字开头

    如何创建一个匹配所有开头不带数字的字母数字的正则表达式 现在我有 0 9 a zA Z0 9 例如 1ab 不匹配 ab1 匹配 1 bc 不匹配 bc 1 匹配 你所写的内容存在三处错误 首先 要否定一个字符类 您可以将 inside括号
  • 雪花中有保存或加载工作表的选项吗?

    雪花中有保存或加载工作表的选项吗 或者将工作表下载到本地并从本地加载 我的意思不是通过剪贴板将其粘贴到某些文本编辑器并保存这样的选项 Snowflake 会自动保存您的工作表 您还可以将脚本从本地加载到工作表 但是无法下载工作表 Saved
  • QOpenGLWidget显示黑屏

    我尝试了此处描述的 QOpenGLWidget 示例 https stackoverflow com a 31524956 4564882 https stackoverflow com a 31524956 4564882 但我只得到一个
  • 使用IDLE时的工作目录是什么?

    所以 我正在学习 Python 想创建一个简单的脚本来从互联网下载文件 然后将其写入文件 但是 我正在使用 IDLE 并且不知道 IDLE 中的工作目录是什么或如何更改它 如果我不知道工作目录或如何更改它 如何在 IDLE 中执行文件系统操
  • 如何识别“hw.machine”标识符可靠?

    我正在寻找最官方的来源来完成 维护此方法 NSString platformString NSString platform self platform if platform isEqualToString iPhone1 1 retur