iPhone 8、iPhone 8 Plus 和 iPhone X 设备代号

7
我正在使用以下代码来获取设备名称。
NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

以下是结果,映射到设备:

@"iPhone9,1" :@"iPhone 7",
@"iPhone9,3" :@"iPhone 7",
@"iPhone9,2" :@"iPhone 7 Plus",
@"iPhone9,4" :@"iPhone 7 Plus",

我们是否有新发布的新设备(iPhone 8、iPhone 8 Plus和iPhone X)的新设备代码?


这些信息可能在这些设备发布之前不会可用。然而,又似乎有很多泄漏... - rickster
我想知道您需要这些信息的目的。用户使用的手机很少是您决策所需的基础。 - gnasher729
@gnasher729 我使用这些信息进行分析,以查看访问我的应用程序的设备。 - Mugunth Chandran
2个回答

9

编辑:已经更正。iPhone X不是iPhone10,5和iPhone10,6。

  • iPhone 8: iPhone10,1iPhone10,4
  • iPhone 8 Plus: iPhone10,2iPhone10,5
  • iPhone X: iPhone10,3iPhone10,6

5

注意:2020年iPhone型号的Obj-C代码更新

Swift 4.1+

注意:请参考Obj-C代码以获取最新设备添加。

import Foundation
import SystemConfiguration

class DeviceInfo {
    static func platform() -> String? {
        var systemInfo = utsname()
        uname(&systemInfo)
        let modelCode = withUnsafePointer(to: &systemInfo.machine) {
            $0.withMemoryRebound(to: CChar.self, capacity: 1) {
                ptr in String.init(validatingUTF8: ptr)
            }
        }
        return modelCode
    }

    static func deviceType() -> String {
        if let platform = platform(), let device = deviceDict[platform] {
            return device
        }
        return "unknown"
    }

