用iPhone SDK确定设备(iPhone,iPod Touch)

有没有办法确定运行应用程序的设备。 如果可能,我想区分iPhoneiPod Touch

你可以像这样使用UIDevice类:

 NSString *deviceType = [UIDevice currentDevice].model; if([deviceType isEqualToString:@"iPhone"]) // it's an iPhone 

这是上面的答案 UIDeviceHardware.m的更新。

 - (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,3"]) return @"Verizon iPhone 4"; 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,1"]) return @"iPhone 6"; if ([platform isEqualToString:@"iPhone7,2"]) 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:@"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:@"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 (WiFi)"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; 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 3 (WiFi)"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+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 4 (GSM)"; 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 (Cellular)"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (WiFi)"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)"; if ([platform isEqualToString:@"iPad5,1"]) return @"iPad mini 4 (WiFi)"; if ([platform isEqualToString:@"iPad5,2"]) return @"iPad mini 4 (Cellular)"; if ([platform isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (WiFi)"; if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)"; if ([platform isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7 inch (WiFi)"; if ([platform isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7 inch (Cellular)"; if ([platform isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9 inch (WiFi)"; if ([platform isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9 inch (Cellular)"; if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 

请随意使用这个类( gist @ github )

代码已删除并重新与

https://gist.github.com/1323251

更新 (01/14/11)

显然,这段代码现在已经有点过时了,但是它肯定可以用Brian Robbins提供的这个线程上的代码进行更新,它包含了与更新模型类似的代码。 感谢您对此主题的支持。

我在我的应用程序中使用这个。 截至2012年12月为止。

 - (NSString *) platformString { // Gets a string with the device model 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); 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:@"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)"; 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:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 
 if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) { //Device is ipad }else{ //Device is iphone } 

最新更新 – 2017年9月新增iPhone XiPhone 8iPhone 8 PlusApple Watch Series 3Apple TV 4K

以前的更新 – 2017年6月:增加了iPad Pro 10,5“ iPad Pro 12,9”第二代


迅速

(testingSwift 4,Swift 3)

下面的函数返回当前设备名称的string

 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)" } //iPod Touch else if platform == "iPod1,1" { return "iPod Touch 1G" } else if platform == "iPod2,1" { return "iPod Touch 2G" } else if platform == "iPod3,1" { return "iPod Touch 3G" } else if platform == "iPod4,1" { return "iPod Touch 4G" } else if platform == "iPod5,1" { return "iPod Touch 5G" } else if platform == "iPod7,1" { return "iPod Touch 6G" } //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)" } //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)" } //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)" } //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)" } //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)" } //Simulator else if platform == "i386" { return "Simulator" } else if platform == "x86_64" { return "Simulator"} return platform } 

你可以使用下面的代码来testing它:

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

Objective-C的

我还为Objective-C代码添加了新设备

不要忘记导入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)"; //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"; //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)"; //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)"; //Simulator if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 

你可以使用下面的代码来testing它:

 NSLog(@"Current device is: %@", [self userDeviceName]); 

iPad Air 2iPad mini 3更新平台string:

 - (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,3"]) return @"Verizon iPhone 4"; 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,1"]) return @"iPhone 6 Plus"; if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; 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 (WiFi)"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; 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 3 (WiFi)"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+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 4 (GSM)"; 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 (Cellular)"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (WiFi)"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)"; if ([platform isEqualToString:@"iPad4,7"]) return @"iPad mini 3 (WiFi)"; if ([platform isEqualToString:@"iPad4,8"]) return @"iPad mini 3 (Cellular)"; if ([platform isEqualToString:@"iPad4,9"]) return @"iPad mini 3 (China Model)"; if ([platform isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (WiFi)"; if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)"; if ([platform isEqualToString:@"iPad6,8"]) return @"iPad Pro"; if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 

更可用

 #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 

你可以阅读属性

 NSLog(@"platform %@, retita %@, multitasking %@", [[UIDevice currentDevice] platform], [[UIDevice currentDevice] hasRetinaDisplay] ? @"YES" : @"NO" , [[UIDevice currentDevice] hasMultitasking] ? @"YES" : @"NO"); 

这里是一个小模型的更新:

 - (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:@"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:@"i386"]) return @"iPhone Simulator"; return platform; } 

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."); } 

Just adding the iPhone 4S device code to this thread…

The iPhone 4S will return the string @"iPhone4,1".

How about this code, if new version was released, you will identifier with the last know device

 - (NSString *)getModel { size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *model = malloc(size); sysctlbyname("hw.machine", model, &size, NULL, 0); NSString *sDeviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding]; free(model); if ([sDeviceModel isEqual:@"i386"]) return @"Simulator"; //iPhone Simulator if ([sDeviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G"; //iPhone 1G if ([sDeviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G"; //iPhone 3G if ([sDeviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS"; //iPhone 3GS if ([sDeviceModel isEqual:@"iPhone3,1"]) return @"iPhone3GS"; //iPhone 4 - AT&T if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone3GS"; //iPhone 4 - Other carrier if ([sDeviceModel isEqual:@"iPhone3,3"]) return @"iPhone4"; //iPhone 4 - Other carrier if ([sDeviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S"; //iPhone 4S if ([sDeviceModel isEqual:@"iPod1,1"]) return @"iPod1stGen"; //iPod Touch 1G if ([sDeviceModel isEqual:@"iPod2,1"]) return @"iPod2ndGen"; //iPod Touch 2G if ([sDeviceModel isEqual:@"iPod3,1"]) return @"iPod3rdGen"; //iPod Touch 3G if ([sDeviceModel isEqual:@"iPod4,1"]) return @"iPod4thGen"; //iPod Touch 4G if ([sDeviceModel isEqual:@"iPad1,1"]) return @"iPadWiFi"; //iPad Wifi if ([sDeviceModel isEqual:@"iPad1,2"]) return @"iPad3G"; //iPad 3G if ([sDeviceModel isEqual:@"iPad2,1"]) return @"iPad2"; //iPad 2 (WiFi) if ([sDeviceModel isEqual:@"iPad2,2"]) return @"iPad2"; //iPad 2 (GSM) if ([sDeviceModel isEqual:@"iPad2,3"]) return @"iPad2"; //iPad 2 (CDMA) NSString *aux = [[sDeviceModel componentsSeparatedByString:@","] objectAtIndex:0]; //If a newer version exist if ([aux rangeOfString:@"iPhone"].location!=NSNotFound) { int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue]; if (version == 3) return @"iPhone4" if (version >= 4) return @"iPhone4s"; } if ([aux rangeOfString:@"iPod"].location!=NSNotFound) { int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue]; if (version >=4) return @"iPod4thGen"; } if ([aux rangeOfString:@"iPad"].location!=NSNotFound) { int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue]; if (version ==1) return @"iPad3G"; if (version >=2) return @"iPad2"; } //If none was found, send the original string return sDeviceModel; } 

Adding to Arash's code, I don't care for my app what model I'm using, I just want to know what kind of device, so, I can test as follows:

  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { NSLog(@"I'm definitely an iPad"); } else { NSString *deviceType = [UIDevice currentDevice].model; if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound) { NSLog(@"I must be an iPhone"); } else { NSLog(@"I think I'm an iPod"); } } 

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

There's a pretty mature library (by me) for that called SDVersion . You can check for running device's model, screen size and many other parameters. It also supports OSX.

例:

  // Check for device model if ([SDVersion deviceVersion] == iPhone6) NSLog(@"You got the iPhone 6. Sweet 🍭!"); else if ([SDVersion deviceVersion] == iPhone6Plus) NSLog(@"iPhone 6 Plus? Bigger is better!"); else if ([SDVersion deviceVersion] == iPadAir2) NSLog(@"You own an iPad Air 2 🌀!"); // Check for device screen size if ([SDVersion deviceSize] == Screen4inch) NSLog(@"Your screen is 4 inches"); 
 NSString *deviceType = [UIDevice currentDevice].model; 
 #import <sys/utsname.h> NSString *iPhone = [self iPhoneVersion]; -(NSString*)iPhoneVersion { NSString *platform; struct utsname systemInfo; uname(&systemInfo); platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; 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,3"]) return @"VerizoniPhone 4"; 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:@"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 (WiFi)"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; 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 3 (WiFi)"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+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 4 (GSM)"; 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 (Cellular)"; if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G (WiFi)"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G (Cellular)"; if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G"; if ([platform isEqualToString:@"iPad4,7"]) return @"iPad Mini 3 (WiFi)"; if ([platform isEqualToString:@"iPad4,8"]) return @"iPad Mini 3 (Cellular)"; if ([platform isEqualToString:@"iPad4,9"]) return @"iPad Mini 3 (China)"; if ([platform isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (WiFi)"; if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)"; 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:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } 

I took it a bit further and converted the big "isEqualToString" block into a classification of bit masks for the device type, the generation, and that other qualifier after the comma (I'm calling it the sub generation). It is wrapped in a class with a singleton call SGPlatform which avoids a lot of repetitive string operations. Code is available https://github.com/danloughney/spookyGroup

The class lets you do things like this:

 if ([SGPlatform iPad] && [SGPlatform generation] > 3) { // set for high performance } 

 switch ([SGPlatform deviceMask]) { case DEVICE_IPHONE: break; case DEVICE_IPAD: break; case DEVICE_IPAD_MINI: break; } 

The classification of the devices is in the platformBits method. That method should be very familiar to the readers of this thread. I have classified the devices by their type and generation because I'm mostly interested in the overall performance, but the source can be tweaked to provide any classification that you are interested in, retina screen, networking capabilities, etc..

Below mentioned code snippet should help :

  if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { // iPhone device } else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { // iPad device } else { // Other device ie iPod } 
 - (BOOL)deviceiPhoneOriPod { NSString *deviceType = [UIDevice currentDevice].model; if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound) return YES; else return NO; } 

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 

I like Erica Sadun's stuff. She includes AppleTV devices and others you might not think of.

https://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.h

Answer in Swift 3,

 struct DeviceInformation { // UIDevice.current.model's value is "iPhone" or "iPad",which does not include details; the following "model" is detailed, such as, iPhone7,1 is actually iPhone 6 plus static let model: 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) }() static let uuid = UIDevice.current.identifierForVendor?.uuidString ?? "" static let idForAdService = ASIdentifierManager.shared().advertisingIdentifier.uuidString static func diviceTypeReadableName() -> String { switch model { case "iPhone1,1": return "iPhone 1G" case "iPhone1,2": return "iPhone 3G" case "iPhone2,1": return "iPhone 3GS" case "iPhone3,1": return "iPhone 4" case "iPhone3,3": return "iPhone 4 (Verizon)" case "iPhone4,1": return "iPhone 4S" case "iPhone5,1": return "iPhone 5 (GSM)" case "iPhone5,2": return "iPhone 5 (GSM+CDMA)" case "iPhone5,3": return "iPhone 5c (GSM)" case "iPhone5,4": return "iPhone 5c (GSM+CDMA)" case "iPhone6,1": return "iPhone 5s (GSM)" case "iPhone6,2": return "iPhone 5s (GSM+CDMA)" case "iPhone7,2": return "iPhone 6" case "iPhone7,1": return "iPhone 6 Plus" case "iPhone8,1": return "iPhone 6s" case "iPhone8,2": return "iPhone 6s Plus" case "iPhone8,4": return "iPhone SE" case "iPhone9,1": return "iPhone 7" case "iPhone9,3": return "iPhone 7" case "iPhone9,2": return "iPhone 7 Plus" case "iPhone9,4": return "iPhone 7 Plus" case "iPod1,1": return "iPod Touch 1G" case "iPod2,1": return "iPod Touch 2G" case "iPod3,1": return "iPod Touch 3G" case "iPod4,1": return "iPod Touch 4G" case "iPod5,1": return "iPod Touch 5G" case "iPod7,1": return "iPod Touch 6G" case "iPad1,1": return "iPad 1G" case "iPad2,1": return "iPad 2 (Wi-Fi)" case "iPad2,2": return "iPad 2 (GSM)" case "iPad2,3": return "iPad 2 (CDMA)" case "iPad2,4": return "iPad 2 (Wi-Fi)" case "iPad2,5": return "iPad Mini (Wi-Fi)" case "iPad2,6": return "iPad Mini (GSM)" case "iPad2,7": return "iPad Mini (GSM+CDMA)" case "iPad3,1": return "iPad 3 (Wi-Fi)" case "iPad3,2": return "iPad 3 (GSM+CDMA)" case "iPad3,3": return "iPad 3 (GSM)" case "iPad3,4": return "iPad 4 (Wi-Fi)" case "iPad3,5": return "iPad 4 (GSM)" case "iPad3,6": return "iPad 4 (GSM+CDMA)" case "iPad4,1": return "iPad Air (Wi-Fi)" case "iPad4,2": return "iPad Air (Cellular)" case "iPad4,3": return "iPad Air (China)" case "iPad4,4": return "iPad Mini 2G (Wi-Fi)" case "iPad4,5": return "iPad Mini 2G (Cellular)" case "iPad4,6": return "iPad Mini 2G (China)" case "iPad4,7": return "iPad Mini 3 (Wi-Fi)" case "iPad4,8": return "iPad Mini 3 (Cellular)" case "iPad4,9": return "iPad Mini 3 (China)" case "iPad5,1": return "iPad Mini 4 (Wi-Fi)" case "iPad5,2": return "iPad Mini 4 (Cellular)" case "iPad5,3": return "iPad Air 2 (Wi-Fi)" case "iPad5,4": return "iPad Air 2 (Cellular)" case "iPad6,3": return "iPad Pro 9.7' (Wi-Fi)" case "iPad6,4": return "iPad Pro 9.7' (Cellular)" case "iPad6,7": return "iPad Pro 12.9' (Wi-Fi)" case "iPad6,8": return "iPad Pro 12.9' (Cellular)" case "AppleTV2,1": return "Apple TV 2G" case "AppleTV3,1": return "Apple TV 3" case "AppleTV3,2": return "Apple TV 3 (2013)" case "AppleTV5,3": return "Apple TV 4" case "Watch1,1": return "Apple Watch Series 1 (38mm, S1)" case "Watch1,2": return "Apple Watch Series 1 (42mm, S1)" case "Watch2,6": return "Apple Watch Series 1 (38mm, S1P)" case "Watch2,7": return "Apple Watch Series 1 (42mm, S1P)" case "Watch2,3": return "Apple Watch Series 2 (38mm, S2)" case "Watch2,4": return "Apple Watch Series 2 (42mm, S2)" case "i386": return "Simulator" case "x86_64": return "Simulator" default: return "" } } } 

I'd like to add that to retrieve the front and enclosure color of the device there's a private API:

 UIDevice *device = [UIDevice currentDevice]; SEL selector = NSSelectorFromString([device.systemVersion hasPrefix:@"7"] ? @"_deviceInfoForKey:" : @"deviceInfoForKey:"); if ([device respondsToSelector:selector]) { NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]); } 

I've blogged about this and provide a sample app:

http://www.futuretap.com/blog/device-colors/

 NSString *deviceType = [[UIDevice currentDevice] systemName]; 

I can assure that the above suggested one will work in iOS 7 and above. I believe it will work in iOS 6 too. But am not sure about that.

You can check GBDeviceInfo on GitHub, also available via CocoaPods. It provides simple API for detecting various properties with support of all latest devices:

  • Device family

[GBDeviceInfo deviceDetails].family == GBDeviceFamilyiPhone;

  • Device model

[GBDeviceInfo deviceDetails].model == GBDeviceModeliPhone6.

For more see Readme .

The possible vales of

 [[UIDevice currentDevice] model]; 

are iPod touch , iPhone , iPhone Simulator , iPad , iPad Simulator

If you want to know which hardware iOS is ruining on like iPhone3 , iPhone4 , iPhone5 etc below is the code for that


NOTE: The below code may not contain all device's string, I'm with other guys are maintaining the same code on GitHub so please take the latest code from there

Objective-C : GitHub/DeviceUtil

Swift : GitHub/DeviceGuru


 #include <sys/types.h> #include <sys/sysctl.h> - (NSString*)hardwareDescription { NSString *hardware = [self hardwareString]; if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G"; if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G"; if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G"; if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad"; if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini"; if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI"; //there are lots of other strings too, checkout the github repo //link is given at the top of this answer if ([hardware isEqualToString:@"i386"]) return @"Simulator"; if ([hardware isEqualToString:@"x86_64"]) return @"Simulator"; return nil; } - (NSString*)hardwareString { size_t size = 100; char *hw_machine = malloc(size); int name[] = {CTL_HW,HW_MACHINE}; sysctl(name, 2, hw_machine, &size, NULL, 0); NSString *hardware = [NSString stringWithUTF8String:hw_machine]; free(hw_machine); return hardware; } 

To identifiy iPhone 4S, simply check the following:

 var isIphone4S: Bool { let width = UIScreen.main.bounds.size.width let height = UIScreen.main.bounds.size.height let proportions = width > height ? width / height : height / width return proportions == 1.5 && UIDevice.current.model == "iPhone" } 

Update platform string.

 // Created from this thread: https://gist.github.com/Jaybles/1323251 // Apple TV if ([platform isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G"; if ([platform isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G"; if ([platform isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; if ([platform isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // Apple Watch if ([platform isEqualToString:@"Watch1,1"]) return @"Apple Watch"; if ([platform isEqualToString:@"Watch1,2"]) return @"Apple Watch"; // iPhone 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 (GSM)"; if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM/2012)"; 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 (GSM)"; if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)"; if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)"; if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)"; 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 (Global)"; if ([platform isEqualToString:@"iPhone9,3"]) return @"iPhone 7 (GSM)"; if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus (Global)"; if ([platform isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus (GSM)"; // iPad if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1"; 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 (Mid 2012)"; 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 4 (GSM)"; if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)"; // iPad Air if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; 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 (WiFi)"; if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)"; // iPad Mini if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)"; if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (Global)"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2 (WiFi)"; 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 (WiFi)"; 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 (WiFi)"; if ([platform isEqualToString:@"iPad5,2"]) return @"iPad Mini 4 (Cellular)"; // iPad Pro if ([platform isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch/WiFi)"; if ([platform isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch/Cellular)"; if ([platform isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch/WiFi)"; if ([platform isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch/Cellular)"; // iPod 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"; // Simulator if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator";