How to identify a “hw.machine” identifier reliable?

◇◆丶佛笑我妖孽 提交于 2019-12-22 10:23:36

问题


I'm looking for the most official source to complete/maintain this method:

-(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];
}

Does Apple have some statement about this somewhere?

Or an explorous person with a decent research somewhere?


Fo clarification, I'm using this code under the hood:

-(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"]; }

回答1:


Some non-official source I've found so far:

Models - The iPhone Wiki

iClarified - iPhone - Where To Download iPhone Firmware Files From

iClarified - iPad - Where To Download iPad Firmware Files From

iClarified - iPod touch - Where to Download iPod touch Firmware Files From

Still looking for a more official source, though.


Just extracted from iPhone Wiki (up till 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" ]

    };
}

It is now part of eppz!kit on GitHub along with the rest of the code. Implemented in EPPZDevice.h class.




回答2:


iOS devices are asking following Apple page for update packages:

http://mesu.apple.com/assets/com_apple_MobileAsset_SoftwareUpdate/com_apple_MobileAsset_SoftwareUpdate.xml

This XML contains "SupportedDevices" key with identifier values like "iPhone6,1", "iPhone5,3". "Model" key is printed on the back side of the iOS device or you can find them on apple webpages e.g.:

http://www.apple.com/legal/rfexposure/iphone5,4/cs/

Apple is also updating its support page with all models: http://support.apple.com/kb/ht3939



来源:https://stackoverflow.com/questions/18414032/how-to-identify-a-hw-machine-identifier-reliable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!