    static let deviceDict: Dictionary<String, String> = [
        "iPhone1,1" : "iPhone (1st generation)",
        "iPhone1,2" : "iPhone 3G",
        "iPhone2,1" : "iPhone 3GS",
        "iPhone3,1" : "iPhone 4 (GSM)",
        "iPhone3,2" : "iPhone 4 (GSM, 2nd revision)",
        "iPhone3,3" : "iPhone 4 (Verizon)",
        "iPhone4,1" : "iPhone 4S",
        "iPhone5,1" : "iPhone 5 (GSM)",
        "iPhone5,2" : "iPhone 5 (GSM+CDMA)",
        "iPhone5,3" : "iPhone 5c (GSM)",
        "iPhone5,4" : "iPhone 5c (GSM+CDMA)",
        "iPhone6,1" : "iPhone 5s (GSM)",
        "iPhone6,2" : "iPhone 5s (GSM+CDMA)",
        "iPhone7,2" : "iPhone 6",
        "iPhone7,1" : "iPhone 6 Plus",
        "iPhone8,1" : "iPhone 6s",
        "iPhone8,2" : "iPhone 6s Plus",
        "iPhone8,4" : "iPhone SE",
        "iPhone9,1" : "iPhone 7 (GSM+CDMA)",
        "iPhone9,3" : "iPhone 7 (GSM)",
        "iPhone9,2" : "iPhone 7 Plus (GSM+CDMA)",
        "iPhone9,4" : "iPhone 7 Plus (GSM)",
        "iPhone10,1" : "iPhone 8 (GSM+CDMA)",
        "iPhone10,4" : "iPhone 8 (GSM)",
        "iPhone10,2" : "iPhone 8 Plus (GSM+CDMA)",
        "iPhone10,5" : "iPhone 8 Plus (GSM)",
        "iPhone10,3" : "iPhone X (GSM+CDMA)",
        "iPhone10,6" : "iPhone X (GSM)",
        "iPhone11,1" : "iPhone XR (GSM+CDMA)",
        "iPhone11,2" : "iPhone XS (GSM+CDMA)",
        "iPhone11,3" : "iPhone XS (GSM)",
        "iPhone11,4" : "iPhone XS Max (GSM+CDMA)",
        "iPhone11,5" : "iPhone XS Max (GSM, Dual Sim, China)",
        "iPhone11,6" : "iPhone XS Max (GSM)",
        "iPhone11,8" : "iPhone XR (GSM)",
        "iPod1,1" : "iPod Touch 1G",
        "iPod2,1" : "iPod Touch 2G",
        "iPod3,1" : "iPod Touch 3G",
        "iPod4,1" : "iPod Touch 4G",
        "iPod5,1" : "iPod Touch 5G",
        "iPod7,1" : "iPod Touch 6G",
        "iPad1,1" : "iPad",
        "iPad2,1" : "iPad 2 (WiFi)",
        "iPad2,2" : "iPad 2 (GSM)",
        "iPad2,3" : "iPad 2 (CDMA)",
        "iPad2,4" : "iPad 2 (WiFi)",
        "iPad2,5" : "iPad Mini (WiFi)",
        "iPad2,6" : "iPad Mini (GSM)",
        "iPad2,7" : "iPad Mini (CDMA)",
        "iPad3,1" : "iPad 3 (WiFi)",
        "iPad3,2" : "iPad 3 (CDMA)",
        "iPad3,3" : "iPad 3 (GSM)",
        "iPad3,4" : "iPad 4 (WiFi)",
        "iPad3,5" : "iPad 4 (GSM)",
        "iPad3,6" : "iPad 4 (CDMA)",
        "iPad4,1" : "iPad Air (WiFi)",
        "iPad4,2" : "iPad Air (GSM)",
        "iPad4,3" : "iPad Air (CDMA)",
        "iPad4,4" : "iPad Mini 2 (WiFi)",
        "iPad4,5" : "iPad Mini 2 (Cellular)",
        "iPad4,6" : "iPad Mini 2 (Cellular)",
        "iPad4,7" : "iPad Mini 3 (WiFi)",
        "iPad4,8" : "iPad Mini 3 (Cellular)",
        "iPad4,9" : "iPad Mini 3 (Cellular)",
        "iPad5,1" : "iPad Mini 4 (WiFi)",
        "iPad5,2" : "iPad Mini 4 (Cellular)",
        "iPad5,3" : "iPad Air 2 (WiFi)",
        "iPad5,4" : "iPad Air 2 (Cellular)",
        "iPad6,3" : "iPad Pro 9.7-inch (WiFi)",
        "iPad6,4" : "iPad Pro 9.7-inch (Cellular)",
        "iPad6,7" : "iPad Pro 12.9-inch (WiFi)",
        "iPad6,8" : "iPad Pro 12.9-inch (Cellular)",
        "iPad6,11" : "iPad 5 (WiFi)",
        "iPad6,12" : "iPad 5 (Cellular)",
        "iPad7,1" : "iPad Pro 12.9-inch 2 (WiFi)",
        "iPad7,2" : "iPad Pro 12.9-inch 2 (Cellular)",
        "iPad7,3" : "iPad Pro 10.5-inch (WiFi)",
        "iPad7,4" : "iPad Pro 10.5-inch (Cellular)",
        "iPad7,5" : "iPad 6 (WiFi)",
        "iPad7,6" : "iPad 6 (Cellular)",
        "iPad8,1" : "iPad Pro 11-inch (WiFi)",
        "iPad8,2" : "iPad Pro 11-inch (WiFi, 1TB)",
        "iPad8,3" : "iPad Pro 11-inch (Cellular)",
        "iPad8,4" : "iPad Pro 11-inch (Cellular, 1TB)",
        "iPad8,5" : "iPad Pro 12.9-inch 3 (WiFi)",
        "iPad8,6" : "iPad Pro 12.9-inch 3 (WiFi, 1TB)",
        "iPad8,7" : "iPad Pro 12.9-inch 3 (Cellular)",
        "iPad8,8" : "iPad Pro 12.9-inch 3 (Cellular, 1TB)",
        "i386" : "Simulator",
        "x86_64" : "Simulator",
        ]
}

当我获得新的手表平台字符串时,我将更新答案。

Obj-C

 + (NSString *)platformString{
        NSString *platform = [Settings platform];

        //iPhone
if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone (1st generation)";
if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4 (GSM)";
if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4 (GSM, 2nd revision)";
if ([platform isEqualToString:@"iPhone3,3"])    return @"iPhone 4 (Verizon)";
if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
if ([platform isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone8,4"])    return @"iPhone SE";
if ([platform isEqualToString:@"iPhone9,1"])    return @"iPhone 7 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone9,3"])    return @"iPhone 7 (GSM)";
if ([platform isEqualToString:@"iPhone9,2"])    return @"iPhone 7 Plus (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone9,4"])    return @"iPhone 7 Plus (GSM)";
if ([platform isEqualToString:@"iPhone10,1"])    return @"iPhone 8 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,4"])    return @"iPhone 8 (GSM)";
if ([platform isEqualToString:@"iPhone10,2"])    return @"iPhone 8 Plus (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,5"])    return @"iPhone 8 Plus (GSM)";
if ([platform isEqualToString:@"iPhone10,3"])    return @"iPhone X (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,6"])    return @"iPhone X (GSM)";
if ([platform isEqualToString:@"iPhone11,1"])    return @"iPhone XR (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone11,2"])    return @"iPhone XS (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone11,3"])    return @"iPhone XS (GSM)";
if ([platform isEqualToString:@"iPhone11,4"])    return @"iPhone XS Max (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone11,5"])    return @"iPhone XS Max (GSM, Dual Sim, China)";
if ([platform isEqualToString:@"iPhone11,6"])    return @"iPhone XS Max (GSM)";
if ([platform isEqualToString:@"iPhone11,8"])    return @"iPhone XR (GSM)";
if ([platform isEqualToString:@"iPhone12,1"])    return @"iPhone 11";
if ([platform isEqualToString:@"iPhone12,2"])    return @"iPhone 11 Pro";
if ([platform isEqualToString:@"iPhone12,3"])    return @"iPhone 11 Pro Max";
if ([platform isEqualToString:@"iPhone12,5"])    return @"iPhone 11 Pro Max";
if ([platform isEqualToString:@"iPhone12,8"])    return @"iPhone SE 2nd Gen.";

