Determine device (iPhone, iPod Touch) with iOS

后端 未结 30 1778
礼貌的吻别
礼貌的吻别 2020-11-21 11:29

Is there a way to determine the device running an application. I want to distinguish between iPhone and iPod Touch, if possible.

相关标签:
30条回答
  • 2020-11-21 12:01

    Latest update - November 2020: Added iPhone 12, iPhone 12 mini iPhone 12 Pro, iPhone 12 Pro Max, iPhone SE (2nd generation), iPad (8th generation), iPad Air (4th generation), Apple Watch 6, Apple Watch SE

    Previous update - June 2020: Added iPad Pro 11 2020 (2nd generation), iPad Pro 12.9 2020 (4th generation), Apple Watch 5


    Swift

    (Tested on Swift 5, Swift 4, Swift 3)

    The function below returns a string with current device name.

    func userDeviceName() -> String {
        let platform: String = {
            var size = 0
            sysctlbyname("hw.machine", nil, &size, nil, 0)
            var machine = [CChar](repeating: 0,  count: Int(size))
            sysctlbyname("hw.machine", &machine, &size, nil, 0)
            return String(cString: machine)
        }()
        
        //iPhone
        if platform == "iPhone1,1"        { return "iPhone (1st generation)" }
        else if platform == "iPhone1,2"   { return "iPhone 3G" }
        else if platform == "iPhone2,1"   { return "iPhone 3GS" }
        else if platform == "iPhone3,1"   { return "iPhone 4 (GSM)" }
        else if platform == "iPhone3,2"   { return "iPhone 4 (GSM, 2nd revision)" }
        else if platform == "iPhone3,3"   { return "iPhone 4 (CDMA)" }
        else if platform == "iPhone4,1"   { return "iPhone 4S" }
        else if platform == "iPhone5,1"   { return "iPhone 5 (GSM)" }
        else if platform == "iPhone5,2"   { return "iPhone 5 (GSM+CDMA)" }
        else if platform == "iPhone5,3"   { return "iPhone 5c (GSM)" }
        else if platform == "iPhone5,4"   { return "iPhone 5c (GSM+CDMA)" }
        else if platform == "iPhone6,1"   { return "iPhone 5s (GSM)" }
        else if platform == "iPhone6,2"   { return "iPhone 5s (GSM+CDMA)" }
        else if platform == "iPhone7,2"   { return "iPhone 6" }
        else if platform == "iPhone7,1"   { return "iPhone 6 Plus" }
        else if platform == "iPhone8,1"   { return "iPhone 6s" }
        else if platform == "iPhone8,2"   { return "iPhone 6s Plus" }
        else if platform == "iPhone8,4"   { return "iPhone SE" }
        else if platform == "iPhone9,1"   { return "iPhone 7 (GSM+CDMA)" }
        else if platform == "iPhone9,3"   { return "iPhone 7 (GSM)" }
        else if platform == "iPhone9,2"   { return "iPhone 7 Plus (GSM+CDMA)" }
        else if platform == "iPhone9,4"   { return "iPhone 7 Plus (GSM)" }
        else if platform == "iPhone10,1"  { return "iPhone 8 (GSM+CDMA)" }
        else if platform == "iPhone10,4"  { return "iPhone 8 (GSM)" }
        else if platform == "iPhone10,2"  { return "iPhone 8 Plus (GSM+CDMA)" }
        else if platform == "iPhone10,5"  { return "iPhone 8 Plus (GSM)" }
        else if platform == "iPhone10,3"  { return "iPhone X (GSM+CDMA)" }
        else if platform == "iPhone10,6"  { return "iPhone X (GSM)" }
        else if platform == "iPhone11,2"  { return "iPhone XS" }
        else if platform == "iPhone11,6"  { return "iPhone XS Max" }
        else if platform == "iPhone11,8"  { return "iPhone XR" }
        else if platform == "iPhone12,1"  { return "iPhone 11" }
        else if platform == "iPhone12,3"  { return "iPhone 11 Pro" }
        else if platform == "iPhone12,5"  { return "iPhone 11 Pro Max" }
        else if platform == "iPhone12,8"  { return "iPhone SE (2nd generation)" }
        else if platform == "iPhone13,1"  { return "iPhone 12 mini" }
        else if platform == "iPhone13,2"  { return "iPhone 12" }
        else if platform == "iPhone13,3"  { return "iPhone 12 Pro" }
        else if platform == "iPhone13,4"  { return "iPhone 12 Pro Max" }
            
            //iPod Touch
        else if platform == "iPod1,1"     { return "iPod Touch (1st generation)" }
        else if platform == "iPod2,1"     { return "iPod Touch (2nd generation)" }
        else if platform == "iPod3,1"     { return "iPod Touch (3rd generation)" }
        else if platform == "iPod4,1"     { return "iPod Touch (4th generation)" }
        else if platform == "iPod5,1"     { return "iPod Touch (5th generation)" }
        else if platform == "iPod7,1"     { return "iPod Touch (6th generation)" }
        else if platform == "iPod9,1"     { return "iPod Touch (7th generation) (2019)" }
            
            //iPad
        else if platform == "iPad1,1"     { return "iPad (1st generation)" }
        else if platform == "iPad2,1"     { return "iPad 2 (Wi-Fi)" }
        else if platform == "iPad2,2"     { return "iPad 2 (GSM)" }
        else if platform == "iPad2,3"     { return "iPad 2 (CDMA)" }
        else if platform == "iPad2,4"     { return "iPad 2 (Wi-Fi, Mid 2012)" }
        else if platform == "iPad3,1"     { return "iPad (3rd generation) (Wi-Fi)" }
        else if platform == "iPad3,2"     { return "iPad (3rd generation) (GSM+CDMA)" }
        else if platform == "iPad3,3"     { return "iPad (3rd generation) (GSM)" }
        else if platform == "iPad3,4"     { return "iPad (4th generation) (Wi-Fi)"}
        else if platform == "iPad3,5"     { return "iPad (4th generation) (GSM)" }
        else if platform == "iPad3,6"     { return "iPad (4th generation) (GSM+CDMA)" }
        else if platform == "iPad6,11"    { return "iPad (5th generation) (Wi-Fi)" }
        else if platform == "iPad6,12"    { return "iPad (5th generation) (Cellular)" }
        else if platform == "iPad7,5"     { return "iPad (6th generation) (2018) (Wi-Fi)" }
        else if platform == "iPad7,6"     { return "iPad (6th generation) (2018) (Cellular)" }
        else if platform == "iPad7,11"    { return "iPad (7th generation) (2019) (Wi-Fi)" }
        else if platform == "iPad7,12"    { return "iPad (7th generation) (2019) (Cellular)" }
        else if platform == "iPad11,6"    { return "iPad (8th generation) (2020) (Wi-Fi)" }
        else if platform == "iPad11,7"    { return "iPad (8th generation) (2020) (Cellular)" }
            
            //iPad Air
        else if platform == "iPad4,1"     { return "iPad Air (Wi-Fi)" }
        else if platform == "iPad4,2"     { return "iPad Air (Cellular)" }
        else if platform == "iPad4,3"     { return "iPad Air (China)" }
        else if platform == "iPad5,3"     { return "iPad Air 2 (Wi-Fi)" }
        else if platform == "iPad5,4"     { return "iPad Air 2 (Cellular)" }
        else if platform == "iPad11,3"    { return "iPad Air (3rd generation) (2019) (Wi-Fi)" }
        else if platform == "iPad11,4"    { return "iPad Air (3rd generation) (2019) (Cellular)" }
        else if platform == "iPad13,1"    { return "iPad Air (4th generation) (2020) (Wi-Fi)" }
        else if platform == "iPad13,2"    { return "iPad Air (4th generation) (2020) (Cellular)" }
            
            //iPad Pro
        else if platform == "iPad6,3"     { return "iPad Pro 9.7\" (Wi-Fi)" }
        else if platform == "iPad6,4"     { return "iPad Pro 9.7\" (Cellular)" }
        else if platform == "iPad6,7"     { return "iPad Pro 12.9\" (Wi-Fi)" }
        else if platform == "iPad6,8"     { return "iPad Pro 12.9\" (Cellular)" }
        else if platform == "iPad7,1"     { return "iPad Pro 12.9\" (2nd generation) (Wi-Fi)" }
        else if platform == "iPad7,2"     { return "iPad Pro 12.9\" (2nd generation) (Cellular)" }
        else if platform == "iPad7,3"     { return "iPad Pro 10.5\" (Wi-Fi)" }
        else if platform == "iPad7,4"     { return "iPad Pro 10.5\" (Cellular)" }
        else if platform == "iPad8,1"     { return "iPad Pro 11\" (2018) (Wi-Fi)" }
        else if platform == "iPad8,2"     { return "iPad Pro 11\" (2018) (Wi-Fi, 1TB)" }
        else if platform == "iPad8,3"     { return "iPad Pro 11\" (2018) (Cellular)" }
        else if platform == "iPad8,4"     { return "iPad Pro 11\" (2018) (Cellular 1TB)" }
        else if platform == "iPad8,5"     { return "iPad Pro 12.9\" (3rd generation) (2018) (Wi-Fi)" }
        else if platform == "iPad8,6"     { return "iPad Pro 12.9\" (3rd generation) (2018) (Cellular)" }
        else if platform == "iPad8,7"     { return "iPad Pro 12.9\" (3rd generation) (2018) (Wi-Fi, 1TB)" }
        else if platform == "iPad8,8"     { return "iPad Pro 12.9\" (3rd generation) (2018) (Cellular, 1TB)" }
        else if platform == "iPad8,9"     { return "iPad Pro 11\" (2nd generation) (2020) (Wi-Fi)" }
        else if platform == "iPad8,10"    { return "iPad Pro 11\" (2nd generation) (2020) (Cellular)" }
        else if platform == "iPad8,11"    { return "iPad Pro 12.9\" (4th generation) (2020) (Wi-Fi)" }
        else if platform == "iPad8,12"    { return "iPad Pro 12.9\" (4th generation) (2020) (Cellular)" }
            
            //iPad Mini
        else if platform == "iPad2,5"     { return "iPad mini (Wi-Fi)" }
        else if platform == "iPad2,6"     { return "iPad mini (GSM)" }
        else if platform == "iPad2,7"     { return "iPad mini (GSM+CDMA)" }
        else if platform == "iPad4,4"     { return "iPad mini 2 (Wi-Fi)" }
        else if platform == "iPad4,5"     { return "iPad mini 2 (Cellular)" }
        else if platform == "iPad4,6"     { return "iPad mini 2 (China)" }
        else if platform == "iPad4,7"     { return "iPad mini 3 (Wi-Fi)" }
        else if platform == "iPad4,8"     { return "iPad mini 3 (Cellular)" }
        else if platform == "iPad4,9"     { return "iPad mini 3 (China)" }
        else if platform == "iPad5,1"     { return "iPad mini 4 (Wi-Fi)" }
        else if platform == "iPad5,2"     { return "iPad mini 4 (Cellular)" }
        else if platform == "iPad11,1"    { return "iPad mini (5th generation) (2019) (Wi-Fi)" }
        else if platform == "iPad11,2"    { return "iPad mini (5th generation) (2019) (Cellular)" }
            
            //Apple TV
        else if platform == "AppleTV2,1"  { return "Apple TV 2G" }
        else if platform == "AppleTV3,1"  { return "Apple TV 3" }
        else if platform == "AppleTV3,2"  { return "Apple TV 3 (2013)" }
        else if platform == "AppleTV5,3"  { return "Apple TV 4" }
        else if platform == "AppleTV6,2"  { return "Apple TV 4K" }
            
            //Apple Watch
        else if platform == "Watch1,1"    { return "Apple Watch (1st generation) (38mm)" }
        else if platform == "Watch1,2"    { return "Apple Watch (1st generation) (42mm)" }
        else if platform == "Watch2,6"    { return "Apple Watch Series 1 (38mm)" }
        else if platform == "Watch2,7"    { return "Apple Watch Series 1 (42mm)" }
        else if platform == "Watch2,3"    { return "Apple Watch Series 2 (38mm)" }
        else if platform == "Watch2,4"    { return "Apple Watch Series 2 (42mm)" }
        else if platform == "Watch3,1"    { return "Apple Watch Series 3 (38mm Cellular)" }
        else if platform == "Watch3,2"    { return "Apple Watch Series 3 (42mm Cellular)" }
        else if platform == "Watch3,3"    { return "Apple Watch Series 3 (38mm)" }
        else if platform == "Watch3,4"    { return "Apple Watch Series 3 (42mm)" }
        else if platform == "Watch4,1"    { return "Apple Watch Series 4 (40mm)" }
        else if platform == "Watch4,2"    { return "Apple Watch Series 4 (44mm)" }
        else if platform == "Watch4,3"    { return "Apple Watch Series 4 (40mm Cellular)" }
        else if platform == "Watch4,4"    { return "Apple Watch Series 4 (44mm Cellular)" }
        else if platform == "Watch5,1"    { return "Apple Watch Series 5 (40mm)" }
        else if platform == "Watch5,2"    { return "Apple Watch Series 5 (44mm)" }
        else if platform == "Watch5,3"    { return "Apple Watch Series 5 (40mm Cellular)" }
        else if platform == "Watch5,4"    { return "Apple Watch Series 5 (44mm Cellular)" }
        else if platform == "Watch6,1"    { return "Apple Watch Series 6 (40mm)" }
        else if platform == "Watch6,2"    { return "Apple Watch Series 6 (44mm)" }
        else if platform == "Watch6,3"    { return "Apple Watch Series 6 (40mm Cellular)" }
        else if platform == "Watch6,4"    { return "Apple Watch Series 6 (44mm Cellular)" }
        else if platform == "Watch5,9"    { return "Apple Watch SE (40mm)" }
        else if platform == "Watch5,10"   { return "Apple Watch SE (44mm)" }
        else if platform == "Watch5,11"   { return "Apple Watch SE (40mm Cellular)" }
        else if platform == "Watch5,12"   { return "Apple Watch SE (44mm Cellular)" }
            
            //Simulator
        else if platform == "i386"        { return "Simulator" }
        else if platform == "x86_64"      { return "Simulator"}
        
        return platform
    }
    

    You can test it using following code:

    print("Current device is: ", self.userDeviceName())
    

    Objective-C

    I also added new devices to the Objective-C code

    Don't forget to import sys/sysctl.h

         #import <sys/sysctl.h>  
               
                
    - (NSString *) userDeviceName {
        size_t size;
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        char *machine = malloc(size);
        sysctlbyname("hw.machine", machine, &size, NULL, 0);
        NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
        
        free(machine);
        
            //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,2"])   return @"iPhone XS";
            if ([platform isEqualToString:@"iPhone11,6"])   return @"iPhone XS Max";
            if ([platform isEqualToString:@"iPhone11,8"])   return @"iPhone XR";
            if ([platform isEqualToString:@"iPhone12,1"])   return @"iPhone 11";
            if ([platform isEqualToString:@"iPhone12,3"])   return @"iPhone 11 Pro";
            if ([platform isEqualToString:@"iPhone12,5"])   return @"iPhone 11 Pro Max";
            if ([platform isEqualToString:@"iPhone12,8"])   return @"iPhone SE (2nd generation)";
            if ([platform isEqualToString:@"iPhone13,1"])   return @"iPhone 12 mini";
            if ([platform isEqualToString:@"iPhone13,2"])   return @"iPhone 12";
            if ([platform isEqualToString:@"iPhone13,3"])   return @"iPhone 12 Pro";
            if ([platform isEqualToString:@"iPhone13,4"])   return @"iPhone 12 Pro Max";
            
            //iPod Touch
            if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch (1st generation)";
            if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch (2nd generation)";
            if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch (3rd generation)";
            if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch (4th generation)";
            if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch (5th generation)";
            if ([platform isEqualToString:@"iPod7,1"])      return @"iPod Touch (6th generation)";
            if ([platform isEqualToString:@"iPod9,1"])      return @"iPod Touch (7th generation) (2019)";
            
            //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:@"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:@"iPad6,11"])     return @"iPad (5th generation) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad6,12"])     return @"iPad (5th generation) (Cellular)";
            if ([platform isEqualToString:@"iPad7,5"])      return @"iPad (6th generation) (2018) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad7,6"])      return @"iPad (6th generation) (2018) (Cellular)";
            if ([platform isEqualToString:@"iPad7,11"])     return @"iPad (7th generation) (2019) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad7,12"])     return @"iPad (7th generation) (2019) (Cellular)";
            if ([platform isEqualToString:@"iPad11,6"])     return @"iPad (8th generation) (2020) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad11,7"])     return @"iPad (8th generation) (2020) (Cellular)";
            
            //iPad Air
            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:@"iPad5,3"])      return @"iPad Air 2 (Wi-Fi)";
            if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
            if ([platform isEqualToString:@"iPad11,3"])     return @"iPad Air (3rd generation) (2019) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad11,4"])     return @"iPad Air (3rd generation) (2019) (Cellular)";
            if ([platform isEqualToString:@"iPad13,1"])     return @"iPad Air (4th generation) (2020) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad13,2"])     return @"iPad Air (4th generation) (2020) (Cellular)";
            
            //iPad Pro
            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:@"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:@"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\" (3rd generation) (2018) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad8,6"])      return @"iPad Pro 12.9\" (3rd generation) (2018) (Cellular)";
            if ([platform isEqualToString:@"iPad8,7"])      return @"iPad Pro 12.9\" (3rd generation) (2018) (Wi-Fi, 1TB)";
            if ([platform isEqualToString:@"iPad8,8"])      return @"iPad Pro 12.9\" (3rd generation) (2018) (Cellular, 1TB)";
            if ([platform isEqualToString:@"iPad8,9"])      return @"iPad Pro 11\" (2nd generation) (2020) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad8,10"])     return @"iPad Pro 11\" (2nd generation) (2020) (Cellular)";
            if ([platform isEqualToString:@"iPad8,11"])     return @"iPad Pro 12.9\" (4th generation) (2020) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad8,12"])     return @"iPad Pro 12.9\" (4th generation) (2020) (Cellular)";
            
            //iPad mini
            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:@"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:@"iPad11,1"])     return @"iPad mini (5th generation) (2019) (Wi-Fi)";
            if ([platform isEqualToString:@"iPad11,2"])     return @"iPad mini (5th generation) (2019) (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)";
            if ([platform isEqualToString:@"Watch6,1"])     return @"Apple Watch Series 6 (40mm)";
            if ([platform isEqualToString:@"Watch6,2"])     return @"Apple Watch Series 6 (44mm)";
            if ([platform isEqualToString:@"Watch6,3"])     return @"Apple Watch Series 6 (40mm Cellular)";
            if ([platform isEqualToString:@"Watch6,4"])     return @"Apple Watch Series 6 (44mm Cellular)";
            if ([platform isEqualToString:@"Watch5,9"])     return @"Apple Watch SE (40mm)";
            if ([platform isEqualToString:@"Watch5,10"])    return @"Apple Watch SE (44mm)";
            if ([platform isEqualToString:@"Watch5,11"])    return @"Apple Watch SE (40mm Cellular)";
            if ([platform isEqualToString:@"Watch5,12"])    return @"Apple Watch SE (44mm Cellular)";
            
            //Simulator
            if ([platform isEqualToString:@"i386"])         return @"Simulator";
            if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
        
        return platform;
    }
    

    You can test it using following code:

    NSLog(@"Current device is: %@", [self userDeviceName]);
    
    0 讨论(0)
  • 2020-11-21 12:01

    More usable

    #include <sys/types.h>
    #include <sys/sysctl.h>
    
    @interface UIDevice(Hardware)
    
    - (NSString *) platform;
    
    - (BOOL)hasRetinaDisplay;
    
    - (BOOL)hasMultitasking;
    
    - (BOOL)hasCamera;
    
    @end
    
    @implementation UIDevice(Hardware)
    
    - (NSString *) platform{
        int mib[2];
    size_t len;
    char *machine;
    
    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;
    sysctl(mib, 2, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2, machine, &len, NULL, 0);
    
        NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
        free(machine);
    return platform;
    }
    
    - (BOOL)hasRetinaDisplay {
        NSString *platform = [self platform];
        BOOL ret = YES;
        if ([platform isEqualToString:@"iPhone1,1"]) {
            ret = NO;
        }
        else
            if ([platform isEqualToString:@"iPhone1,2"])    ret = NO;
        else 
            if ([platform isEqualToString:@"iPhone2,1"])    ret = NO;
        else 
            if ([platform isEqualToString:@"iPod1,1"])      ret = NO;
        else
            if ([platform isEqualToString:@"iPod2,1"])      ret = NO;
        else
            if ([platform isEqualToString:@"iPod3,1"])      ret = NO;
        return ret;
    }
    
    - (BOOL)hasMultitasking {
        if ([self respondsToSelector:@selector(isMultitaskingSupported)]) {
            return [self isMultitaskingSupported];
        }
        return NO;
    }
    
    - (BOOL)hasCamera {
       BOOL ret = NO;
       // check camera availability
       return ret;
    }
    
    @end
    

    you can reading properties with

    NSLog(@"platform %@, retita %@, multitasking %@", [[UIDevice currentDevice] platform], [[UIDevice currentDevice] hasRetinaDisplay] ? @"YES" : @"NO" , [[UIDevice currentDevice] hasMultitasking] ? @"YES" : @"NO");
    
    0 讨论(0)
  • 2020-11-21 12:01

    Dutchie432 and Brian Robbins have provided great solutions. But there's still one model missing, the Verizon iPhone 4. Here's the missing line.

    if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4"; //Verizon
    
    0 讨论(0)
  • 2020-11-21 12:01

    I've created an extension that lets you to have 3 levels of identification:

    1. type of device
    2. type of iPhone/iPad by inch
    3. model of device

    It updates with last iOS devices

    UIDeviceDetector

    0 讨论(0)
  • 2020-11-21 12:03

    I know an answer has been ticked already, but for future reference, you could always use the device screen size to figure out which device it is like so:

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    
        CGSize result = [[UIScreen mainScreen] bounds].size;
    
        if (result.height == 480) {
            // 3.5 inch display - iPhone 4S and below
            NSLog(@"Device is an iPhone 4S or below");
        }
    
        else if (result.height == 568) {
            // 4 inch display - iPhone 5
            NSLog(@"Device is an iPhone 5/S/C");
        }
    
        else if (result.height == 667) {
            // 4.7 inch display - iPhone 6
            NSLog(@"Device is an iPhone 6");
        }
    
        else if (result.height == 736) {
            // 5.5 inch display - iPhone 6 Plus
            NSLog(@"Device is an iPhone 6 Plus");
        }
    } 
    
    else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
           // iPad 9.7 or 7.9 inch display.
           NSLog(@"Device is an iPad.");
    }
    
    0 讨论(0)
  • 2020-11-21 12:03

    Based on the very good answers above, here is what I came up with. This is very similar to @Rodrigo's answer, but addresses @Oliver's concern from the comment on that answer. This also provides the option of including the model string in the output string.

    + (NSString *) deviceModel {
        size_t size;
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        char *model = malloc(size);
        sysctlbyname("hw.machine", model, &size, NULL, 0);
        NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
        free(model);      
    
        return deviceModel;
    }
    
    + (NSString *) deviceName {
        NSString *deviceModel = [DeviceGateway deviceModel];                    
    
        if ([deviceModel isEqual:@"i386"])      return @"Simulator";  //iPhone Simulator
        if ([deviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G";   //iPhone 1G
        if ([deviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G";   //iPhone 3G
        if ([deviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS";  //iPhone 3GS
        if ([deviceModel isEqual:@"iPhone3,1"]) return @"iPhone4";    //iPhone 4 - AT&T
        if ([deviceModel isEqual:@"iPhone3,2"]) return @"iPhone4";    //iPhone 4 - Other carrier
        if ([deviceModel isEqual:@"iPhone3,3"]) return @"iPhone4";    //iPhone 4 - Other carrier
        if ([deviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S";   //iPhone 4S
        if ([deviceModel isEqual:@"iPod1,1"])   return @"iPod1stGen"; //iPod Touch 1G
        if ([deviceModel isEqual:@"iPod2,1"])   return @"iPod2ndGen"; //iPod Touch 2G
        if ([deviceModel isEqual:@"iPod3,1"])   return @"iPod3rdGen"; //iPod Touch 3G
        if ([deviceModel isEqual:@"iPod4,1"])   return @"iPod4thGen"; //iPod Touch 4G
        if ([deviceModel isEqual:@"iPad1,1"])   return @"iPadWiFi";   //iPad Wifi
        if ([deviceModel isEqual:@"iPad1,2"])   return @"iPad3G";     //iPad 3G
        if ([deviceModel isEqual:@"iPad2,1"])   return @"iPad2";      //iPad 2 (WiFi)
        if ([deviceModel isEqual:@"iPad2,2"])   return @"iPad2";      //iPad 2 (GSM)
        if ([deviceModel isEqual:@"iPad2,3"])   return @"iPad2";      //iPad 2 (CDMA)
    
        NSString *aux = [[deviceModel componentsSeparatedByString:@","] objectAtIndex:0];
    
        //If a newer version exists
        if ([aux rangeOfString:@"iPhone"].location != NSNotFound) {
            int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
            if (version == 3) return @"iPhone4";
            if (version == 4) return @"iPhone4s";
            return @"Newer iPhone";
        }
        if ([aux rangeOfString:@"iPod"].location != NSNotFound) {
            int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
            if (version == 4) return @"iPod4thGen";
            return @"Newer iPod";
        }
        if ([aux rangeOfString:@"iPad"].location != NSNotFound) {
            int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
            if (version == 1) return @"iPad3G";
            if (version == 2) return @"iPad2";
            return @"Newer iPad";
        }
    
        //If none was found, send the original string
        return deviceModel;
    }
    
    + (NSString *) deviceNameWithDeviceModel:(BOOL)shouldIncludeDeviceModel {
        if (shouldIncludeDeviceModel) {
            return [NSString stringWithFormat:@"%@ (%@)", [DeviceGateway deviceName], [DeviceGateway deviceModel]];
        }
    
        return [DeviceGateway deviceName];
    }
    
    0 讨论(0)
提交回复
热议问题