//iPod Touch
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:@"iPod7,1"])      return @"iPod Touch 6G";
if ([platform isEqualToString:@"iPod9,1"])      return @"iPod Touch (7G)";

//iPad
if ([platform isEqualToString:@"iPad1,1"])      return @"iPad (1st generation)";
if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (Wi-Fi)";
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 (Wi-Fi, Mid 2012)";
if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (Wi-Fi)";
if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,1"])      return @"iPad (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad3,2"])      return @"iPad (3rd generation) (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"])      return @"iPad (3rd generation) (GSM)";
if ([platform isEqualToString:@"iPad3,4"])      return @"iPad (4th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad3,5"])      return @"iPad (4th generation) (GSM)";
if ([platform isEqualToString:@"iPad3,6"])      return @"iPad (4th generation) (GSM+CDMA)";
if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (Wi-Fi)";
if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
if ([platform isEqualToString:@"iPad4,3"])      return @"iPad Air (China)";
if ([platform isEqualToString:@"iPad4,4"])      return @"iPad Mini 2 (Wi-Fi)";
if ([platform isEqualToString:@"iPad4,5"])      return @"iPad Mini 2 (Cellular)";
if ([platform isEqualToString:@"iPad4,6"])      return @"iPad Mini 2 (China)";
if ([platform isEqualToString:@"iPad4,7"])      return @"iPad Mini 3 (Wi-Fi)";
if ([platform isEqualToString:@"iPad4,8"])      return @"iPad Mini 3 (Cellular)";
if ([platform isEqualToString:@"iPad4,9"])      return @"iPad Mini 3 (China)";
if ([platform isEqualToString:@"iPad5,1"])      return @"iPad Mini 4 (Wi-Fi)";
if ([platform isEqualToString:@"iPad5,2"])      return @"iPad Mini 4 (Cellular)";
if ([platform isEqualToString:@"iPad5,3"])      return @"iPad Air 2 (Wi-Fi)";
if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
if ([platform isEqualToString:@"iPad6,3"])      return @"iPad Pro 9.7\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,4"])      return @"iPad Pro 9.7\" (Cellular)";
if ([platform isEqualToString:@"iPad6,7"])      return @"iPad Pro 12.9\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,8"])      return @"iPad Pro 12.9\" (Cellular)";
if ([platform isEqualToString:@"iPad6,11"])     return @"iPad (5th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,12"])     return @"iPad (5th generation) (Cellular)";
if ([platform isEqualToString:@"iPad7,1"])      return @"iPad Pro 12.9\" (2nd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,2"])      return @"iPad Pro 12.9\" (2nd generation) (Cellular)";
if ([platform isEqualToString:@"iPad7,3"])      return @"iPad Pro 10.5\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,4"])      return @"iPad Pro 10.5\" (Cellular)";
if ([platform isEqualToString:@"iPad7,5"])      return @"iPad 6 (WiFi)";
if ([platform isEqualToString:@"iPad7,6"])      return @"iPad 6 (Cellular)";
if ([platform isEqualToString:@"iPad8,1"])      return @"iPad Pro 11\" (2018) (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,2"])      return @"iPad Pro 11\" (2018) (Wi-Fi, 1TB)";
if ([platform isEqualToString:@"iPad8,3"])      return @"iPad Pro 11\" (2018) (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,4"])      return @"iPad Pro 11\" (2018) (Cellular)";
if ([platform isEqualToString:@"iPad8,5"])      return @"iPad Pro 12.9\" (2018) (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,6"])      return @"iPad Pro 12.9\" (2018) (3rd generation) (Cellular)";
if ([platform isEqualToString:@"iPad8,7"])      return @"iPad Pro 12.9\" (2018) (3rd generation) (Wi-Fi, 1TB)";
if ([platform isEqualToString:@"iPad8,8"])      return @"iPad Pro 12.9\" (2018) (3rd generation) (Cellular, 1TB)";
if ([platform isEqualToString:@"iPad11,1"])     return @"iPad mini (2019) (5th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad11,2"])     return @"iPad mini (2019) (5th generation) (Cellular)";
if ([platform isEqualToString:@"iPad11,3"])     return @"iPad Air (2019) (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad11,4"])     return @"iPad Air (2019) (3rd generation) (Cellular)";

//Apple TV
if ([platform isEqualToString:@"AppleTV2,1"])   return @"Apple TV 2G";
if ([platform isEqualToString:@"AppleTV3,1"])   return @"Apple TV 3";
if ([platform isEqualToString:@"AppleTV3,2"])   return @"Apple TV 3 (2013)";
if ([platform isEqualToString:@"AppleTV5,3"])   return @"Apple TV 4";
if ([platform isEqualToString:@"AppleTV6,2"])   return @"Apple TV 4K";

//Apple Watch
if ([platform isEqualToString:@"Watch1,1"])     return @"Apple Watch (1st generation) (38mm)";
if ([platform isEqualToString:@"Watch1,2"])     return @"Apple Watch (1st generation) (42mm)";
if ([platform isEqualToString:@"Watch2,6"])     return @"Apple Watch Series 1 (38mm)";
if ([platform isEqualToString:@"Watch2,7"])     return @"Apple Watch Series 1 (42mm)";
if ([platform isEqualToString:@"Watch2,3"])     return @"Apple Watch Series 2 (38mm)";
if ([platform isEqualToString:@"Watch2,4"])     return @"Apple Watch Series 2 (42mm)";
if ([platform isEqualToString:@"Watch3,1"])     return @"Apple Watch Series 3 (38mm Cellular)";
if ([platform isEqualToString:@"Watch3,2"])     return @"Apple Watch Series 3 (42mm Cellular)";
if ([platform isEqualToString:@"Watch3,3"])     return @"Apple Watch Series 3 (38mm)";
if ([platform isEqualToString:@"Watch3,4"])     return @"Apple Watch Series 3 (42mm)";
if ([platform isEqualToString:@"Watch4,1"])     return @"Apple Watch Series 4 (40mm)";
if ([platform isEqualToString:@"Watch4,2"])     return @"Apple Watch Series 4 (44mm)";
if ([platform isEqualToString:@"Watch4,3"])     return @"Apple Watch Series 4 (40mm Cellular)";
if ([platform isEqualToString:@"Watch4,4"])     return @"Apple Watch Series 4 (44mm Cellular)";
if ([platform isEqualToString:@"Watch5,1"])     return @"Apple Watch Series 5 (40mm)";
if ([platform isEqualToString:@"Watch5,2"])     return @"Apple Watch Series 5 (44mm)";
if ([platform isEqualToString:@"Watch5,3"])     return @"Apple Watch Series 5 (40mm Cellular)";
if ([platform isEqualToString:@"Watch5,4"])     return @"Apple Watch Series 5 (44mm Cellular)";

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

        return platform;
        return [@"Unknown : " stringByAppendingString:platform];
    }

这是获取设备平台的实际代码。
请注意,该代码位于名为“Settings”的NSObject类中,并使用了类方法。
您可以通过在第一行添加“-(NSString *)platform {”和“-(NSString *)platformString {”来轻松将其更改为实例方法。此外,在“platformString”代码的顶部调用平台:“NSString * platform = [self platform];”。请保留HTML标记。
+ (NSString *) platform{
    int mib[2];
    size_t len;
    char *machine;

    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;

    sysctl(mib, 2u, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2u, machine, &len, NULL, 0);

    NSString *platform = @(machine);
    free(machine);
    return platform;
}

最好将数据存储在字典中,并根据“platform”字符串获取值,这样会更加清晰。我相信这样做也会更快,因为字典执行哈希查找。 - EmilioPelaez
@EmilioPelaez 您是对的,使用字典可能会更快,但是建立字典需要时间,而且这只是执行一次调用,因此这样更快。 - Sverrisson
根据https://www.iclarified.com/67103/xcode-10-beta-reveals-next-generation-iphone-se-with-iphone-7-internals,我们有: iPhone 11,1 - 6.1" LCD → iPhone XR; iPhone 11,3 - 5.8" OLED → iPhone XS; iPhone 11,5 - 6.5" OLED → iPhone XS Max。这与您的“iPhone11,1”数据相矛盾。 - Cœur
@Cœur 谢谢您的信息,我已更新答案以反映更好的数据。 - Sverrisson
@HannesSverrisson 好的,但我并不是说iclarified.com的数据可靠,我只是想指出它们之间的差异。我所知道的唯一可靠的来源是https://www.theiphonewiki.com/wiki/Models,它没有列出“iPhone11,1”。 - Cœur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接