How to get device make and model on iOS?











up vote
208
down vote

favorite
161












I was wondering if it's possible to determine what kind of iPhone (for example) the currentdevice is? I know it's possible to get the model through
NSString *deviceType = [[UIDevice currentDevice] model];

which will just return whether I have an "iPhone" or an "iPod", BUT I was wondering if it's possible to detect/know if I have an iPhone 3GS vs. and iPhone 4 vs. an iPhone 4S (in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff).



So yeah, let me know, thank you!










share|improve this question
























  • this answer might help: stackoverflow.com/a/10240849/653513
    – Rok Jarc
    Jun 25 '12 at 21:26






  • 1




    "(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
    – Nicolas Miari
    Jul 26 '17 at 5:24










  • This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
    – Nicolas Miari
    Jul 26 '17 at 5:26












  • Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
    – Aleem
    Apr 4 at 11:23















up vote
208
down vote

favorite
161












I was wondering if it's possible to determine what kind of iPhone (for example) the currentdevice is? I know it's possible to get the model through
NSString *deviceType = [[UIDevice currentDevice] model];

which will just return whether I have an "iPhone" or an "iPod", BUT I was wondering if it's possible to detect/know if I have an iPhone 3GS vs. and iPhone 4 vs. an iPhone 4S (in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff).



So yeah, let me know, thank you!










share|improve this question
























  • this answer might help: stackoverflow.com/a/10240849/653513
    – Rok Jarc
    Jun 25 '12 at 21:26






  • 1




    "(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
    – Nicolas Miari
    Jul 26 '17 at 5:24










  • This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
    – Nicolas Miari
    Jul 26 '17 at 5:26












  • Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
    – Aleem
    Apr 4 at 11:23













up vote
208
down vote

favorite
161









up vote
208
down vote

favorite
161






161





I was wondering if it's possible to determine what kind of iPhone (for example) the currentdevice is? I know it's possible to get the model through
NSString *deviceType = [[UIDevice currentDevice] model];

which will just return whether I have an "iPhone" or an "iPod", BUT I was wondering if it's possible to detect/know if I have an iPhone 3GS vs. and iPhone 4 vs. an iPhone 4S (in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff).



So yeah, let me know, thank you!










share|improve this question















I was wondering if it's possible to determine what kind of iPhone (for example) the currentdevice is? I know it's possible to get the model through
NSString *deviceType = [[UIDevice currentDevice] model];

which will just return whether I have an "iPhone" or an "iPod", BUT I was wondering if it's possible to detect/know if I have an iPhone 3GS vs. and iPhone 4 vs. an iPhone 4S (in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff).



So yeah, let me know, thank you!







ios objective-c iphone ipad






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Aug 11 '17 at 15:32









jww

51.9k37211478




51.9k37211478










asked Jun 25 '12 at 21:19









Nathan Fraenkel

1,45241320




1,45241320












  • this answer might help: stackoverflow.com/a/10240849/653513
    – Rok Jarc
    Jun 25 '12 at 21:26






  • 1




    "(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
    – Nicolas Miari
    Jul 26 '17 at 5:24










  • This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
    – Nicolas Miari
    Jul 26 '17 at 5:26












  • Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
    – Aleem
    Apr 4 at 11:23


















  • this answer might help: stackoverflow.com/a/10240849/653513
    – Rok Jarc
    Jun 25 '12 at 21:26






  • 1




    "(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
    – Nicolas Miari
    Jul 26 '17 at 5:24










  • This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
    – Nicolas Miari
    Jul 26 '17 at 5:26












  • Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
    – Aleem
    Apr 4 at 11:23
















this answer might help: stackoverflow.com/a/10240849/653513
– Rok Jarc
Jun 25 '12 at 21:26




this answer might help: stackoverflow.com/a/10240849/653513
– Rok Jarc
Jun 25 '12 at 21:26




1




1




"(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
– Nicolas Miari
Jul 26 '17 at 5:24




"(in actuality, all I really want to do is determine if I have a 3G or not, because I'm doing fairly graphics intensive stuff)." - In your case, Apple wisely recommends that you check against the availability of the features you're after, instead of checking the actual device model and making a judgement (for which you would need a table of some sort). The recommended approach is simpler and future-proof.
– Nicolas Miari
Jul 26 '17 at 5:24












This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
– Nicolas Miari
Jul 26 '17 at 5:26






This question is very old now and the iPhone 3G is virtually non-existent, but in this case you should have checked the availability of the OpenGL ES 2.0 API by creating a renderer and seeing if it succeeds :-),
– Nicolas Miari
Jul 26 '17 at 5:26














Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
– Aleem
Apr 4 at 11:23




Check this github.com/aleemrazzaq/ARCompactDeviceInfo this has latest Device model, iPhone X, iPhone 8, 8 Plus and iPad 6th Generation 2018
– Aleem
Apr 4 at 11:23












16 Answers
16






active

oldest

votes

















up vote
473
down vote



accepted










EITHER try this library: http://github.com/erica/uidevice-extension/ (by Erica Sadun). (The library is 7-8 years old, and hence is obsolete)



(Sample Code):



[[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"


OR You can use this method:



You can get the device model number using uname from sys/utsname.h. For example:



Objective-C



#import <sys/utsname.h> // import it in your header or implementation file.

NSString* deviceName()
{
struct utsname systemInfo;
uname(&systemInfo);

return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}


Swift 3



extension UIDevice {
var modelName: String {
var systemInfo = utsname()
uname(&systemInfo)
let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8, value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
return identifier
}
}

print(UIDevice.current.modelName)


The result should be:



//Simultor
@"i386" on 32-bit Simulator
@"x86_64" on 64-bit Simulator

//iPhone
@"iPhone1,1" on iPhone
@"iPhone1,2" on iPhone 3G
@"iPhone2,1" on iPhone 3GS
@"iPhone3,1" on iPhone 4 (GSM)
@"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
@"iPhone4,1" on iPhone 4S
@"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
@"iPhone5,2" on iPhone 5 (model A1429, everything else)
@"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
@"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
@"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
@"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
@"iPhone7,1" on iPhone 6 Plus
@"iPhone7,2" on iPhone 6
@"iPhone8,1" on iPhone 6S
@"iPhone8,2" on iPhone 6S Plus
@"iPhone8,4" on iPhone SE
@"iPhone9,1" on iPhone 7 (CDMA)
@"iPhone9,3" on iPhone 7 (GSM)
@"iPhone9,2" on iPhone 7 Plus (CDMA)
@"iPhone9,4" on iPhone 7 Plus (GSM)
@"iPhone10,1" on iPhone 8 (CDMA)
@"iPhone10,4" on iPhone 8 (GSM)
@"iPhone10,2" on iPhone 8 Plus (CDMA)
@"iPhone10,5" on iPhone 8 Plus (GSM)
@"iPhone10,3" on iPhone X (CDMA)
@"iPhone10,6" on iPhone X (GSM)
@"iPhone11,2" on iPhone XS
@"iPhone11,4" on iPhone XS Max
@"iPhone11,6" on iPhone XS Max China
@"iPhone11,8" on iPhone XR

//iPad 1
@"iPad1,1" on iPad - Wifi (model A1219)
@"iPad1,1" on iPad - Wifi + Cellular (model A1337)

//iPad 2
@"iPad2,1" - Wifi (model A1395)
@"iPad2,2" - GSM (model A1396)
@"iPad2,3" - 3G (model A1397)
@"iPad2,4" - Wifi (model A1395)

// iPad Mini
@"iPad2,5" - Wifi (model A1432)
@"iPad2,6" - Wifi + Cellular (model A1454)
@"iPad2,7" - Wifi + Cellular (model A1455)

//iPad 3
@"iPad3,1" - Wifi (model A1416)
@"iPad3,2" - Wifi + Cellular (model A1403)
@"iPad3,3" - Wifi + Cellular (model A1430)

//iPad 4
@"iPad3,4" - Wifi (model A1458)
@"iPad3,5" - Wifi + Cellular (model A1459)
@"iPad3,6" - Wifi + Cellular (model A1460)

//iPad AIR
@"iPad4,1" - Wifi (model A1474)
@"iPad4,2" - Wifi + Cellular (model A1475)
@"iPad4,3" - Wifi + Cellular (model A1476)

// iPad Mini 2
@"iPad4,4" - Wifi (model A1489)
@"iPad4,5" - Wifi + Cellular (model A1490)
@"iPad4,6" - Wifi + Cellular (model A1491)

// iPad Mini 3
@"iPad4,7" - Wifi (model A1599)
@"iPad4,8" - Wifi + Cellular (model A1600)
@"iPad4,9" - Wifi + Cellular (model A1601)

// iPad Mini 4
@"iPad5,1" - Wifi (model A1538)
@"iPad5,2" - Wifi + Cellular (model A1550)

//iPad AIR 2
@"iPad5,3" - Wifi (model A1566)
@"iPad5,4" - Wifi + Cellular (model A1567)

// iPad PRO 9.7"
@"iPad6,3" - Wifi (model A1673)
@"iPad6,4" - Wifi + Cellular (model A1674)
@"iPad6,4" - Wifi + Cellular (model A1675)

//iPad PRO 12.9"
@"iPad6,7" - Wifi (model A1584)
@"iPad6,8" - Wifi + Cellular (model A1652)

//iPad (5th generation)
@"iPad6,11" - Wifi (model A1822)
@"iPad6,12" - Wifi + Cellular (model A1823)

//iPad PRO 12.9" (2nd Gen)
@"iPad7,1" - Wifi (model A1670)
@"iPad7,2" - Wifi + Cellular (model A1671)
@"iPad7,2" - Wifi + Cellular (model A1821)

//iPad PRO 10.5"
@"iPad7,3" - Wifi (model A1701)
@"iPad7,4" - Wifi + Cellular (model A1709)

//iPod Touch
@"iPod1,1" on iPod Touch
@"iPod2,1" on iPod Touch Second Generation
@"iPod3,1" on iPod Touch Third Generation
@"iPod4,1" on iPod Touch Fourth Generation
@"iPod7,1" on iPod Touch 6th Generation

// Apple Watch
@"Watch1,1" on Apple Watch 38mm case
@"Watch1,2" on Apple Watch 38mm case
@"Watch2,6" on Apple Watch Series 1 38mm case
@"Watch2,7" on Apple Watch Series 1 42mm case
@"Watch2,3" on Apple Watch Series 2 38mm case
@"Watch2,4" on Apple Watch Series 2 42mm case
@"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
@"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
@"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
@"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
@"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
@"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
@"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
@"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)





share|improve this answer



















  • 6




    Does this put the appstore approval of my app in risk?
    – Alexis
    Jun 21 '13 at 12:58






  • 5




    @jafar No, it doesn't. ;)
    – Aniruddh Joshi
    Jun 21 '13 at 18:38






  • 2




    How do I call the machineName method?
    – Marko
    Sep 27 '13 at 4:49






  • 9




    Swift version: stackoverflow.com/a/26962452/300408
    – Albert Bori
    Feb 20 '15 at 17:50






  • 3




    Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
    – bendigi
    Sep 30 '17 at 7:21


















up vote
112
down vote













Expanding on OhhMee's answer above, I added some failsafe to support future devices not (yet) included on the list:



#import <sys/utsname.h>
#import "MyClass.h"

@implementation MyClass
{
//(your private ivars)
}

- (NSString*) deviceName
{
struct utsname systemInfo;

uname(&systemInfo);

NSString* code = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];

static NSDictionary* deviceNamesByCode = nil;

if (!deviceNamesByCode) {

deviceNamesByCode = @{@"i386" : @"Simulator",
@"x86_64" : @"Simulator",
@"iPod1,1" : @"iPod Touch", // (Original)
@"iPod2,1" : @"iPod Touch", // (Second Generation)
@"iPod3,1" : @"iPod Touch", // (Third Generation)
@"iPod4,1" : @"iPod Touch", // (Fourth Generation)
@"iPod7,1" : @"iPod Touch", // (6th Generation)
@"iPhone1,1" : @"iPhone", // (Original)
@"iPhone1,2" : @"iPhone", // (3G)
@"iPhone2,1" : @"iPhone", // (3GS)
@"iPad1,1" : @"iPad", // (Original)
@"iPad2,1" : @"iPad 2", //
@"iPad3,1" : @"iPad", // (3rd Generation)
@"iPhone3,1" : @"iPhone 4", // (GSM)
@"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
@"iPhone4,1" : @"iPhone 4S", //
@"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
@"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
@"iPad3,4" : @"iPad", // (4th Generation)
@"iPad2,5" : @"iPad Mini", // (Original)
@"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532 | GSM)
@"iPhone5,4" : @"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
@"iPhone6,1" : @"iPhone 5s", // (model A1433, A1533 | GSM)
@"iPhone6,2" : @"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
@"iPhone7,1" : @"iPhone 6 Plus", //
@"iPhone7,2" : @"iPhone 6", //
@"iPhone8,1" : @"iPhone 6S", //
@"iPhone8,2" : @"iPhone 6S Plus", //
@"iPhone8,4" : @"iPhone SE", //
@"iPhone9,1" : @"iPhone 7", //
@"iPhone9,3" : @"iPhone 7", //
@"iPhone9,2" : @"iPhone 7 Plus", //
@"iPhone9,4" : @"iPhone 7 Plus", //
@"iPhone10,1": @"iPhone 8", // CDMA
@"iPhone10,4": @"iPhone 8", // GSM
@"iPhone10,2": @"iPhone 8 Plus", // CDMA
@"iPhone10,5": @"iPhone 8 Plus", // GSM
@"iPhone10,3": @"iPhone X", // CDMA
@"iPhone10,6": @"iPhone X", // GSM
@"iPhone11,2": @"iPhone XS", //
@"iPhone11,4": @"iPhone XS Max", //
@"iPhone11,6": @"iPhone XS Max", // China
@"iPhone11,8": @"iPhone XR", //

@"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
@"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
@"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi)
@"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular)
@"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599))
@"iPad6,7" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1584)
@"iPad6,8" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1652)
@"iPad6,3" : @"iPad Pro (9.7")", // iPad Pro 9.7 inches - (model A1673)
@"iPad6,4" : @"iPad Pro (9.7")" // iPad Pro 9.7 inches - (models A1674 and A1675)
};
}

NSString* deviceName = [deviceNamesByCode objectForKey:code];

if (!deviceName) {
// Not found on database. At least guess main device type from string contents:

if ([code rangeOfString:@"iPod"].location != NSNotFound) {
deviceName = @"iPod Touch";
}
else if([code rangeOfString:@"iPad"].location != NSNotFound) {
deviceName = @"iPad";
}
else if([code rangeOfString:@"iPhone"].location != NSNotFound){
deviceName = @"iPhone";
}
else {
deviceName = @"Unknown";
}
}

return deviceName;
}

// (rest of class implementation omitted)

@end


I also omitted the detailed information (e.g. "model A1507, A1516, A1526 (China), A1529 | Global") and placed it in the comments instead, in case you want to use this as user-facing strings and not freak them out.





Edit: This answer provides a similar implementation using Swift 2.



Edit 2: I just added the iPad Pro models (both sizes). For future reference, the model numbers/etc. can be found in The iPhone Wiki.



Edit 3: Add support for iPhone XS, iPhone XS Max and iPhone XR.






share|improve this answer



















  • 2




    I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
    – Nicolas Miari
    Jan 28 '14 at 7:39






  • 1




    I use this. Works great. Thanks Nicolas.
    – braden
    Sep 11 '14 at 21:48






  • 1




    Must update with new devices...
    – Nicolas Miari
    Dec 8 '14 at 6:05










  • @NicolasMiari I have added missing stuff.
    – tounaobun
    Dec 22 '15 at 6:35










  • is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
    – Ashish Pisey
    Apr 12 at 11:22


















up vote
35
down vote













I've made the plist file to help you to get the complete name for each device (source code right at the end of my answer)



Based on OhhMee's answer, you can use it like this:



Swift 4.0



static func deviceName() -> String {

var systemInfo = utsname()
uname(&systemInfo)

guard let iOSDeviceModelsPath = Bundle.main.path(forResource: "iOSDeviceModelMapping", ofType: "plist") else { return "" }
guard let iOSDevices = NSDictionary(contentsOfFile: iOSDeviceModelsPath) else { return "" }

let machineMirror = Mirror(reflecting: systemInfo.machine)
let identifier = machineMirror.children.reduce("") { identifier, element in
guard let value = element.value as? Int8, value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}

return iOSDevices.value(forKey: identifier) as! String
}


Don't forget to add #import <sys/utsname.h> in your Bridging Header.



Objective C



#import <sys/utsname.h>

NSString *machineName()
{
struct utsname systemInfo;
uname(&systemInfo);

NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"];
NSDictionary *iOSDevices = [NSDictionary dictionaryWithContentsOfFile:iOSDeviceModelsPath];

NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];

return [iOSDevices valueForKey:deviceModel];
}


The plist file :



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>x86_64</key>
<string>Simulator</string>
<key>i386</key>
<string>Simulator</string>
<key>iPod1,1</key>
<string>iPod Touch 1st Gen</string>
<key>iPod2,1</key>
<string>iPod Touch 2nd Gen</string>
<key>iPod3,1</key>
<string>iPod Touch 3rd Gen</string>
<key>iPod4,1</key>
<string>iPod Touch 4th Gen</string>
<key>iPod5,1</key>
<string>iPod Touch 5th Gen</string>
<key>iPod7,1</key>
<string>iPod Touch 6th Gen</string>
<key>iPhone1,1</key>
<string>iPhone</string>
<key>iPhone1,2</key>
<string>iPhone 3G</string>
<key>iPhone2,1</key>
<string>iPhone 3GS</string>
<key>iPhone3,1</key>
<string>iPhone 4</string>
<key>iPhone3,2</key>
<string>iPhone 4</string>
<key>iPhone3,3</key>
<string>iPhone 4</string>
<key>iPhone4,1</key>
<string>iPhone 4S</string>
<key>iPhone5,1</key>
<string>iPhone 5 model A1428</string>
<key>iPhone5,2</key>
<string>iPhone 5 model A1429</string>
<key>iPhone5,3</key>
<string>iPhone 5C</string>
<key>iPhone5,4</key>
<string>iPhone 5C</string>
<key>iPhone6,1</key>
<string>iPhone 5S</string>
<key>iPhone6,2</key>
<string>iPhone 5S</string>
<key>iPhone7,2</key>
<string>iPhone 6</string>
<key>iPhone7,1</key>
<string>iPhone 6 Plus</string>
<key>iPhone8,1</key>
<string>iPhone 6S</string>
<key>iPhone8,2</key>
<string>iPhone 6S Plus</string>
<key>iPhone8,4</key>
<string>iPhone SE</string>
<key>iPhone9,1</key>
<string>iPhone 7</string>
<key>iPhone9,2</key>
<string>iPhone 7 Plus</string>
<key>iPhone9,3</key>
<string>iPhone 7</string>
<key>iPhone9,4</key>
<string>iPhone 7 Plus</string>
<key>iPhone10,1</key>
<string>iPhone 8</string>
<key>iPhone10,4</key>
<string>iPhone 8</string>
<key>iPhone10,2</key>
<string>iPhone 8 Plus</string>
<key>iPhone10,5</key>
<string>iPhone 8 Plus</string>
<key>iPhone10,3</key>
<string>iPhone X</string>
<key>iPhone10,6</key>
<string>iPhone X</string>
<key>iPhone11,2</key>
<string>iPhone XS</string>
<key>iPhone11,4</key>
<string>iPhone XS Max</string>
<key>iPhone11,6</key>
<string>iPhone XS Max</string>
<key>iPhone11,8</key>
<string>iPhone XR</string>
<key>iPad1,1</key>
<string>iPad</string>
<key>iPad2,1</key>
<string>iPad 2</string>
<key>iPad2,2</key>
<string>iPad 2</string>
<key>iPad2,3</key>
<string>iPad 2</string>
<key>iPad2,4</key>
<string>iPad 2</string>
<key>iPad3,1</key>
<string>iPad 3rd Gen</string>
<key>iPad3,2</key>
<string>iPad 3rd Gen</string>
<key>iPad3,3</key>
<string>iPad 3rd Gen</string>
<key>iPad3,4</key>
<string>iPad 4th Gen</string>
<key>iPad3,5</key>
<string>iPad 4th Gen</string>
<key>iPad3,6</key>
<string>iPad 4th Gen</string>
<key>iPad4,1</key>
<string>iPad Air</string>
<key>iPad4,2</key>
<string>iPad Air</string>
<key>iPad4,3</key>
<string>iPad Air</string>
<key>iPad2,5</key>
<string>iPad Mini 1st Gen</string>
<key>iPad2,6</key>
<string>iPad Mini 1st Gen</string>
<key>iPad2,7</key>
<string>iPad Mini 1st Gen</string>
<key>iPad4,4</key>
<string>iPad Mini 2nd Gen</string>
<key>iPad4,5</key>
<string>iPad Mini 2nd Gen</string>
<key>iPad4,6</key>
<string>iPad Mini 2nd Gen</string>
<key>iPad4,7</key>
<string>iPad Mini 3rd Gen</string>
<key>iPad4,8</key>
<string>iPad Mini 3rd Gen</string>
<key>iPad4,9</key>
<string>iPad Mini 3rd Gen</string>
<key>iPad5,1</key>
<string>iPad Mini 4</string>
<key>iPad5,2</key>
<string>iPad Mini 4</string>
<key>iPad5,3</key>
<string>iPad Air 2</string>
<key>iPad5,4</key>
<string>iPad Air 2</string>
<key>iPad6,3</key>
<string>iPad Pro 9.7 inch</string>
<key>iPad6,4</key>
<string>iPad Pro 9.7 inch</string>
<key>iPad6,7</key>
<string>iPad Pro 12.9 inch</string>
<key>iPad6,8</key>
<string>iPad Pro 12.9 inch</string>
<key>iPad7,1</key>
<string>iPad Pro 12.9 inch 2nd Gen</string>
<key>iPad7,2</key>
<string>iPad Pro 12.9 inch 2nd Gen</string>
<key>iPad7,3</key>
<string>iPad Pro 10.5 inch</string>
<key>iPad7,4</key>
<string>iPad Pro 10.5 inch</string>
</dict>
</plist>





share|improve this answer























  • updated with latest devices (iPhone 6S, iPad Pro, etc)
    – Tib
    Dec 2 '15 at 13:29






  • 1




    Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
    – Nicolas Miari
    Mar 23 '16 at 9:01






  • 1




    @NicolasMiari updated ;)
    – Tib
    Mar 30 '16 at 9:47






  • 2




    Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
    – vilmoskörte
    Oct 2 '17 at 13:51






  • 1




    Updated with new devices: iPhone XS, XS Max and XR
    – vilmoskörte
    Sep 18 at 8:24


















up vote
19
down vote













[[UIDevice currentDevice] model] just returns iPhone or iPod, you don't get the numbers of the model that would let you differentiate between different generations of devices.



Code this method:



#include <sys/sysctl.h>
...

+ (NSString *)getModel {
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;
}


And call the method [self getModel] whenever you need the model and you'll get i.e: "iPhone5,1" for the ridiculously thin and speedy iPhone 5.



One good practice is to create a class called Utils.h/Utils.m and put methods like getModel there so you can get this info from anywhere in your App simply by importing the class and invoking [Utils getModel];






share|improve this answer






























    up vote
    12
    down vote













    I've optimized NicolasMiari's implementation, and added Simulator, here:



    + (NSString*)deviceName {

    static NSDictionary* deviceNamesByCode = nil;
    static NSString* deviceName = nil;

    if (deviceName) {
    return deviceName;
    }

    deviceNamesByCode = @{
    @"i386" :@"Simulator",
    @"iPod1,1" :@"iPod Touch", // (Original)
    @"iPod2,1" :@"iPod Touch", // (Second Generation)
    @"iPod3,1" :@"iPod Touch", // (Third Generation)
    @"iPod4,1" :@"iPod Touch", // (Fourth Generation)
    @"iPhone1,1" :@"iPhone", // (Original)
    @"iPhone1,2" :@"iPhone", // (3G)
    @"iPhone2,1" :@"iPhone", // (3GS)
    @"iPad1,1" :@"iPad", // (Original)
    @"iPad2,1" :@"iPad 2", //
    @"iPad3,1" :@"iPad", // (3rd Generation)
    @"iPhone3,1" :@"iPhone 4", //
    @"iPhone4,1" :@"iPhone 4S", //
    @"iPhone5,1" :@"iPhone 5", // (model A1428, AT&T/Canada)
    @"iPhone5,2" :@"iPhone 5", // (model A1429, everything else)
    @"iPad3,4" :@"iPad", // (4th Generation)
    @"iPad2,5" :@"iPad Mini", // (Original)
    @"iPhone5,3" :@"iPhone 5c", // (model A1456, A1532 | GSM)
    @"iPhone5,4" :@"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
    @"iPhone6,1" :@"iPhone 5s", // (model A1433, A1533 | GSM)
    @"iPhone6,2" :@"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
    @"iPad4,1" :@"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
    @"iPad4,2" :@"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
    @"iPad4,4" :@"iPad Mini", // (2nd Generation iPad Mini - Wifi)
    @"iPad4,5" :@"iPad Mini" // (2nd Generation iPad Mini - Cellular)
    };

    struct utsname systemInfo;
    uname(&systemInfo);
    NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

    deviceName = [deviceNamesByCode objectForKey:code];

    if (!deviceName) {
    // Not found in database. At least guess main device type from string contents:

    if ([code rangeOfString:@"iPod"].location != NSNotFound) {
    deviceName = @"iPod Touch";
    } else if([code rangeOfString:@"iPad"].location != NSNotFound) {
    deviceName = @"iPad";
    } else if([code rangeOfString:@"iPhone"].location != NSNotFound){
    deviceName = @"iPhone";
    } else {
    deviceName = @"Simulator";
    }
    }

    return deviceName;
    }


    ```






    share|improve this answer

















    • 1




      We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
      – Nicolas Miari
      Sep 10 '15 at 5:34






    • 1




      Perhaps even a cocoapod
      – Adam W. Dennis
      Jun 1 '16 at 19:24










    • github.com/sebyddd/SDVersion
      – Iulian Onofrei
      Sep 30 at 10:49


















    up vote
    12
    down vote













    Below is the code for that (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;
    }





    share|improve this answer




























      up vote
      10
      down vote













      A category for going getting away from the NSString description



      In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.



      For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.



      Updating is a matter of adding the device to the enum and the lookup table.



      UIDevice+NTNUExtensions.h



      typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
      DeviceAppleUnknown,
      DeviceAppleSimulator,
      DeviceAppleiPhone,
      DeviceAppleiPhone3G,
      DeviceAppleiPhone3GS,
      DeviceAppleiPhone4,
      DeviceAppleiPhone4S,
      DeviceAppleiPhone5,
      DeviceAppleiPhone5C,
      DeviceAppleiPhone5S,
      DeviceAppleiPhone6,
      DeviceAppleiPhone6_Plus,
      DeviceAppleiPhone6S,
      DeviceAppleiPhone6S_Plus,
      DeviceAppleiPhoneSE,
      DeviceAppleiPhone7,
      DeviceAppleiPhone7_Plus,
      DeviceAppleiPodTouch,
      DeviceAppleiPodTouch2G,
      DeviceAppleiPodTouch3G,
      DeviceAppleiPodTouch4G,
      DeviceAppleiPad,
      DeviceAppleiPad2,
      DeviceAppleiPad3G,
      DeviceAppleiPad4G,
      DeviceAppleiPad5G_Air,
      DeviceAppleiPadMini,
      DeviceAppleiPadMini2G,
      DeviceAppleiPadPro12,
      DeviceAppleiPadPro9
      };



      @interface UIDevice (NTNUExtensions)

      - (NSString *)ntnu_deviceDescription;
      - (NTNUDeviceType)ntnu_deviceType;

      @end


      UIDevice+NTNUExtensions.m



      #import <sys/utsname.h>
      #import "UIDevice+NTNUExtensions.h"

      @implementation UIDevice (NTNUExtensions)

      - (NSString *)ntnu_deviceDescription
      {
      struct utsname systemInfo;
      uname(&systemInfo);

      return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
      }

      - (NTNUDeviceType)ntnu_deviceType
      {
      NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
      return [deviceType unsignedIntegerValue];
      }

      - (NSDictionary *)ntnu_deviceTypeLookupTable
      {
      return @{
      @"i386": @(DeviceAppleSimulator),
      @"x86_64": @(DeviceAppleSimulator),
      @"iPod1,1": @(DeviceAppleiPodTouch),
      @"iPod2,1": @(DeviceAppleiPodTouch2G),
      @"iPod3,1": @(DeviceAppleiPodTouch3G),
      @"iPod4,1": @(DeviceAppleiPodTouch4G),
      @"iPhone1,1": @(DeviceAppleiPhone),
      @"iPhone1,2": @(DeviceAppleiPhone3G),
      @"iPhone2,1": @(DeviceAppleiPhone3GS),
      @"iPhone3,1": @(DeviceAppleiPhone4),
      @"iPhone3,3": @(DeviceAppleiPhone4),
      @"iPhone4,1": @(DeviceAppleiPhone4S),
      @"iPhone5,1": @(DeviceAppleiPhone5),
      @"iPhone5,2": @(DeviceAppleiPhone5),
      @"iPhone5,3": @(DeviceAppleiPhone5C),
      @"iPhone5,4": @(DeviceAppleiPhone5C),
      @"iPhone6,1": @(DeviceAppleiPhone5S),
      @"iPhone6,2": @(DeviceAppleiPhone5S),
      @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
      @"iPhone7,2": @(DeviceAppleiPhone6),
      @"iPhone8,1" :@(DeviceAppleiPhone6S),
      @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
      @"iPhone8,4" :@(DeviceAppleiPhoneSE),
      @"iPhone9,1" :@(DeviceAppleiPhone7),
      @"iPhone9,3" :@(DeviceAppleiPhone7),
      @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
      @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
      @"iPad1,1": @(DeviceAppleiPad),
      @"iPad2,1": @(DeviceAppleiPad2),
      @"iPad3,1": @(DeviceAppleiPad3G),
      @"iPad3,4": @(DeviceAppleiPad4G),
      @"iPad2,5": @(DeviceAppleiPadMini),
      @"iPad4,1": @(DeviceAppleiPad5G_Air),
      @"iPad4,2": @(DeviceAppleiPad5G_Air),
      @"iPad4,4": @(DeviceAppleiPadMini2G),
      @"iPad4,5": @(DeviceAppleiPadMini2G),
      @"iPad4,7":@(DeviceAppleiPadMini),
      @"iPad6,7":@(DeviceAppleiPadPro12),
      @"iPad6,8":@(DeviceAppleiPadPro12),
      @"iPad6,3":@(DeviceAppleiPadPro9),
      @"iPad6,4":@(DeviceAppleiPadPro9)
      };
      }

      @end





      share|improve this answer























      • This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
        – Mischinab
        Jun 13 '16 at 13:58


















      up vote
      9
      down vote













      Device name and Machine Names, based on iOS Real Device Hardware



      My solution to this issue is basically looks related to @NicolasMiari answer within this thread. Separate utility class has a predefined set of Device and Machine names and then depending on the real machine name, retrieve the Device Name.



      Note: This answer and it's linked GitHub project has been updated to identify current latest iPhones (iPhone 8, 8+, X) as of October 2017. And this works on iOS11 too. Please visit the GitHub repo and see, and give me feedback if something is wrong.



      /*
      * Retrieves back the device name or if not the machine name.
      */
      + (NSString*)deviceModelName {
      struct utsname systemInfo;
      uname(&systemInfo);
      NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

      //MARK: More official list is at
      //http://theiphonewiki.com/wiki/Models
      //MARK: You may just return machineName. Following is for convenience

      NSDictionary *commonNamesDictionary =
      @{
      @"i386": @"i386 Simulator",
      @"x86_64": @"x86_64 Simulator",

      @"iPhone1,1": @"iPhone",
      @"iPhone1,2": @"iPhone 3G",
      @"iPhone2,1": @"iPhone 3GS",
      @"iPhone3,1": @"iPhone 4",
      @"iPhone3,2": @"iPhone 4(Rev A)",
      @"iPhone3,3": @"iPhone 4(CDMA)",
      @"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,1": @"iPhone 6+(GSM+CDMA)",
      @"iPhone7,2": @"iPhone 6(GSM+CDMA)",

      @"iPhone8,1": @"iPhone 6S(GSM+CDMA)",
      @"iPhone8,2": @"iPhone 6S+(GSM+CDMA)",
      @"iPhone8,4": @"iPhone SE(GSM+CDMA)",
      @"iPhone9,1": @"iPhone 7(GSM+CDMA)",
      @"iPhone9,2": @"iPhone 7+(GSM+CDMA)",
      @"iPhone9,3": @"iPhone 7(GSM+CDMA)",
      @"iPhone9,4": @"iPhone 7+(GSM+CDMA)",

      @"iPad1,1": @"iPad",
      @"iPad2,1": @"iPad 2(WiFi)",
      @"iPad2,2": @"iPad 2(GSM)",
      @"iPad2,3": @"iPad 2(CDMA)",
      @"iPad2,4": @"iPad 2(WiFi Rev A)",
      @"iPad2,5": @"iPad Mini 1G (WiFi)",
      @"iPad2,6": @"iPad Mini 1G (GSM)",
      @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)",
      @"iPad3,1": @"iPad 3(WiFi)",
      @"iPad3,2": @"iPad 3(GSM+CDMA)",
      @"iPad3,3": @"iPad 3(GSM)",
      @"iPad3,4": @"iPad 4(WiFi)",
      @"iPad3,5": @"iPad 4(GSM)",
      @"iPad3,6": @"iPad 4(GSM+CDMA)",

      @"iPad4,1": @"iPad Air(WiFi)",
      @"iPad4,2": @"iPad Air(GSM)",
      @"iPad4,3": @"iPad Air(GSM+CDMA)",

      @"iPad5,3": @"iPad Air 2 (WiFi)",
      @"iPad5,4": @"iPad Air 2 (GSM+CDMA)",

      @"iPad4,4": @"iPad Mini 2G (WiFi)",
      @"iPad4,5": @"iPad Mini 2G (GSM)",
      @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)",

      @"iPad4,7": @"iPad Mini 3G (WiFi)",
      @"iPad4,8": @"iPad Mini 3G (GSM)",
      @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)",

      @"iPod1,1": @"iPod 1st Gen",
      @"iPod2,1": @"iPod 2nd Gen",
      @"iPod3,1": @"iPod 3rd Gen",
      @"iPod4,1": @"iPod 4th Gen",
      @"iPod5,1": @"iPod 5th Gen",
      @"iPod7,1": @"iPod 6th Gen",
      };

      NSString *deviceName = commonNamesDictionary[machineName];

      if (deviceName == nil) {
      deviceName = machineName;
      }

      return deviceName;
      }


      I have added this implementation and few other convenient utility methods in a class and put it out there in this GitHub Repository. And also you can find the up to date device information list within this Wiki page.



      Please visit it and get use of it.



      Update:



      You may requires to import sys framework,



      #import <sys/utsname.h>





      share|improve this answer



















      • 1




        Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
        – Hemang
        Dec 22 '16 at 7:20


















      up vote
      6
      down vote













      Swift 3 compatible



      // MARK: - UIDevice Extension -

      private let DeviceList = [
      /* iPod 5 */ "iPod5,1": "iPod Touch 5",
      /* iPhone 4 */ "iPhone3,1": "iPhone 4", "iPhone3,2": "iPhone 4", "iPhone3,3": "iPhone 4",
      /* iPhone 4S */ "iPhone4,1": "iPhone 4S",
      /* iPhone 5 */ "iPhone5,1": "iPhone 5", "iPhone5,2": "iPhone 5",
      /* iPhone 5C */ "iPhone5,3": "iPhone 5C", "iPhone5,4": "iPhone 5C",
      /* iPhone 5S */ "iPhone6,1": "iPhone 5S", "iPhone6,2": "iPhone 5S",
      /* iPhone 6 */ "iPhone7,2": "iPhone 6",
      /* iPhone 6 Plus */ "iPhone7,1": "iPhone 6 Plus",
      /* iPhone 6S */ "iPhone8,1": "iPhone 6S",
      /* iPhone 6S Plus */ "iPhone8,2": "iPhone 6S Plus",
      /* iPhone SE */ "iPhone8,4": "iPhone SE",
      /* iPhone 7 */ "iPhone9,1": "iPhone 7",
      /* iPhone 7 */ "iPhone9,3": "iPhone 7",
      /* iPhone 7 Plus */ "iPhone9,2": "iPhone 7 Plus",
      /* iPhone 7 Plus */ "iPhone9,4": "iPhone 7 Plus",
      /* iPad 2 */ "iPad2,1": "iPad 2", "iPad2,2": "iPad 2", "iPad2,3": "iPad 2", "iPad2,4": "iPad 2",
      /* iPad 3 */ "iPad3,1": "iPad 3", "iPad3,2": "iPad 3", "iPad3,3": "iPad 3",
      /* iPad 4 */ "iPad3,4": "iPad 4", "iPad3,5": "iPad 4", "iPad3,6": "iPad 4",
      /* iPad Air */ "iPad4,1": "iPad Air", "iPad4,2": "iPad Air", "iPad4,3": "iPad Air",
      /* iPad Air 2 */ "iPad5,1": "iPad Air 2", "iPad5,3": "iPad Air 2", "iPad5,4": "iPad Air 2",
      /* iPad Mini */ "iPad2,5": "iPad Mini 1", "iPad2,6": "iPad Mini 1", "iPad2,7": "iPad Mini 1",
      /* iPad Mini 2 */ "iPad4,4": "iPad Mini 2", "iPad4,5": "iPad Mini 2", "iPad4,6": "iPad Mini 2",
      /* iPad Mini 3 */ "iPad4,7": "iPad Mini 3", "iPad4,8": "iPad Mini 3", "iPad4,9": "iPad Mini 3",
      /* iPad Pro 12.9 */ "iPad6,7": "iPad Pro 12.9", "iPad6,8": "iPad Pro 12.9",
      /* iPad Pro 9.7 */ "iPad6,3": "iPad Pro 9.7", "iPad6,4": "iPad Pro 9.7",
      /* Simulator */ "x86_64": "Simulator", "i386": "Simulator"
      ]

      extension UIDevice {

      static var modelName: String {
      var systemInfo = utsname()
      uname(&systemInfo)

      let machine = systemInfo.machine
      let mirror = Mirror(reflecting: machine)

      var identifier = ""

      for child in mirror.children {
      if let value = child.value as? Int8, value != 0 {
      identifier += String(UnicodeScalar(UInt8(value)))
      }
      }
      return DeviceList[identifier] ?? identifier
      }

      static var isIphone4: Bool {
      return modelName == "iPhone 5" || modelName == "iPhone 5C" || modelName == "iPhone 5S" || UIDevice.isSimulatorIPhone4
      }

      static var isIphone5: Bool {
      return modelName == "iPhone 4S" || modelName == "iPhone 4" || UIDevice.isSimulatorIPhone5
      }

      static var isIphone6: Bool {
      return modelName == "iPhone 6" || UIDevice.isSimulatorIPhone6
      }
      static var isIphone6Plus: Bool {
      return modelName == "iPhone 6 Plus" || UIDevice.isSimulatorIPhone6Plus
      }

      static var isIpad: Bool {
      if UIDevice.current.model.contains("iPad") {
      return true
      }
      return false
      }

      static var isIphone: Bool {
      return !self.isIpad
      }

      /// Check if current device is iPhone4S (and earlier) relying on screen heigth
      static var isSimulatorIPhone4: Bool {
      return UIDevice.isSimulatorWithScreenHeigth(480)
      }

      /// Check if current device is iPhone5 relying on screen heigth
      static var isSimulatorIPhone5: Bool {
      return UIDevice.isSimulatorWithScreenHeigth(568)
      }

      /// Check if current device is iPhone6 relying on screen heigth
      static var isSimulatorIPhone6: Bool {
      return UIDevice.isSimulatorWithScreenHeigth(667)
      }

      /// Check if current device is iPhone6 Plus relying on screen heigth
      static var isSimulatorIPhone6Plus: Bool {
      return UIDevice.isSimulatorWithScreenHeigth(736)
      }

      private static func isSimulatorWithScreenHeigth(_ heigth: CGFloat) -> Bool {
      let screenSize: CGRect = UIScreen.main.bounds
      return modelName == "Simulator" && screenSize.height == heigth
      }

      }





      share|improve this answer






























        up vote
        4
        down vote













        #import <sys/utsname.h>

        #define HARDWARE @{@"i386": @"Simulator",@"x86_64": @"Simulator",@"iPod1,1": @"iPod Touch",@"iPod2,1": @"iPod Touch 2nd Generation",@"iPod3,1": @"iPod Touch 3rd Generation",@"iPod4,1": @"iPod Touch 4th Generation",@"iPhone1,1": @"iPhone",@"iPhone1,2": @"iPhone 3G",@"iPhone2,1": @"iPhone 3GS",@"iPhone3,1": @"iPhone 4",@"iPhone4,1": @"iPhone 4S",@"iPhone5,1": @"iPhone 5",@"iPhone5,2": @"iPhone 5",@"iPhone5,3": @"iPhone 5c",@"iPhone5,4": @"iPhone 5c",@"iPhone6,1": @"iPhone 5s",@"iPhone6,2": @"iPhone 5s",@"iPad1,1": @"iPad",@"iPad2,1": @"iPad 2",@"iPad3,1": @"iPad 3rd Generation ",@"iPad3,4": @"iPad 4th Generation ",@"iPad2,5": @"iPad Mini",@"iPad4,4": @"iPad Mini 2nd Generation - Wifi",@"iPad4,5": @"iPad Mini 2nd Generation - Cellular",@"iPad4,1": @"iPad Air 5th Generation - Wifi",@"iPad4,2": @"iPad Air 5th Generation - Cellular"}

        @interface ViewController ()
        @end

        @implementation ViewController

        - (void)viewDidLoad
        {
        [super viewDidLoad];
        struct utsname systemInfo;
        uname(&systemInfo);
        NSLog(@"hardware: %@",[HARDWARE objectForKey:[NSString stringWithCString: systemInfo.machine encoding:NSUTF8StringEncoding]]);
        }





        share|improve this answer




























          up vote
          4
          down vote













          This solution works for both physical devices and iOS simulator in a way that simulator returns the same model as physical device would return for a model e.g. "iPhone10,6" for iPhone X (GSM) rather than "x86_64".



          Definition - Swift 4:



          import UIKit

          extension UIDevice {
          var modelName: String {
          var systemInfo = utsname()
          uname(&systemInfo)
          let machineMirror = Mirror(reflecting: systemInfo.machine)
          let identifier = machineMirror.children.reduce("") { identifier, element in
          guard let value = element.value as? Int8, value != 0 else { return identifier }
          return identifier + String(UnicodeScalar(UInt8(value)))
          }
          if let value = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
          return value
          } else {
          return identifier
          }
          }
          }


          Usage:



          print(UIDevice.current.modelName)





          share|improve this answer






























            up vote
            3
            down vote













            Below Function Perfectly Working on iOS7 or later version in Swift



            func DeviceName()-> String {

            var myDeviceName : String = String()

            var systemInfo = [UInt8](count: sizeof(utsname), repeatedValue: 0)

            let model = systemInfo.withUnsafeMutableBufferPointer { (inout body: UnsafeMutableBufferPointer<UInt8>) -> String? in

            if uname(UnsafeMutablePointer(body.baseAddress)) != 0 {
            return nil
            }

            return String.fromCString(UnsafePointer(body.baseAddress.advancedBy(Int(_SYS_NAMELEN * 4))))
            }

            let deviceNamesByCode : [String: String] = ["iPod1,1":"iPod Touch 1",
            "iPod2,1":"iPod Touch 2",
            "iPod3,1":"iPod Touch 3",
            "iPod4,1":"iPod Touch 4",
            "iPod5,1":"iPod Touch 5",
            "iPod7,1":"iPod Touch 6",
            "iPhone1,1":"iPhone",
            "iPhone1,2":"iPhone ",
            "iPhone2,1":"iPhone ",
            "iPhone3,1":"iPhone 4",
            "iPhone3,2":"iPhone 4",
            "iPhone3,3":"iPhone 4",
            "iPhone4,1":"iPhone 4s",
            "iPhone5,1":"iPhone 5",
            "iPhone5,2":"iPhone 5",
            "iPhone5,3":"iPhone 5c",
            "iPhone5,4":"iPhone 5c",
            "iPhone6,1":"iPhone 5s",
            "iPhone6,2":"iPhone 5s",
            "iPhone7,2":"iPhone 6",
            "iPhone7,1":"iPhone 6 Plus",
            "iPhone8,1":"iPhone 6s",
            "iPhone8,2":"iPhone 6s Plus",
            "iPhone8,4":"iPhone SE",
            "iPad2,1":"iPad 2",
            "iPad2,2":"iPad 2",
            "iPad2,3":"iPad 2",
            "iPad2,4":"iPad 2",
            "iPad3,1":"iPad 3",
            "iPad3,2":"iPad 3",
            "iPad3,3":"iPad 3",
            "iPad3,4":"iPad 4",
            "iPad3,5":"iPad 4",
            "iPad3,6":"iPad 4",
            "iPad4,1":"iPad Air",
            "iPad4,2":"iPad Air",
            "iPad4,3":"iPad Air",
            "iPad5,3":"iPad Air 2",
            "iPad5,4":"iPad Air 2",
            "iPad2,5":"iPad Mini",
            "iPad2,6":"iPad Mini",
            "iPad2,7":"iPad Mini",
            "iPad4,4":"iPad Mini 2",
            "iPad4,5":"iPad Mini 2",
            "iPad4,6":"iPad Mini 2",
            "iPad4,7":"iPad Mini 3",
            "iPad4,8":"iPad Mini 3",
            "iPad4,9":"iPad Mini 3",
            "iPad5,1":"iPad Mini 4",
            "iPad5,2":"iPad Mini 4",
            "iPad6,3":"iPad Pro",
            "iPad6,4":"iPad Pro",
            "iPad6,7":"iPad Pro",
            "iPad6,8":"iPad Pro",
            "AppleTV5,3":"Apple TV",
            "i386":"Simulator",
            "x86_64":"Simulator"

            ]

            if model!.characters.count > 0 {
            myDeviceName = deviceNamesByCode[model!]!
            }else{
            myDeviceName = UIDevice.currentDevice().model
            }

            print("myDeviceName==(myDeviceName)")
            return myDeviceName

            }





            share|improve this answer























            • Thanks for the update! And do please update for new devices too.
              – Sohil R. Memon
              Jun 27 '16 at 5:58


















            up vote
            0
            down vote













            If you have a plist of devices (eg maintained by @Tib above in https://stackoverflow.com/a/17655825/849616) to handle it if Swift 3 you'd use:



            extension UIDevice {
            /// Fetches the information about the name of the device.
            ///
            /// - Returns: Should return meaningful device name, if not found will return device system code.
            public static func modelName() -> String {
            let physicalName = deviceSystemCode()
            if let deviceTypes = deviceTypes(), let modelName = deviceTypes[physicalName] as? String {
            return modelName
            }
            return physicalName
            }
            }

            private extension UIDevice {
            /// Fetches from system the code of the device
            static func deviceSystemCode() -> String {
            var systemInfo = utsname()
            uname(&systemInfo)
            let machineMirror = Mirror(reflecting: systemInfo.machine)
            let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
            }
            return identifier
            }

            /// Fetches the plist entries from plist maintained in https://stackoverflow.com/a/17655825/849616
            ///
            /// - Returns: A dictionary with pairs of deviceSystemCode <-> meaningfulDeviceName.
            static func deviceTypes() -> NSDictionary? {
            if let fileUrl = Bundle.main.url(forResource: "your plist name", withExtension: "plist"),
            let configurationDictionary = NSDictionary(contentsOf: fileUrl) {
            return configurationDictionary
            }
            return nil
            }
            }


            Later you can call it using UIDevice.modelName().



            Additional credits go to @Tib (for plist), @Aniruddh Joshi (for deviceSystemCode() function).






            share|improve this answer




























              up vote
              0
              down vote













              //
              // UIDevice+Hardware.h
              // gauravds
              //

              #import <UIKit/UIKit.h>

              @interface UIDevice (Hardware)

              - (NSString *)modelIdentifier;
              - (NSString *)modelName;

              @end


              Why not create a category. Don't use malloc method security leak issue. Use safe functions.



              NSLog(@"%@ %@", [[UIDevice currentDevice] modelName], [[UIDevice currentDevice] modelIdentifier]);


              See the implentations



              //
              // UIDevice+Hardware.m
              // gauravds
              //

              #import "UIDevice+Hardware.h"
              #import <sys/utsname.h>

              @implementation UIDevice (Hardware)

              - (NSString *)modelIdentifier {
              struct utsname systemInfo;
              uname(&systemInfo);
              return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
              }

              - (NSString *)modelName {
              return [self modelNameForModelIdentifier:[self modelIdentifier]];
              }

              - (NSString *)modelNameForModelIdentifier:(NSString *)modelIdentifier {
              // iPhone http://theiphonewiki.com/wiki/IPhone

              if ([modelIdentifier isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
              if ([modelIdentifier isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
              if ([modelIdentifier isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
              if ([modelIdentifier isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
              if ([modelIdentifier isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
              if ([modelIdentifier isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
              if ([modelIdentifier isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
              if ([modelIdentifier isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
              if ([modelIdentifier isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
              if ([modelIdentifier isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
              if ([modelIdentifier isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)";
              if ([modelIdentifier isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
              if ([modelIdentifier isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
              if ([modelIdentifier isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
              if ([modelIdentifier isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
              if ([modelIdentifier isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
              if ([modelIdentifier isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
              if ([modelIdentifier isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
              if ([modelIdentifier isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
              if ([modelIdentifier isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
              if ([modelIdentifier isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
              if ([modelIdentifier isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
              if ([modelIdentifier isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; // US (Verizon), China, Japan
              if ([modelIdentifier isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; // US (Verizon), China, Japan
              if ([modelIdentifier isEqualToString:@"iPhone10,3"]) return @"iPhone X"; // US (Verizon), China, Japan
              if ([modelIdentifier isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; // AT&T, Global
              if ([modelIdentifier isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; // AT&T, Global
              if ([modelIdentifier isEqualToString:@"iPhone10,6"]) return @"iPhone X"; // AT&T, Global

              // iPad http://theiphonewiki.com/wiki/IPad

              if ([modelIdentifier isEqualToString:@"iPad1,1"]) return @"iPad 1G";
              if ([modelIdentifier isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
              if ([modelIdentifier isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
              if ([modelIdentifier isEqualToString:@"iPad2,4"]) return @"iPad 2 (Rev A)";
              if ([modelIdentifier isEqualToString:@"iPad3,1"]) return @"iPad 3 (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM)";
              if ([modelIdentifier isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
              if ([modelIdentifier isEqualToString:@"iPad3,4"]) return @"iPad 4 (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
              if ([modelIdentifier isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
              if ([modelIdentifier isEqualToString:@"iPad6,11"]) return @"iPad (5th gen) (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad6,12"]) return @"iPad (5th gen) (Cellular)";

              if ([modelIdentifier isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
              if ([modelIdentifier isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";

              // iPad Mini http://theiphonewiki.com/wiki/IPad_mini

              if ([modelIdentifier isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (GSM)";
              if ([modelIdentifier isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (Global)";
              if ([modelIdentifier isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
              if ([modelIdentifier isEqualToString:@"iPad4,6"]) return @"iPad mini 2G (Cellular)"; // TD-LTE model see https://support.apple.com/en-us/HT201471#iPad-mini2
              if ([modelIdentifier isEqualToString:@"iPad4,7"]) return @"iPad mini 3G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad4,8"]) return @"iPad mini 3G (Cellular)";
              if ([modelIdentifier isEqualToString:@"iPad4,9"]) return @"iPad mini 3G (Cellular)";
              if ([modelIdentifier isEqualToString:@"iPad5,1"]) return @"iPad mini 4G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad5,2"]) return @"iPad mini 4G (Cellular)";

              // iPad Pro https://www.theiphonewiki.com/wiki/IPad_Pro

              if ([modelIdentifier isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=9938&c=apple_ipad_pro_9.7-inch_a1673_wifi_32gb_apple_ipad_6,3
              if ([modelIdentifier isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=9981&c=apple_ipad_pro_9.7-inch_a1675_td-lte_32gb_apple_ipad_6,4
              if ([modelIdentifier isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=8960&c=apple_ipad_pro_wifi_a1584_128gb
              if ([modelIdentifier isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=8965&c=apple_ipad_pro_td-lte_a1652_32gb_apple_ipad_6,8
              if ([modelIdentifier isEqualToString:@"iPad 7,1"]) return @"iPad Pro (12.9 inch) 2G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad 7,2"]) return @"iPad Pro (12.9 inch) 2G (Cellular)";
              if ([modelIdentifier isEqualToString:@"iPad 7,3"]) return @"iPad Pro (10.5 inch) 1G (Wi-Fi)";
              if ([modelIdentifier isEqualToString:@"iPad 7,4"]) return @"iPad Pro (10.5 inch) 1G (Cellular)";

              // iPod http://theiphonewiki.com/wiki/IPod

              if ([modelIdentifier isEqualToString:@"iPod1,1"]) return @"iPod touch 1G";
              if ([modelIdentifier isEqualToString:@"iPod2,1"]) return @"iPod touch 2G";
              if ([modelIdentifier isEqualToString:@"iPod3,1"]) return @"iPod touch 3G";
              if ([modelIdentifier isEqualToString:@"iPod4,1"]) return @"iPod touch 4G";
              if ([modelIdentifier isEqualToString:@"iPod5,1"]) return @"iPod touch 5G";
              if ([modelIdentifier isEqualToString:@"iPod7,1"]) return @"iPod touch 6G"; // as 6,1 was never released 7,1 is actually 6th generation

              // Apple TV https://www.theiphonewiki.com/wiki/Apple_TV

              if ([modelIdentifier isEqualToString:@"AppleTV1,1"]) return @"Apple TV 1G";
              if ([modelIdentifier isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G";
              if ([modelIdentifier isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G";
              if ([modelIdentifier isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; // small, incremental update over 3,1
              if ([modelIdentifier isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // as 4,1 was never released, 5,1 is actually 4th generation

              // Simulator
              if ([modelIdentifier hasSuffix:@"86"] || [modelIdentifier isEqual:@"x86_64"])
              {
              BOOL smallerScreen = ([[UIScreen mainScreen] bounds].size.width < 768.0);
              return (smallerScreen ? @"iPhone Simulator" : @"iPad Simulator");
              }

              return modelIdentifier;
              }

              @end





              share|improve this answer




























                up vote
                0
                down vote













                Swift 4 or later



                extension UIDevice {
                var modelName: String {
                if let modelName = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] { return modelName }
                var info = utsname()
                uname(&info)
                return String(
                Mirror(reflecting: info.machine).children.compactMap { // for Swift versions below 4.1 use flatMap
                guard let value = $0.value as? Int8,
                case let unicode = UnicodeScalar(UInt8(value)),
                32...126 ~= unicode.value else { return nil }
                return Character(unicode)
                })
                }
                }





                share|improve this answer




























                  up vote
                  -2
                  down vote













                  For save time of others.
                  Because accepted, must voted answer propose library that uses private API and my app was rejected because of uidevice-extension just yesterday!
                  I am switching to GBDeviceInfo library, installed as pod as well, for now it looks nice, maintained and updated to latest devices.






                  share|improve this answer





















                  • wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                    – Renetik
                    Aug 30 at 3:43










                  protected by Community Mar 27 '15 at 11:35



                  Thank you for your interest in this question.
                  Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                  Would you like to answer one of these unanswered questions instead?














                  16 Answers
                  16






                  active

                  oldest

                  votes








                  16 Answers
                  16






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes








                  up vote
                  473
                  down vote



                  accepted










                  EITHER try this library: http://github.com/erica/uidevice-extension/ (by Erica Sadun). (The library is 7-8 years old, and hence is obsolete)



                  (Sample Code):



                  [[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
                  [[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"


                  OR You can use this method:



                  You can get the device model number using uname from sys/utsname.h. For example:



                  Objective-C



                  #import <sys/utsname.h> // import it in your header or implementation file.

                  NSString* deviceName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  return [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];
                  }


                  Swift 3



                  extension UIDevice {
                  var modelName: String {
                  var systemInfo = utsname()
                  uname(&systemInfo)
                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }
                  return identifier
                  }
                  }

                  print(UIDevice.current.modelName)


                  The result should be:



                  //Simultor
                  @"i386" on 32-bit Simulator
                  @"x86_64" on 64-bit Simulator

                  //iPhone
                  @"iPhone1,1" on iPhone
                  @"iPhone1,2" on iPhone 3G
                  @"iPhone2,1" on iPhone 3GS
                  @"iPhone3,1" on iPhone 4 (GSM)
                  @"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
                  @"iPhone4,1" on iPhone 4S
                  @"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
                  @"iPhone5,2" on iPhone 5 (model A1429, everything else)
                  @"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
                  @"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
                  @"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" on iPhone 6 Plus
                  @"iPhone7,2" on iPhone 6
                  @"iPhone8,1" on iPhone 6S
                  @"iPhone8,2" on iPhone 6S Plus
                  @"iPhone8,4" on iPhone SE
                  @"iPhone9,1" on iPhone 7 (CDMA)
                  @"iPhone9,3" on iPhone 7 (GSM)
                  @"iPhone9,2" on iPhone 7 Plus (CDMA)
                  @"iPhone9,4" on iPhone 7 Plus (GSM)
                  @"iPhone10,1" on iPhone 8 (CDMA)
                  @"iPhone10,4" on iPhone 8 (GSM)
                  @"iPhone10,2" on iPhone 8 Plus (CDMA)
                  @"iPhone10,5" on iPhone 8 Plus (GSM)
                  @"iPhone10,3" on iPhone X (CDMA)
                  @"iPhone10,6" on iPhone X (GSM)
                  @"iPhone11,2" on iPhone XS
                  @"iPhone11,4" on iPhone XS Max
                  @"iPhone11,6" on iPhone XS Max China
                  @"iPhone11,8" on iPhone XR

                  //iPad 1
                  @"iPad1,1" on iPad - Wifi (model A1219)
                  @"iPad1,1" on iPad - Wifi + Cellular (model A1337)

                  //iPad 2
                  @"iPad2,1" - Wifi (model A1395)
                  @"iPad2,2" - GSM (model A1396)
                  @"iPad2,3" - 3G (model A1397)
                  @"iPad2,4" - Wifi (model A1395)

                  // iPad Mini
                  @"iPad2,5" - Wifi (model A1432)
                  @"iPad2,6" - Wifi + Cellular (model A1454)
                  @"iPad2,7" - Wifi + Cellular (model A1455)

                  //iPad 3
                  @"iPad3,1" - Wifi (model A1416)
                  @"iPad3,2" - Wifi + Cellular (model A1403)
                  @"iPad3,3" - Wifi + Cellular (model A1430)

                  //iPad 4
                  @"iPad3,4" - Wifi (model A1458)
                  @"iPad3,5" - Wifi + Cellular (model A1459)
                  @"iPad3,6" - Wifi + Cellular (model A1460)

                  //iPad AIR
                  @"iPad4,1" - Wifi (model A1474)
                  @"iPad4,2" - Wifi + Cellular (model A1475)
                  @"iPad4,3" - Wifi + Cellular (model A1476)

                  // iPad Mini 2
                  @"iPad4,4" - Wifi (model A1489)
                  @"iPad4,5" - Wifi + Cellular (model A1490)
                  @"iPad4,6" - Wifi + Cellular (model A1491)

                  // iPad Mini 3
                  @"iPad4,7" - Wifi (model A1599)
                  @"iPad4,8" - Wifi + Cellular (model A1600)
                  @"iPad4,9" - Wifi + Cellular (model A1601)

                  // iPad Mini 4
                  @"iPad5,1" - Wifi (model A1538)
                  @"iPad5,2" - Wifi + Cellular (model A1550)

                  //iPad AIR 2
                  @"iPad5,3" - Wifi (model A1566)
                  @"iPad5,4" - Wifi + Cellular (model A1567)

                  // iPad PRO 9.7"
                  @"iPad6,3" - Wifi (model A1673)
                  @"iPad6,4" - Wifi + Cellular (model A1674)
                  @"iPad6,4" - Wifi + Cellular (model A1675)

                  //iPad PRO 12.9"
                  @"iPad6,7" - Wifi (model A1584)
                  @"iPad6,8" - Wifi + Cellular (model A1652)

                  //iPad (5th generation)
                  @"iPad6,11" - Wifi (model A1822)
                  @"iPad6,12" - Wifi + Cellular (model A1823)

                  //iPad PRO 12.9" (2nd Gen)
                  @"iPad7,1" - Wifi (model A1670)
                  @"iPad7,2" - Wifi + Cellular (model A1671)
                  @"iPad7,2" - Wifi + Cellular (model A1821)

                  //iPad PRO 10.5"
                  @"iPad7,3" - Wifi (model A1701)
                  @"iPad7,4" - Wifi + Cellular (model A1709)

                  //iPod Touch
                  @"iPod1,1" on iPod Touch
                  @"iPod2,1" on iPod Touch Second Generation
                  @"iPod3,1" on iPod Touch Third Generation
                  @"iPod4,1" on iPod Touch Fourth Generation
                  @"iPod7,1" on iPod Touch 6th Generation

                  // Apple Watch
                  @"Watch1,1" on Apple Watch 38mm case
                  @"Watch1,2" on Apple Watch 38mm case
                  @"Watch2,6" on Apple Watch Series 1 38mm case
                  @"Watch2,7" on Apple Watch Series 1 42mm case
                  @"Watch2,3" on Apple Watch Series 2 38mm case
                  @"Watch2,4" on Apple Watch Series 2 42mm case
                  @"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
                  @"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
                  @"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
                  @"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
                  @"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
                  @"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
                  @"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
                  @"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)





                  share|improve this answer



















                  • 6




                    Does this put the appstore approval of my app in risk?
                    – Alexis
                    Jun 21 '13 at 12:58






                  • 5




                    @jafar No, it doesn't. ;)
                    – Aniruddh Joshi
                    Jun 21 '13 at 18:38






                  • 2




                    How do I call the machineName method?
                    – Marko
                    Sep 27 '13 at 4:49






                  • 9




                    Swift version: stackoverflow.com/a/26962452/300408
                    – Albert Bori
                    Feb 20 '15 at 17:50






                  • 3




                    Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                    – bendigi
                    Sep 30 '17 at 7:21















                  up vote
                  473
                  down vote



                  accepted










                  EITHER try this library: http://github.com/erica/uidevice-extension/ (by Erica Sadun). (The library is 7-8 years old, and hence is obsolete)



                  (Sample Code):



                  [[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
                  [[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"


                  OR You can use this method:



                  You can get the device model number using uname from sys/utsname.h. For example:



                  Objective-C



                  #import <sys/utsname.h> // import it in your header or implementation file.

                  NSString* deviceName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  return [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];
                  }


                  Swift 3



                  extension UIDevice {
                  var modelName: String {
                  var systemInfo = utsname()
                  uname(&systemInfo)
                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }
                  return identifier
                  }
                  }

                  print(UIDevice.current.modelName)


                  The result should be:



                  //Simultor
                  @"i386" on 32-bit Simulator
                  @"x86_64" on 64-bit Simulator

                  //iPhone
                  @"iPhone1,1" on iPhone
                  @"iPhone1,2" on iPhone 3G
                  @"iPhone2,1" on iPhone 3GS
                  @"iPhone3,1" on iPhone 4 (GSM)
                  @"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
                  @"iPhone4,1" on iPhone 4S
                  @"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
                  @"iPhone5,2" on iPhone 5 (model A1429, everything else)
                  @"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
                  @"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
                  @"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" on iPhone 6 Plus
                  @"iPhone7,2" on iPhone 6
                  @"iPhone8,1" on iPhone 6S
                  @"iPhone8,2" on iPhone 6S Plus
                  @"iPhone8,4" on iPhone SE
                  @"iPhone9,1" on iPhone 7 (CDMA)
                  @"iPhone9,3" on iPhone 7 (GSM)
                  @"iPhone9,2" on iPhone 7 Plus (CDMA)
                  @"iPhone9,4" on iPhone 7 Plus (GSM)
                  @"iPhone10,1" on iPhone 8 (CDMA)
                  @"iPhone10,4" on iPhone 8 (GSM)
                  @"iPhone10,2" on iPhone 8 Plus (CDMA)
                  @"iPhone10,5" on iPhone 8 Plus (GSM)
                  @"iPhone10,3" on iPhone X (CDMA)
                  @"iPhone10,6" on iPhone X (GSM)
                  @"iPhone11,2" on iPhone XS
                  @"iPhone11,4" on iPhone XS Max
                  @"iPhone11,6" on iPhone XS Max China
                  @"iPhone11,8" on iPhone XR

                  //iPad 1
                  @"iPad1,1" on iPad - Wifi (model A1219)
                  @"iPad1,1" on iPad - Wifi + Cellular (model A1337)

                  //iPad 2
                  @"iPad2,1" - Wifi (model A1395)
                  @"iPad2,2" - GSM (model A1396)
                  @"iPad2,3" - 3G (model A1397)
                  @"iPad2,4" - Wifi (model A1395)

                  // iPad Mini
                  @"iPad2,5" - Wifi (model A1432)
                  @"iPad2,6" - Wifi + Cellular (model A1454)
                  @"iPad2,7" - Wifi + Cellular (model A1455)

                  //iPad 3
                  @"iPad3,1" - Wifi (model A1416)
                  @"iPad3,2" - Wifi + Cellular (model A1403)
                  @"iPad3,3" - Wifi + Cellular (model A1430)

                  //iPad 4
                  @"iPad3,4" - Wifi (model A1458)
                  @"iPad3,5" - Wifi + Cellular (model A1459)
                  @"iPad3,6" - Wifi + Cellular (model A1460)

                  //iPad AIR
                  @"iPad4,1" - Wifi (model A1474)
                  @"iPad4,2" - Wifi + Cellular (model A1475)
                  @"iPad4,3" - Wifi + Cellular (model A1476)

                  // iPad Mini 2
                  @"iPad4,4" - Wifi (model A1489)
                  @"iPad4,5" - Wifi + Cellular (model A1490)
                  @"iPad4,6" - Wifi + Cellular (model A1491)

                  // iPad Mini 3
                  @"iPad4,7" - Wifi (model A1599)
                  @"iPad4,8" - Wifi + Cellular (model A1600)
                  @"iPad4,9" - Wifi + Cellular (model A1601)

                  // iPad Mini 4
                  @"iPad5,1" - Wifi (model A1538)
                  @"iPad5,2" - Wifi + Cellular (model A1550)

                  //iPad AIR 2
                  @"iPad5,3" - Wifi (model A1566)
                  @"iPad5,4" - Wifi + Cellular (model A1567)

                  // iPad PRO 9.7"
                  @"iPad6,3" - Wifi (model A1673)
                  @"iPad6,4" - Wifi + Cellular (model A1674)
                  @"iPad6,4" - Wifi + Cellular (model A1675)

                  //iPad PRO 12.9"
                  @"iPad6,7" - Wifi (model A1584)
                  @"iPad6,8" - Wifi + Cellular (model A1652)

                  //iPad (5th generation)
                  @"iPad6,11" - Wifi (model A1822)
                  @"iPad6,12" - Wifi + Cellular (model A1823)

                  //iPad PRO 12.9" (2nd Gen)
                  @"iPad7,1" - Wifi (model A1670)
                  @"iPad7,2" - Wifi + Cellular (model A1671)
                  @"iPad7,2" - Wifi + Cellular (model A1821)

                  //iPad PRO 10.5"
                  @"iPad7,3" - Wifi (model A1701)
                  @"iPad7,4" - Wifi + Cellular (model A1709)

                  //iPod Touch
                  @"iPod1,1" on iPod Touch
                  @"iPod2,1" on iPod Touch Second Generation
                  @"iPod3,1" on iPod Touch Third Generation
                  @"iPod4,1" on iPod Touch Fourth Generation
                  @"iPod7,1" on iPod Touch 6th Generation

                  // Apple Watch
                  @"Watch1,1" on Apple Watch 38mm case
                  @"Watch1,2" on Apple Watch 38mm case
                  @"Watch2,6" on Apple Watch Series 1 38mm case
                  @"Watch2,7" on Apple Watch Series 1 42mm case
                  @"Watch2,3" on Apple Watch Series 2 38mm case
                  @"Watch2,4" on Apple Watch Series 2 42mm case
                  @"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
                  @"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
                  @"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
                  @"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
                  @"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
                  @"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
                  @"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
                  @"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)





                  share|improve this answer



















                  • 6




                    Does this put the appstore approval of my app in risk?
                    – Alexis
                    Jun 21 '13 at 12:58






                  • 5




                    @jafar No, it doesn't. ;)
                    – Aniruddh Joshi
                    Jun 21 '13 at 18:38






                  • 2




                    How do I call the machineName method?
                    – Marko
                    Sep 27 '13 at 4:49






                  • 9




                    Swift version: stackoverflow.com/a/26962452/300408
                    – Albert Bori
                    Feb 20 '15 at 17:50






                  • 3




                    Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                    – bendigi
                    Sep 30 '17 at 7:21













                  up vote
                  473
                  down vote



                  accepted







                  up vote
                  473
                  down vote



                  accepted






                  EITHER try this library: http://github.com/erica/uidevice-extension/ (by Erica Sadun). (The library is 7-8 years old, and hence is obsolete)



                  (Sample Code):



                  [[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
                  [[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"


                  OR You can use this method:



                  You can get the device model number using uname from sys/utsname.h. For example:



                  Objective-C



                  #import <sys/utsname.h> // import it in your header or implementation file.

                  NSString* deviceName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  return [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];
                  }


                  Swift 3



                  extension UIDevice {
                  var modelName: String {
                  var systemInfo = utsname()
                  uname(&systemInfo)
                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }
                  return identifier
                  }
                  }

                  print(UIDevice.current.modelName)


                  The result should be:



                  //Simultor
                  @"i386" on 32-bit Simulator
                  @"x86_64" on 64-bit Simulator

                  //iPhone
                  @"iPhone1,1" on iPhone
                  @"iPhone1,2" on iPhone 3G
                  @"iPhone2,1" on iPhone 3GS
                  @"iPhone3,1" on iPhone 4 (GSM)
                  @"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
                  @"iPhone4,1" on iPhone 4S
                  @"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
                  @"iPhone5,2" on iPhone 5 (model A1429, everything else)
                  @"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
                  @"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
                  @"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" on iPhone 6 Plus
                  @"iPhone7,2" on iPhone 6
                  @"iPhone8,1" on iPhone 6S
                  @"iPhone8,2" on iPhone 6S Plus
                  @"iPhone8,4" on iPhone SE
                  @"iPhone9,1" on iPhone 7 (CDMA)
                  @"iPhone9,3" on iPhone 7 (GSM)
                  @"iPhone9,2" on iPhone 7 Plus (CDMA)
                  @"iPhone9,4" on iPhone 7 Plus (GSM)
                  @"iPhone10,1" on iPhone 8 (CDMA)
                  @"iPhone10,4" on iPhone 8 (GSM)
                  @"iPhone10,2" on iPhone 8 Plus (CDMA)
                  @"iPhone10,5" on iPhone 8 Plus (GSM)
                  @"iPhone10,3" on iPhone X (CDMA)
                  @"iPhone10,6" on iPhone X (GSM)
                  @"iPhone11,2" on iPhone XS
                  @"iPhone11,4" on iPhone XS Max
                  @"iPhone11,6" on iPhone XS Max China
                  @"iPhone11,8" on iPhone XR

                  //iPad 1
                  @"iPad1,1" on iPad - Wifi (model A1219)
                  @"iPad1,1" on iPad - Wifi + Cellular (model A1337)

                  //iPad 2
                  @"iPad2,1" - Wifi (model A1395)
                  @"iPad2,2" - GSM (model A1396)
                  @"iPad2,3" - 3G (model A1397)
                  @"iPad2,4" - Wifi (model A1395)

                  // iPad Mini
                  @"iPad2,5" - Wifi (model A1432)
                  @"iPad2,6" - Wifi + Cellular (model A1454)
                  @"iPad2,7" - Wifi + Cellular (model A1455)

                  //iPad 3
                  @"iPad3,1" - Wifi (model A1416)
                  @"iPad3,2" - Wifi + Cellular (model A1403)
                  @"iPad3,3" - Wifi + Cellular (model A1430)

                  //iPad 4
                  @"iPad3,4" - Wifi (model A1458)
                  @"iPad3,5" - Wifi + Cellular (model A1459)
                  @"iPad3,6" - Wifi + Cellular (model A1460)

                  //iPad AIR
                  @"iPad4,1" - Wifi (model A1474)
                  @"iPad4,2" - Wifi + Cellular (model A1475)
                  @"iPad4,3" - Wifi + Cellular (model A1476)

                  // iPad Mini 2
                  @"iPad4,4" - Wifi (model A1489)
                  @"iPad4,5" - Wifi + Cellular (model A1490)
                  @"iPad4,6" - Wifi + Cellular (model A1491)

                  // iPad Mini 3
                  @"iPad4,7" - Wifi (model A1599)
                  @"iPad4,8" - Wifi + Cellular (model A1600)
                  @"iPad4,9" - Wifi + Cellular (model A1601)

                  // iPad Mini 4
                  @"iPad5,1" - Wifi (model A1538)
                  @"iPad5,2" - Wifi + Cellular (model A1550)

                  //iPad AIR 2
                  @"iPad5,3" - Wifi (model A1566)
                  @"iPad5,4" - Wifi + Cellular (model A1567)

                  // iPad PRO 9.7"
                  @"iPad6,3" - Wifi (model A1673)
                  @"iPad6,4" - Wifi + Cellular (model A1674)
                  @"iPad6,4" - Wifi + Cellular (model A1675)

                  //iPad PRO 12.9"
                  @"iPad6,7" - Wifi (model A1584)
                  @"iPad6,8" - Wifi + Cellular (model A1652)

                  //iPad (5th generation)
                  @"iPad6,11" - Wifi (model A1822)
                  @"iPad6,12" - Wifi + Cellular (model A1823)

                  //iPad PRO 12.9" (2nd Gen)
                  @"iPad7,1" - Wifi (model A1670)
                  @"iPad7,2" - Wifi + Cellular (model A1671)
                  @"iPad7,2" - Wifi + Cellular (model A1821)

                  //iPad PRO 10.5"
                  @"iPad7,3" - Wifi (model A1701)
                  @"iPad7,4" - Wifi + Cellular (model A1709)

                  //iPod Touch
                  @"iPod1,1" on iPod Touch
                  @"iPod2,1" on iPod Touch Second Generation
                  @"iPod3,1" on iPod Touch Third Generation
                  @"iPod4,1" on iPod Touch Fourth Generation
                  @"iPod7,1" on iPod Touch 6th Generation

                  // Apple Watch
                  @"Watch1,1" on Apple Watch 38mm case
                  @"Watch1,2" on Apple Watch 38mm case
                  @"Watch2,6" on Apple Watch Series 1 38mm case
                  @"Watch2,7" on Apple Watch Series 1 42mm case
                  @"Watch2,3" on Apple Watch Series 2 38mm case
                  @"Watch2,4" on Apple Watch Series 2 42mm case
                  @"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
                  @"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
                  @"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
                  @"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
                  @"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
                  @"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
                  @"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
                  @"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)





                  share|improve this answer














                  EITHER try this library: http://github.com/erica/uidevice-extension/ (by Erica Sadun). (The library is 7-8 years old, and hence is obsolete)



                  (Sample Code):



                  [[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
                  [[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"


                  OR You can use this method:



                  You can get the device model number using uname from sys/utsname.h. For example:



                  Objective-C



                  #import <sys/utsname.h> // import it in your header or implementation file.

                  NSString* deviceName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  return [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];
                  }


                  Swift 3



                  extension UIDevice {
                  var modelName: String {
                  var systemInfo = utsname()
                  uname(&systemInfo)
                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }
                  return identifier
                  }
                  }

                  print(UIDevice.current.modelName)


                  The result should be:



                  //Simultor
                  @"i386" on 32-bit Simulator
                  @"x86_64" on 64-bit Simulator

                  //iPhone
                  @"iPhone1,1" on iPhone
                  @"iPhone1,2" on iPhone 3G
                  @"iPhone2,1" on iPhone 3GS
                  @"iPhone3,1" on iPhone 4 (GSM)
                  @"iPhone3,3" on iPhone 4 (CDMA/Verizon/Sprint)
                  @"iPhone4,1" on iPhone 4S
                  @"iPhone5,1" on iPhone 5 (model A1428, AT&T/Canada)
                  @"iPhone5,2" on iPhone 5 (model A1429, everything else)
                  @"iPhone5,3" on iPhone 5c (model A1456, A1532 | GSM)
                  @"iPhone5,4" on iPhone 5c (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" on iPhone 5s (model A1433, A1533 | GSM)
                  @"iPhone6,2" on iPhone 5s (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" on iPhone 6 Plus
                  @"iPhone7,2" on iPhone 6
                  @"iPhone8,1" on iPhone 6S
                  @"iPhone8,2" on iPhone 6S Plus
                  @"iPhone8,4" on iPhone SE
                  @"iPhone9,1" on iPhone 7 (CDMA)
                  @"iPhone9,3" on iPhone 7 (GSM)
                  @"iPhone9,2" on iPhone 7 Plus (CDMA)
                  @"iPhone9,4" on iPhone 7 Plus (GSM)
                  @"iPhone10,1" on iPhone 8 (CDMA)
                  @"iPhone10,4" on iPhone 8 (GSM)
                  @"iPhone10,2" on iPhone 8 Plus (CDMA)
                  @"iPhone10,5" on iPhone 8 Plus (GSM)
                  @"iPhone10,3" on iPhone X (CDMA)
                  @"iPhone10,6" on iPhone X (GSM)
                  @"iPhone11,2" on iPhone XS
                  @"iPhone11,4" on iPhone XS Max
                  @"iPhone11,6" on iPhone XS Max China
                  @"iPhone11,8" on iPhone XR

                  //iPad 1
                  @"iPad1,1" on iPad - Wifi (model A1219)
                  @"iPad1,1" on iPad - Wifi + Cellular (model A1337)

                  //iPad 2
                  @"iPad2,1" - Wifi (model A1395)
                  @"iPad2,2" - GSM (model A1396)
                  @"iPad2,3" - 3G (model A1397)
                  @"iPad2,4" - Wifi (model A1395)

                  // iPad Mini
                  @"iPad2,5" - Wifi (model A1432)
                  @"iPad2,6" - Wifi + Cellular (model A1454)
                  @"iPad2,7" - Wifi + Cellular (model A1455)

                  //iPad 3
                  @"iPad3,1" - Wifi (model A1416)
                  @"iPad3,2" - Wifi + Cellular (model A1403)
                  @"iPad3,3" - Wifi + Cellular (model A1430)

                  //iPad 4
                  @"iPad3,4" - Wifi (model A1458)
                  @"iPad3,5" - Wifi + Cellular (model A1459)
                  @"iPad3,6" - Wifi + Cellular (model A1460)

                  //iPad AIR
                  @"iPad4,1" - Wifi (model A1474)
                  @"iPad4,2" - Wifi + Cellular (model A1475)
                  @"iPad4,3" - Wifi + Cellular (model A1476)

                  // iPad Mini 2
                  @"iPad4,4" - Wifi (model A1489)
                  @"iPad4,5" - Wifi + Cellular (model A1490)
                  @"iPad4,6" - Wifi + Cellular (model A1491)

                  // iPad Mini 3
                  @"iPad4,7" - Wifi (model A1599)
                  @"iPad4,8" - Wifi + Cellular (model A1600)
                  @"iPad4,9" - Wifi + Cellular (model A1601)

                  // iPad Mini 4
                  @"iPad5,1" - Wifi (model A1538)
                  @"iPad5,2" - Wifi + Cellular (model A1550)

                  //iPad AIR 2
                  @"iPad5,3" - Wifi (model A1566)
                  @"iPad5,4" - Wifi + Cellular (model A1567)

                  // iPad PRO 9.7"
                  @"iPad6,3" - Wifi (model A1673)
                  @"iPad6,4" - Wifi + Cellular (model A1674)
                  @"iPad6,4" - Wifi + Cellular (model A1675)

                  //iPad PRO 12.9"
                  @"iPad6,7" - Wifi (model A1584)
                  @"iPad6,8" - Wifi + Cellular (model A1652)

                  //iPad (5th generation)
                  @"iPad6,11" - Wifi (model A1822)
                  @"iPad6,12" - Wifi + Cellular (model A1823)

                  //iPad PRO 12.9" (2nd Gen)
                  @"iPad7,1" - Wifi (model A1670)
                  @"iPad7,2" - Wifi + Cellular (model A1671)
                  @"iPad7,2" - Wifi + Cellular (model A1821)

                  //iPad PRO 10.5"
                  @"iPad7,3" - Wifi (model A1701)
                  @"iPad7,4" - Wifi + Cellular (model A1709)

                  //iPod Touch
                  @"iPod1,1" on iPod Touch
                  @"iPod2,1" on iPod Touch Second Generation
                  @"iPod3,1" on iPod Touch Third Generation
                  @"iPod4,1" on iPod Touch Fourth Generation
                  @"iPod7,1" on iPod Touch 6th Generation

                  // Apple Watch
                  @"Watch1,1" on Apple Watch 38mm case
                  @"Watch1,2" on Apple Watch 38mm case
                  @"Watch2,6" on Apple Watch Series 1 38mm case
                  @"Watch2,7" on Apple Watch Series 1 42mm case
                  @"Watch2,3" on Apple Watch Series 2 38mm case
                  @"Watch2,4" on Apple Watch Series 2 42mm case
                  @"Watch3,1" on Apple Watch Series 3 38mm case (GPS+Cellular)
                  @"Watch3,2" on Apple Watch Series 3 42mm case (GPS+Cellular)
                  @"Watch3,3" on Apple Watch Series 3 38mm case (GPS)
                  @"Watch3,4" on Apple Watch Series 3 42mm case (GPS)
                  @"Watch4,1" on Apple Watch Series 4 40mm case (GPS)
                  @"Watch4,2" on Apple Watch Series 4 44mm case (GPS)
                  @"Watch4,3" on Apple Watch Series 4 40mm case (GPS+Cellular)
                  @"Watch4,4" on Apple Watch Series 4 44mm case (GPS+Cellular)






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Sep 27 at 22:52

























                  answered Jun 25 '12 at 21:41









                  Aniruddh Joshi

                  6,10911843




                  6,10911843








                  • 6




                    Does this put the appstore approval of my app in risk?
                    – Alexis
                    Jun 21 '13 at 12:58






                  • 5




                    @jafar No, it doesn't. ;)
                    – Aniruddh Joshi
                    Jun 21 '13 at 18:38






                  • 2




                    How do I call the machineName method?
                    – Marko
                    Sep 27 '13 at 4:49






                  • 9




                    Swift version: stackoverflow.com/a/26962452/300408
                    – Albert Bori
                    Feb 20 '15 at 17:50






                  • 3




                    Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                    – bendigi
                    Sep 30 '17 at 7:21














                  • 6




                    Does this put the appstore approval of my app in risk?
                    – Alexis
                    Jun 21 '13 at 12:58






                  • 5




                    @jafar No, it doesn't. ;)
                    – Aniruddh Joshi
                    Jun 21 '13 at 18:38






                  • 2




                    How do I call the machineName method?
                    – Marko
                    Sep 27 '13 at 4:49






                  • 9




                    Swift version: stackoverflow.com/a/26962452/300408
                    – Albert Bori
                    Feb 20 '15 at 17:50






                  • 3




                    Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                    – bendigi
                    Sep 30 '17 at 7:21








                  6




                  6




                  Does this put the appstore approval of my app in risk?
                  – Alexis
                  Jun 21 '13 at 12:58




                  Does this put the appstore approval of my app in risk?
                  – Alexis
                  Jun 21 '13 at 12:58




                  5




                  5




                  @jafar No, it doesn't. ;)
                  – Aniruddh Joshi
                  Jun 21 '13 at 18:38




                  @jafar No, it doesn't. ;)
                  – Aniruddh Joshi
                  Jun 21 '13 at 18:38




                  2




                  2




                  How do I call the machineName method?
                  – Marko
                  Sep 27 '13 at 4:49




                  How do I call the machineName method?
                  – Marko
                  Sep 27 '13 at 4:49




                  9




                  9




                  Swift version: stackoverflow.com/a/26962452/300408
                  – Albert Bori
                  Feb 20 '15 at 17:50




                  Swift version: stackoverflow.com/a/26962452/300408
                  – Albert Bori
                  Feb 20 '15 at 17:50




                  3




                  3




                  Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                  – bendigi
                  Sep 30 '17 at 7:21




                  Any way we can identify iPhone X in the simulator? It appears that it ony responds with "Simulator"
                  – bendigi
                  Sep 30 '17 at 7:21












                  up vote
                  112
                  down vote













                  Expanding on OhhMee's answer above, I added some failsafe to support future devices not (yet) included on the list:



                  #import <sys/utsname.h>
                  #import "MyClass.h"

                  @implementation MyClass
                  {
                  //(your private ivars)
                  }

                  - (NSString*) deviceName
                  {
                  struct utsname systemInfo;

                  uname(&systemInfo);

                  NSString* code = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  static NSDictionary* deviceNamesByCode = nil;

                  if (!deviceNamesByCode) {

                  deviceNamesByCode = @{@"i386" : @"Simulator",
                  @"x86_64" : @"Simulator",
                  @"iPod1,1" : @"iPod Touch", // (Original)
                  @"iPod2,1" : @"iPod Touch", // (Second Generation)
                  @"iPod3,1" : @"iPod Touch", // (Third Generation)
                  @"iPod4,1" : @"iPod Touch", // (Fourth Generation)
                  @"iPod7,1" : @"iPod Touch", // (6th Generation)
                  @"iPhone1,1" : @"iPhone", // (Original)
                  @"iPhone1,2" : @"iPhone", // (3G)
                  @"iPhone2,1" : @"iPhone", // (3GS)
                  @"iPad1,1" : @"iPad", // (Original)
                  @"iPad2,1" : @"iPad 2", //
                  @"iPad3,1" : @"iPad", // (3rd Generation)
                  @"iPhone3,1" : @"iPhone 4", // (GSM)
                  @"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
                  @"iPhone4,1" : @"iPhone 4S", //
                  @"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
                  @"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
                  @"iPad3,4" : @"iPad", // (4th Generation)
                  @"iPad2,5" : @"iPad Mini", // (Original)
                  @"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532 | GSM)
                  @"iPhone5,4" : @"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" : @"iPhone 5s", // (model A1433, A1533 | GSM)
                  @"iPhone6,2" : @"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" : @"iPhone 6 Plus", //
                  @"iPhone7,2" : @"iPhone 6", //
                  @"iPhone8,1" : @"iPhone 6S", //
                  @"iPhone8,2" : @"iPhone 6S Plus", //
                  @"iPhone8,4" : @"iPhone SE", //
                  @"iPhone9,1" : @"iPhone 7", //
                  @"iPhone9,3" : @"iPhone 7", //
                  @"iPhone9,2" : @"iPhone 7 Plus", //
                  @"iPhone9,4" : @"iPhone 7 Plus", //
                  @"iPhone10,1": @"iPhone 8", // CDMA
                  @"iPhone10,4": @"iPhone 8", // GSM
                  @"iPhone10,2": @"iPhone 8 Plus", // CDMA
                  @"iPhone10,5": @"iPhone 8 Plus", // GSM
                  @"iPhone10,3": @"iPhone X", // CDMA
                  @"iPhone10,6": @"iPhone X", // GSM
                  @"iPhone11,2": @"iPhone XS", //
                  @"iPhone11,4": @"iPhone XS Max", //
                  @"iPhone11,6": @"iPhone XS Max", // China
                  @"iPhone11,8": @"iPhone XR", //

                  @"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                  @"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                  @"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                  @"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular)
                  @"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599))
                  @"iPad6,7" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1584)
                  @"iPad6,8" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1652)
                  @"iPad6,3" : @"iPad Pro (9.7")", // iPad Pro 9.7 inches - (model A1673)
                  @"iPad6,4" : @"iPad Pro (9.7")" // iPad Pro 9.7 inches - (models A1674 and A1675)
                  };
                  }

                  NSString* deviceName = [deviceNamesByCode objectForKey:code];

                  if (!deviceName) {
                  // Not found on database. At least guess main device type from string contents:

                  if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                  deviceName = @"iPod Touch";
                  }
                  else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                  deviceName = @"iPad";
                  }
                  else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                  deviceName = @"iPhone";
                  }
                  else {
                  deviceName = @"Unknown";
                  }
                  }

                  return deviceName;
                  }

                  // (rest of class implementation omitted)

                  @end


                  I also omitted the detailed information (e.g. "model A1507, A1516, A1526 (China), A1529 | Global") and placed it in the comments instead, in case you want to use this as user-facing strings and not freak them out.





                  Edit: This answer provides a similar implementation using Swift 2.



                  Edit 2: I just added the iPad Pro models (both sizes). For future reference, the model numbers/etc. can be found in The iPhone Wiki.



                  Edit 3: Add support for iPhone XS, iPhone XS Max and iPhone XR.






                  share|improve this answer



















                  • 2




                    I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                    – Nicolas Miari
                    Jan 28 '14 at 7:39






                  • 1




                    I use this. Works great. Thanks Nicolas.
                    – braden
                    Sep 11 '14 at 21:48






                  • 1




                    Must update with new devices...
                    – Nicolas Miari
                    Dec 8 '14 at 6:05










                  • @NicolasMiari I have added missing stuff.
                    – tounaobun
                    Dec 22 '15 at 6:35










                  • is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                    – Ashish Pisey
                    Apr 12 at 11:22















                  up vote
                  112
                  down vote













                  Expanding on OhhMee's answer above, I added some failsafe to support future devices not (yet) included on the list:



                  #import <sys/utsname.h>
                  #import "MyClass.h"

                  @implementation MyClass
                  {
                  //(your private ivars)
                  }

                  - (NSString*) deviceName
                  {
                  struct utsname systemInfo;

                  uname(&systemInfo);

                  NSString* code = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  static NSDictionary* deviceNamesByCode = nil;

                  if (!deviceNamesByCode) {

                  deviceNamesByCode = @{@"i386" : @"Simulator",
                  @"x86_64" : @"Simulator",
                  @"iPod1,1" : @"iPod Touch", // (Original)
                  @"iPod2,1" : @"iPod Touch", // (Second Generation)
                  @"iPod3,1" : @"iPod Touch", // (Third Generation)
                  @"iPod4,1" : @"iPod Touch", // (Fourth Generation)
                  @"iPod7,1" : @"iPod Touch", // (6th Generation)
                  @"iPhone1,1" : @"iPhone", // (Original)
                  @"iPhone1,2" : @"iPhone", // (3G)
                  @"iPhone2,1" : @"iPhone", // (3GS)
                  @"iPad1,1" : @"iPad", // (Original)
                  @"iPad2,1" : @"iPad 2", //
                  @"iPad3,1" : @"iPad", // (3rd Generation)
                  @"iPhone3,1" : @"iPhone 4", // (GSM)
                  @"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
                  @"iPhone4,1" : @"iPhone 4S", //
                  @"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
                  @"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
                  @"iPad3,4" : @"iPad", // (4th Generation)
                  @"iPad2,5" : @"iPad Mini", // (Original)
                  @"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532 | GSM)
                  @"iPhone5,4" : @"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" : @"iPhone 5s", // (model A1433, A1533 | GSM)
                  @"iPhone6,2" : @"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" : @"iPhone 6 Plus", //
                  @"iPhone7,2" : @"iPhone 6", //
                  @"iPhone8,1" : @"iPhone 6S", //
                  @"iPhone8,2" : @"iPhone 6S Plus", //
                  @"iPhone8,4" : @"iPhone SE", //
                  @"iPhone9,1" : @"iPhone 7", //
                  @"iPhone9,3" : @"iPhone 7", //
                  @"iPhone9,2" : @"iPhone 7 Plus", //
                  @"iPhone9,4" : @"iPhone 7 Plus", //
                  @"iPhone10,1": @"iPhone 8", // CDMA
                  @"iPhone10,4": @"iPhone 8", // GSM
                  @"iPhone10,2": @"iPhone 8 Plus", // CDMA
                  @"iPhone10,5": @"iPhone 8 Plus", // GSM
                  @"iPhone10,3": @"iPhone X", // CDMA
                  @"iPhone10,6": @"iPhone X", // GSM
                  @"iPhone11,2": @"iPhone XS", //
                  @"iPhone11,4": @"iPhone XS Max", //
                  @"iPhone11,6": @"iPhone XS Max", // China
                  @"iPhone11,8": @"iPhone XR", //

                  @"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                  @"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                  @"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                  @"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular)
                  @"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599))
                  @"iPad6,7" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1584)
                  @"iPad6,8" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1652)
                  @"iPad6,3" : @"iPad Pro (9.7")", // iPad Pro 9.7 inches - (model A1673)
                  @"iPad6,4" : @"iPad Pro (9.7")" // iPad Pro 9.7 inches - (models A1674 and A1675)
                  };
                  }

                  NSString* deviceName = [deviceNamesByCode objectForKey:code];

                  if (!deviceName) {
                  // Not found on database. At least guess main device type from string contents:

                  if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                  deviceName = @"iPod Touch";
                  }
                  else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                  deviceName = @"iPad";
                  }
                  else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                  deviceName = @"iPhone";
                  }
                  else {
                  deviceName = @"Unknown";
                  }
                  }

                  return deviceName;
                  }

                  // (rest of class implementation omitted)

                  @end


                  I also omitted the detailed information (e.g. "model A1507, A1516, A1526 (China), A1529 | Global") and placed it in the comments instead, in case you want to use this as user-facing strings and not freak them out.





                  Edit: This answer provides a similar implementation using Swift 2.



                  Edit 2: I just added the iPad Pro models (both sizes). For future reference, the model numbers/etc. can be found in The iPhone Wiki.



                  Edit 3: Add support for iPhone XS, iPhone XS Max and iPhone XR.






                  share|improve this answer



















                  • 2




                    I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                    – Nicolas Miari
                    Jan 28 '14 at 7:39






                  • 1




                    I use this. Works great. Thanks Nicolas.
                    – braden
                    Sep 11 '14 at 21:48






                  • 1




                    Must update with new devices...
                    – Nicolas Miari
                    Dec 8 '14 at 6:05










                  • @NicolasMiari I have added missing stuff.
                    – tounaobun
                    Dec 22 '15 at 6:35










                  • is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                    – Ashish Pisey
                    Apr 12 at 11:22













                  up vote
                  112
                  down vote










                  up vote
                  112
                  down vote









                  Expanding on OhhMee's answer above, I added some failsafe to support future devices not (yet) included on the list:



                  #import <sys/utsname.h>
                  #import "MyClass.h"

                  @implementation MyClass
                  {
                  //(your private ivars)
                  }

                  - (NSString*) deviceName
                  {
                  struct utsname systemInfo;

                  uname(&systemInfo);

                  NSString* code = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  static NSDictionary* deviceNamesByCode = nil;

                  if (!deviceNamesByCode) {

                  deviceNamesByCode = @{@"i386" : @"Simulator",
                  @"x86_64" : @"Simulator",
                  @"iPod1,1" : @"iPod Touch", // (Original)
                  @"iPod2,1" : @"iPod Touch", // (Second Generation)
                  @"iPod3,1" : @"iPod Touch", // (Third Generation)
                  @"iPod4,1" : @"iPod Touch", // (Fourth Generation)
                  @"iPod7,1" : @"iPod Touch", // (6th Generation)
                  @"iPhone1,1" : @"iPhone", // (Original)
                  @"iPhone1,2" : @"iPhone", // (3G)
                  @"iPhone2,1" : @"iPhone", // (3GS)
                  @"iPad1,1" : @"iPad", // (Original)
                  @"iPad2,1" : @"iPad 2", //
                  @"iPad3,1" : @"iPad", // (3rd Generation)
                  @"iPhone3,1" : @"iPhone 4", // (GSM)
                  @"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
                  @"iPhone4,1" : @"iPhone 4S", //
                  @"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
                  @"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
                  @"iPad3,4" : @"iPad", // (4th Generation)
                  @"iPad2,5" : @"iPad Mini", // (Original)
                  @"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532 | GSM)
                  @"iPhone5,4" : @"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" : @"iPhone 5s", // (model A1433, A1533 | GSM)
                  @"iPhone6,2" : @"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" : @"iPhone 6 Plus", //
                  @"iPhone7,2" : @"iPhone 6", //
                  @"iPhone8,1" : @"iPhone 6S", //
                  @"iPhone8,2" : @"iPhone 6S Plus", //
                  @"iPhone8,4" : @"iPhone SE", //
                  @"iPhone9,1" : @"iPhone 7", //
                  @"iPhone9,3" : @"iPhone 7", //
                  @"iPhone9,2" : @"iPhone 7 Plus", //
                  @"iPhone9,4" : @"iPhone 7 Plus", //
                  @"iPhone10,1": @"iPhone 8", // CDMA
                  @"iPhone10,4": @"iPhone 8", // GSM
                  @"iPhone10,2": @"iPhone 8 Plus", // CDMA
                  @"iPhone10,5": @"iPhone 8 Plus", // GSM
                  @"iPhone10,3": @"iPhone X", // CDMA
                  @"iPhone10,6": @"iPhone X", // GSM
                  @"iPhone11,2": @"iPhone XS", //
                  @"iPhone11,4": @"iPhone XS Max", //
                  @"iPhone11,6": @"iPhone XS Max", // China
                  @"iPhone11,8": @"iPhone XR", //

                  @"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                  @"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                  @"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                  @"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular)
                  @"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599))
                  @"iPad6,7" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1584)
                  @"iPad6,8" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1652)
                  @"iPad6,3" : @"iPad Pro (9.7")", // iPad Pro 9.7 inches - (model A1673)
                  @"iPad6,4" : @"iPad Pro (9.7")" // iPad Pro 9.7 inches - (models A1674 and A1675)
                  };
                  }

                  NSString* deviceName = [deviceNamesByCode objectForKey:code];

                  if (!deviceName) {
                  // Not found on database. At least guess main device type from string contents:

                  if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                  deviceName = @"iPod Touch";
                  }
                  else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                  deviceName = @"iPad";
                  }
                  else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                  deviceName = @"iPhone";
                  }
                  else {
                  deviceName = @"Unknown";
                  }
                  }

                  return deviceName;
                  }

                  // (rest of class implementation omitted)

                  @end


                  I also omitted the detailed information (e.g. "model A1507, A1516, A1526 (China), A1529 | Global") and placed it in the comments instead, in case you want to use this as user-facing strings and not freak them out.





                  Edit: This answer provides a similar implementation using Swift 2.



                  Edit 2: I just added the iPad Pro models (both sizes). For future reference, the model numbers/etc. can be found in The iPhone Wiki.



                  Edit 3: Add support for iPhone XS, iPhone XS Max and iPhone XR.






                  share|improve this answer














                  Expanding on OhhMee's answer above, I added some failsafe to support future devices not (yet) included on the list:



                  #import <sys/utsname.h>
                  #import "MyClass.h"

                  @implementation MyClass
                  {
                  //(your private ivars)
                  }

                  - (NSString*) deviceName
                  {
                  struct utsname systemInfo;

                  uname(&systemInfo);

                  NSString* code = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  static NSDictionary* deviceNamesByCode = nil;

                  if (!deviceNamesByCode) {

                  deviceNamesByCode = @{@"i386" : @"Simulator",
                  @"x86_64" : @"Simulator",
                  @"iPod1,1" : @"iPod Touch", // (Original)
                  @"iPod2,1" : @"iPod Touch", // (Second Generation)
                  @"iPod3,1" : @"iPod Touch", // (Third Generation)
                  @"iPod4,1" : @"iPod Touch", // (Fourth Generation)
                  @"iPod7,1" : @"iPod Touch", // (6th Generation)
                  @"iPhone1,1" : @"iPhone", // (Original)
                  @"iPhone1,2" : @"iPhone", // (3G)
                  @"iPhone2,1" : @"iPhone", // (3GS)
                  @"iPad1,1" : @"iPad", // (Original)
                  @"iPad2,1" : @"iPad 2", //
                  @"iPad3,1" : @"iPad", // (3rd Generation)
                  @"iPhone3,1" : @"iPhone 4", // (GSM)
                  @"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint)
                  @"iPhone4,1" : @"iPhone 4S", //
                  @"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada)
                  @"iPhone5,2" : @"iPhone 5", // (model A1429, everything else)
                  @"iPad3,4" : @"iPad", // (4th Generation)
                  @"iPad2,5" : @"iPad Mini", // (Original)
                  @"iPhone5,3" : @"iPhone 5c", // (model A1456, A1532 | GSM)
                  @"iPhone5,4" : @"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                  @"iPhone6,1" : @"iPhone 5s", // (model A1433, A1533 | GSM)
                  @"iPhone6,2" : @"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                  @"iPhone7,1" : @"iPhone 6 Plus", //
                  @"iPhone7,2" : @"iPhone 6", //
                  @"iPhone8,1" : @"iPhone 6S", //
                  @"iPhone8,2" : @"iPhone 6S Plus", //
                  @"iPhone8,4" : @"iPhone SE", //
                  @"iPhone9,1" : @"iPhone 7", //
                  @"iPhone9,3" : @"iPhone 7", //
                  @"iPhone9,2" : @"iPhone 7 Plus", //
                  @"iPhone9,4" : @"iPhone 7 Plus", //
                  @"iPhone10,1": @"iPhone 8", // CDMA
                  @"iPhone10,4": @"iPhone 8", // GSM
                  @"iPhone10,2": @"iPhone 8 Plus", // CDMA
                  @"iPhone10,5": @"iPhone 8 Plus", // GSM
                  @"iPhone10,3": @"iPhone X", // CDMA
                  @"iPhone10,6": @"iPhone X", // GSM
                  @"iPhone11,2": @"iPhone XS", //
                  @"iPhone11,4": @"iPhone XS Max", //
                  @"iPhone11,6": @"iPhone XS Max", // China
                  @"iPhone11,8": @"iPhone XR", //

                  @"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                  @"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                  @"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                  @"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular)
                  @"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599))
                  @"iPad6,7" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1584)
                  @"iPad6,8" : @"iPad Pro (12.9")", // iPad Pro 12.9 inches - (model A1652)
                  @"iPad6,3" : @"iPad Pro (9.7")", // iPad Pro 9.7 inches - (model A1673)
                  @"iPad6,4" : @"iPad Pro (9.7")" // iPad Pro 9.7 inches - (models A1674 and A1675)
                  };
                  }

                  NSString* deviceName = [deviceNamesByCode objectForKey:code];

                  if (!deviceName) {
                  // Not found on database. At least guess main device type from string contents:

                  if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                  deviceName = @"iPod Touch";
                  }
                  else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                  deviceName = @"iPad";
                  }
                  else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                  deviceName = @"iPhone";
                  }
                  else {
                  deviceName = @"Unknown";
                  }
                  }

                  return deviceName;
                  }

                  // (rest of class implementation omitted)

                  @end


                  I also omitted the detailed information (e.g. "model A1507, A1516, A1526 (China), A1529 | Global") and placed it in the comments instead, in case you want to use this as user-facing strings and not freak them out.





                  Edit: This answer provides a similar implementation using Swift 2.



                  Edit 2: I just added the iPad Pro models (both sizes). For future reference, the model numbers/etc. can be found in The iPhone Wiki.



                  Edit 3: Add support for iPhone XS, iPhone XS Max and iPhone XR.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 7 at 10:21









                  tounaobun

                  7,92883467




                  7,92883467










                  answered Nov 19 '13 at 2:44









                  Nicolas Miari

                  9,919550122




                  9,919550122








                  • 2




                    I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                    – Nicolas Miari
                    Jan 28 '14 at 7:39






                  • 1




                    I use this. Works great. Thanks Nicolas.
                    – braden
                    Sep 11 '14 at 21:48






                  • 1




                    Must update with new devices...
                    – Nicolas Miari
                    Dec 8 '14 at 6:05










                  • @NicolasMiari I have added missing stuff.
                    – tounaobun
                    Dec 22 '15 at 6:35










                  • is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                    – Ashish Pisey
                    Apr 12 at 11:22














                  • 2




                    I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                    – Nicolas Miari
                    Jan 28 '14 at 7:39






                  • 1




                    I use this. Works great. Thanks Nicolas.
                    – braden
                    Sep 11 '14 at 21:48






                  • 1




                    Must update with new devices...
                    – Nicolas Miari
                    Dec 8 '14 at 6:05










                  • @NicolasMiari I have added missing stuff.
                    – tounaobun
                    Dec 22 '15 at 6:35










                  • is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                    – Ashish Pisey
                    Apr 12 at 11:22








                  2




                  2




                  I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                  – Nicolas Miari
                  Jan 28 '14 at 7:39




                  I was mistakenly searching for the strings "iPhone", "iPad" and "iPod" inside deviceName, when I intended to search code. Someone suggested an edit but I couldn't approve it before some other people rejected it, so I corrected the answer myself. Thanks to whoever suggested it.
                  – Nicolas Miari
                  Jan 28 '14 at 7:39




                  1




                  1




                  I use this. Works great. Thanks Nicolas.
                  – braden
                  Sep 11 '14 at 21:48




                  I use this. Works great. Thanks Nicolas.
                  – braden
                  Sep 11 '14 at 21:48




                  1




                  1




                  Must update with new devices...
                  – Nicolas Miari
                  Dec 8 '14 at 6:05




                  Must update with new devices...
                  – Nicolas Miari
                  Dec 8 '14 at 6:05












                  @NicolasMiari I have added missing stuff.
                  – tounaobun
                  Dec 22 '15 at 6:35




                  @NicolasMiari I have added missing stuff.
                  – tounaobun
                  Dec 22 '15 at 6:35












                  is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                  – Ashish Pisey
                  Apr 12 at 11:22




                  is Code unique. There is no official documentation for the systemInfo.machine. Will the identifier like "iPhone7,2" will always be unique for @"iPhone 6" or it can change in future.
                  – Ashish Pisey
                  Apr 12 at 11:22










                  up vote
                  35
                  down vote













                  I've made the plist file to help you to get the complete name for each device (source code right at the end of my answer)



                  Based on OhhMee's answer, you can use it like this:



                  Swift 4.0



                  static func deviceName() -> String {

                  var systemInfo = utsname()
                  uname(&systemInfo)

                  guard let iOSDeviceModelsPath = Bundle.main.path(forResource: "iOSDeviceModelMapping", ofType: "plist") else { return "" }
                  guard let iOSDevices = NSDictionary(contentsOfFile: iOSDeviceModelsPath) else { return "" }

                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }

                  return iOSDevices.value(forKey: identifier) as! String
                  }


                  Don't forget to add #import <sys/utsname.h> in your Bridging Header.



                  Objective C



                  #import <sys/utsname.h>

                  NSString *machineName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"];
                  NSDictionary *iOSDevices = [NSDictionary dictionaryWithContentsOfFile:iOSDeviceModelsPath];

                  NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  return [iOSDevices valueForKey:deviceModel];
                  }


                  The plist file :



                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                  <plist version="1.0">
                  <dict>
                  <key>x86_64</key>
                  <string>Simulator</string>
                  <key>i386</key>
                  <string>Simulator</string>
                  <key>iPod1,1</key>
                  <string>iPod Touch 1st Gen</string>
                  <key>iPod2,1</key>
                  <string>iPod Touch 2nd Gen</string>
                  <key>iPod3,1</key>
                  <string>iPod Touch 3rd Gen</string>
                  <key>iPod4,1</key>
                  <string>iPod Touch 4th Gen</string>
                  <key>iPod5,1</key>
                  <string>iPod Touch 5th Gen</string>
                  <key>iPod7,1</key>
                  <string>iPod Touch 6th Gen</string>
                  <key>iPhone1,1</key>
                  <string>iPhone</string>
                  <key>iPhone1,2</key>
                  <string>iPhone 3G</string>
                  <key>iPhone2,1</key>
                  <string>iPhone 3GS</string>
                  <key>iPhone3,1</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,2</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,3</key>
                  <string>iPhone 4</string>
                  <key>iPhone4,1</key>
                  <string>iPhone 4S</string>
                  <key>iPhone5,1</key>
                  <string>iPhone 5 model A1428</string>
                  <key>iPhone5,2</key>
                  <string>iPhone 5 model A1429</string>
                  <key>iPhone5,3</key>
                  <string>iPhone 5C</string>
                  <key>iPhone5,4</key>
                  <string>iPhone 5C</string>
                  <key>iPhone6,1</key>
                  <string>iPhone 5S</string>
                  <key>iPhone6,2</key>
                  <string>iPhone 5S</string>
                  <key>iPhone7,2</key>
                  <string>iPhone 6</string>
                  <key>iPhone7,1</key>
                  <string>iPhone 6 Plus</string>
                  <key>iPhone8,1</key>
                  <string>iPhone 6S</string>
                  <key>iPhone8,2</key>
                  <string>iPhone 6S Plus</string>
                  <key>iPhone8,4</key>
                  <string>iPhone SE</string>
                  <key>iPhone9,1</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,2</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone9,3</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,4</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone10,1</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,4</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,2</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,5</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,3</key>
                  <string>iPhone X</string>
                  <key>iPhone10,6</key>
                  <string>iPhone X</string>
                  <key>iPhone11,2</key>
                  <string>iPhone XS</string>
                  <key>iPhone11,4</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,6</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,8</key>
                  <string>iPhone XR</string>
                  <key>iPad1,1</key>
                  <string>iPad</string>
                  <key>iPad2,1</key>
                  <string>iPad 2</string>
                  <key>iPad2,2</key>
                  <string>iPad 2</string>
                  <key>iPad2,3</key>
                  <string>iPad 2</string>
                  <key>iPad2,4</key>
                  <string>iPad 2</string>
                  <key>iPad3,1</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,2</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,3</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,4</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,5</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,6</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad4,1</key>
                  <string>iPad Air</string>
                  <key>iPad4,2</key>
                  <string>iPad Air</string>
                  <key>iPad4,3</key>
                  <string>iPad Air</string>
                  <key>iPad2,5</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,6</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,7</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad4,4</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,5</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,6</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,7</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,8</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,9</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad5,1</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,2</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,3</key>
                  <string>iPad Air 2</string>
                  <key>iPad5,4</key>
                  <string>iPad Air 2</string>
                  <key>iPad6,3</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,4</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,7</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad6,8</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad7,1</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,2</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,3</key>
                  <string>iPad Pro 10.5 inch</string>
                  <key>iPad7,4</key>
                  <string>iPad Pro 10.5 inch</string>
                  </dict>
                  </plist>





                  share|improve this answer























                  • updated with latest devices (iPhone 6S, iPad Pro, etc)
                    – Tib
                    Dec 2 '15 at 13:29






                  • 1




                    Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                    – Nicolas Miari
                    Mar 23 '16 at 9:01






                  • 1




                    @NicolasMiari updated ;)
                    – Tib
                    Mar 30 '16 at 9:47






                  • 2




                    Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                    – vilmoskörte
                    Oct 2 '17 at 13:51






                  • 1




                    Updated with new devices: iPhone XS, XS Max and XR
                    – vilmoskörte
                    Sep 18 at 8:24















                  up vote
                  35
                  down vote













                  I've made the plist file to help you to get the complete name for each device (source code right at the end of my answer)



                  Based on OhhMee's answer, you can use it like this:



                  Swift 4.0



                  static func deviceName() -> String {

                  var systemInfo = utsname()
                  uname(&systemInfo)

                  guard let iOSDeviceModelsPath = Bundle.main.path(forResource: "iOSDeviceModelMapping", ofType: "plist") else { return "" }
                  guard let iOSDevices = NSDictionary(contentsOfFile: iOSDeviceModelsPath) else { return "" }

                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }

                  return iOSDevices.value(forKey: identifier) as! String
                  }


                  Don't forget to add #import <sys/utsname.h> in your Bridging Header.



                  Objective C



                  #import <sys/utsname.h>

                  NSString *machineName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"];
                  NSDictionary *iOSDevices = [NSDictionary dictionaryWithContentsOfFile:iOSDeviceModelsPath];

                  NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  return [iOSDevices valueForKey:deviceModel];
                  }


                  The plist file :



                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                  <plist version="1.0">
                  <dict>
                  <key>x86_64</key>
                  <string>Simulator</string>
                  <key>i386</key>
                  <string>Simulator</string>
                  <key>iPod1,1</key>
                  <string>iPod Touch 1st Gen</string>
                  <key>iPod2,1</key>
                  <string>iPod Touch 2nd Gen</string>
                  <key>iPod3,1</key>
                  <string>iPod Touch 3rd Gen</string>
                  <key>iPod4,1</key>
                  <string>iPod Touch 4th Gen</string>
                  <key>iPod5,1</key>
                  <string>iPod Touch 5th Gen</string>
                  <key>iPod7,1</key>
                  <string>iPod Touch 6th Gen</string>
                  <key>iPhone1,1</key>
                  <string>iPhone</string>
                  <key>iPhone1,2</key>
                  <string>iPhone 3G</string>
                  <key>iPhone2,1</key>
                  <string>iPhone 3GS</string>
                  <key>iPhone3,1</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,2</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,3</key>
                  <string>iPhone 4</string>
                  <key>iPhone4,1</key>
                  <string>iPhone 4S</string>
                  <key>iPhone5,1</key>
                  <string>iPhone 5 model A1428</string>
                  <key>iPhone5,2</key>
                  <string>iPhone 5 model A1429</string>
                  <key>iPhone5,3</key>
                  <string>iPhone 5C</string>
                  <key>iPhone5,4</key>
                  <string>iPhone 5C</string>
                  <key>iPhone6,1</key>
                  <string>iPhone 5S</string>
                  <key>iPhone6,2</key>
                  <string>iPhone 5S</string>
                  <key>iPhone7,2</key>
                  <string>iPhone 6</string>
                  <key>iPhone7,1</key>
                  <string>iPhone 6 Plus</string>
                  <key>iPhone8,1</key>
                  <string>iPhone 6S</string>
                  <key>iPhone8,2</key>
                  <string>iPhone 6S Plus</string>
                  <key>iPhone8,4</key>
                  <string>iPhone SE</string>
                  <key>iPhone9,1</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,2</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone9,3</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,4</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone10,1</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,4</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,2</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,5</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,3</key>
                  <string>iPhone X</string>
                  <key>iPhone10,6</key>
                  <string>iPhone X</string>
                  <key>iPhone11,2</key>
                  <string>iPhone XS</string>
                  <key>iPhone11,4</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,6</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,8</key>
                  <string>iPhone XR</string>
                  <key>iPad1,1</key>
                  <string>iPad</string>
                  <key>iPad2,1</key>
                  <string>iPad 2</string>
                  <key>iPad2,2</key>
                  <string>iPad 2</string>
                  <key>iPad2,3</key>
                  <string>iPad 2</string>
                  <key>iPad2,4</key>
                  <string>iPad 2</string>
                  <key>iPad3,1</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,2</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,3</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,4</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,5</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,6</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad4,1</key>
                  <string>iPad Air</string>
                  <key>iPad4,2</key>
                  <string>iPad Air</string>
                  <key>iPad4,3</key>
                  <string>iPad Air</string>
                  <key>iPad2,5</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,6</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,7</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad4,4</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,5</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,6</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,7</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,8</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,9</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad5,1</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,2</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,3</key>
                  <string>iPad Air 2</string>
                  <key>iPad5,4</key>
                  <string>iPad Air 2</string>
                  <key>iPad6,3</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,4</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,7</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad6,8</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad7,1</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,2</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,3</key>
                  <string>iPad Pro 10.5 inch</string>
                  <key>iPad7,4</key>
                  <string>iPad Pro 10.5 inch</string>
                  </dict>
                  </plist>





                  share|improve this answer























                  • updated with latest devices (iPhone 6S, iPad Pro, etc)
                    – Tib
                    Dec 2 '15 at 13:29






                  • 1




                    Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                    – Nicolas Miari
                    Mar 23 '16 at 9:01






                  • 1




                    @NicolasMiari updated ;)
                    – Tib
                    Mar 30 '16 at 9:47






                  • 2




                    Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                    – vilmoskörte
                    Oct 2 '17 at 13:51






                  • 1




                    Updated with new devices: iPhone XS, XS Max and XR
                    – vilmoskörte
                    Sep 18 at 8:24













                  up vote
                  35
                  down vote










                  up vote
                  35
                  down vote









                  I've made the plist file to help you to get the complete name for each device (source code right at the end of my answer)



                  Based on OhhMee's answer, you can use it like this:



                  Swift 4.0



                  static func deviceName() -> String {

                  var systemInfo = utsname()
                  uname(&systemInfo)

                  guard let iOSDeviceModelsPath = Bundle.main.path(forResource: "iOSDeviceModelMapping", ofType: "plist") else { return "" }
                  guard let iOSDevices = NSDictionary(contentsOfFile: iOSDeviceModelsPath) else { return "" }

                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }

                  return iOSDevices.value(forKey: identifier) as! String
                  }


                  Don't forget to add #import <sys/utsname.h> in your Bridging Header.



                  Objective C



                  #import <sys/utsname.h>

                  NSString *machineName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"];
                  NSDictionary *iOSDevices = [NSDictionary dictionaryWithContentsOfFile:iOSDeviceModelsPath];

                  NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  return [iOSDevices valueForKey:deviceModel];
                  }


                  The plist file :



                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                  <plist version="1.0">
                  <dict>
                  <key>x86_64</key>
                  <string>Simulator</string>
                  <key>i386</key>
                  <string>Simulator</string>
                  <key>iPod1,1</key>
                  <string>iPod Touch 1st Gen</string>
                  <key>iPod2,1</key>
                  <string>iPod Touch 2nd Gen</string>
                  <key>iPod3,1</key>
                  <string>iPod Touch 3rd Gen</string>
                  <key>iPod4,1</key>
                  <string>iPod Touch 4th Gen</string>
                  <key>iPod5,1</key>
                  <string>iPod Touch 5th Gen</string>
                  <key>iPod7,1</key>
                  <string>iPod Touch 6th Gen</string>
                  <key>iPhone1,1</key>
                  <string>iPhone</string>
                  <key>iPhone1,2</key>
                  <string>iPhone 3G</string>
                  <key>iPhone2,1</key>
                  <string>iPhone 3GS</string>
                  <key>iPhone3,1</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,2</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,3</key>
                  <string>iPhone 4</string>
                  <key>iPhone4,1</key>
                  <string>iPhone 4S</string>
                  <key>iPhone5,1</key>
                  <string>iPhone 5 model A1428</string>
                  <key>iPhone5,2</key>
                  <string>iPhone 5 model A1429</string>
                  <key>iPhone5,3</key>
                  <string>iPhone 5C</string>
                  <key>iPhone5,4</key>
                  <string>iPhone 5C</string>
                  <key>iPhone6,1</key>
                  <string>iPhone 5S</string>
                  <key>iPhone6,2</key>
                  <string>iPhone 5S</string>
                  <key>iPhone7,2</key>
                  <string>iPhone 6</string>
                  <key>iPhone7,1</key>
                  <string>iPhone 6 Plus</string>
                  <key>iPhone8,1</key>
                  <string>iPhone 6S</string>
                  <key>iPhone8,2</key>
                  <string>iPhone 6S Plus</string>
                  <key>iPhone8,4</key>
                  <string>iPhone SE</string>
                  <key>iPhone9,1</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,2</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone9,3</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,4</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone10,1</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,4</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,2</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,5</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,3</key>
                  <string>iPhone X</string>
                  <key>iPhone10,6</key>
                  <string>iPhone X</string>
                  <key>iPhone11,2</key>
                  <string>iPhone XS</string>
                  <key>iPhone11,4</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,6</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,8</key>
                  <string>iPhone XR</string>
                  <key>iPad1,1</key>
                  <string>iPad</string>
                  <key>iPad2,1</key>
                  <string>iPad 2</string>
                  <key>iPad2,2</key>
                  <string>iPad 2</string>
                  <key>iPad2,3</key>
                  <string>iPad 2</string>
                  <key>iPad2,4</key>
                  <string>iPad 2</string>
                  <key>iPad3,1</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,2</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,3</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,4</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,5</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,6</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad4,1</key>
                  <string>iPad Air</string>
                  <key>iPad4,2</key>
                  <string>iPad Air</string>
                  <key>iPad4,3</key>
                  <string>iPad Air</string>
                  <key>iPad2,5</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,6</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,7</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad4,4</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,5</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,6</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,7</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,8</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,9</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad5,1</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,2</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,3</key>
                  <string>iPad Air 2</string>
                  <key>iPad5,4</key>
                  <string>iPad Air 2</string>
                  <key>iPad6,3</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,4</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,7</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad6,8</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad7,1</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,2</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,3</key>
                  <string>iPad Pro 10.5 inch</string>
                  <key>iPad7,4</key>
                  <string>iPad Pro 10.5 inch</string>
                  </dict>
                  </plist>





                  share|improve this answer














                  I've made the plist file to help you to get the complete name for each device (source code right at the end of my answer)



                  Based on OhhMee's answer, you can use it like this:



                  Swift 4.0



                  static func deviceName() -> String {

                  var systemInfo = utsname()
                  uname(&systemInfo)

                  guard let iOSDeviceModelsPath = Bundle.main.path(forResource: "iOSDeviceModelMapping", ofType: "plist") else { return "" }
                  guard let iOSDevices = NSDictionary(contentsOfFile: iOSDeviceModelsPath) else { return "" }

                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                  let identifier = machineMirror.children.reduce("") { identifier, element in
                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                  return identifier + String(UnicodeScalar(UInt8(value)))
                  }

                  return iOSDevices.value(forKey: identifier) as! String
                  }


                  Don't forget to add #import <sys/utsname.h> in your Bridging Header.



                  Objective C



                  #import <sys/utsname.h>

                  NSString *machineName()
                  {
                  struct utsname systemInfo;
                  uname(&systemInfo);

                  NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"];
                  NSDictionary *iOSDevices = [NSDictionary dictionaryWithContentsOfFile:iOSDeviceModelsPath];

                  NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
                  encoding:NSUTF8StringEncoding];

                  return [iOSDevices valueForKey:deviceModel];
                  }


                  The plist file :



                  <?xml version="1.0" encoding="UTF-8"?>
                  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                  <plist version="1.0">
                  <dict>
                  <key>x86_64</key>
                  <string>Simulator</string>
                  <key>i386</key>
                  <string>Simulator</string>
                  <key>iPod1,1</key>
                  <string>iPod Touch 1st Gen</string>
                  <key>iPod2,1</key>
                  <string>iPod Touch 2nd Gen</string>
                  <key>iPod3,1</key>
                  <string>iPod Touch 3rd Gen</string>
                  <key>iPod4,1</key>
                  <string>iPod Touch 4th Gen</string>
                  <key>iPod5,1</key>
                  <string>iPod Touch 5th Gen</string>
                  <key>iPod7,1</key>
                  <string>iPod Touch 6th Gen</string>
                  <key>iPhone1,1</key>
                  <string>iPhone</string>
                  <key>iPhone1,2</key>
                  <string>iPhone 3G</string>
                  <key>iPhone2,1</key>
                  <string>iPhone 3GS</string>
                  <key>iPhone3,1</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,2</key>
                  <string>iPhone 4</string>
                  <key>iPhone3,3</key>
                  <string>iPhone 4</string>
                  <key>iPhone4,1</key>
                  <string>iPhone 4S</string>
                  <key>iPhone5,1</key>
                  <string>iPhone 5 model A1428</string>
                  <key>iPhone5,2</key>
                  <string>iPhone 5 model A1429</string>
                  <key>iPhone5,3</key>
                  <string>iPhone 5C</string>
                  <key>iPhone5,4</key>
                  <string>iPhone 5C</string>
                  <key>iPhone6,1</key>
                  <string>iPhone 5S</string>
                  <key>iPhone6,2</key>
                  <string>iPhone 5S</string>
                  <key>iPhone7,2</key>
                  <string>iPhone 6</string>
                  <key>iPhone7,1</key>
                  <string>iPhone 6 Plus</string>
                  <key>iPhone8,1</key>
                  <string>iPhone 6S</string>
                  <key>iPhone8,2</key>
                  <string>iPhone 6S Plus</string>
                  <key>iPhone8,4</key>
                  <string>iPhone SE</string>
                  <key>iPhone9,1</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,2</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone9,3</key>
                  <string>iPhone 7</string>
                  <key>iPhone9,4</key>
                  <string>iPhone 7 Plus</string>
                  <key>iPhone10,1</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,4</key>
                  <string>iPhone 8</string>
                  <key>iPhone10,2</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,5</key>
                  <string>iPhone 8 Plus</string>
                  <key>iPhone10,3</key>
                  <string>iPhone X</string>
                  <key>iPhone10,6</key>
                  <string>iPhone X</string>
                  <key>iPhone11,2</key>
                  <string>iPhone XS</string>
                  <key>iPhone11,4</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,6</key>
                  <string>iPhone XS Max</string>
                  <key>iPhone11,8</key>
                  <string>iPhone XR</string>
                  <key>iPad1,1</key>
                  <string>iPad</string>
                  <key>iPad2,1</key>
                  <string>iPad 2</string>
                  <key>iPad2,2</key>
                  <string>iPad 2</string>
                  <key>iPad2,3</key>
                  <string>iPad 2</string>
                  <key>iPad2,4</key>
                  <string>iPad 2</string>
                  <key>iPad3,1</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,2</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,3</key>
                  <string>iPad 3rd Gen</string>
                  <key>iPad3,4</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,5</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad3,6</key>
                  <string>iPad 4th Gen</string>
                  <key>iPad4,1</key>
                  <string>iPad Air</string>
                  <key>iPad4,2</key>
                  <string>iPad Air</string>
                  <key>iPad4,3</key>
                  <string>iPad Air</string>
                  <key>iPad2,5</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,6</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad2,7</key>
                  <string>iPad Mini 1st Gen</string>
                  <key>iPad4,4</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,5</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,6</key>
                  <string>iPad Mini 2nd Gen</string>
                  <key>iPad4,7</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,8</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad4,9</key>
                  <string>iPad Mini 3rd Gen</string>
                  <key>iPad5,1</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,2</key>
                  <string>iPad Mini 4</string>
                  <key>iPad5,3</key>
                  <string>iPad Air 2</string>
                  <key>iPad5,4</key>
                  <string>iPad Air 2</string>
                  <key>iPad6,3</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,4</key>
                  <string>iPad Pro 9.7 inch</string>
                  <key>iPad6,7</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad6,8</key>
                  <string>iPad Pro 12.9 inch</string>
                  <key>iPad7,1</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,2</key>
                  <string>iPad Pro 12.9 inch 2nd Gen</string>
                  <key>iPad7,3</key>
                  <string>iPad Pro 10.5 inch</string>
                  <key>iPad7,4</key>
                  <string>iPad Pro 10.5 inch</string>
                  </dict>
                  </plist>






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 6 at 8:44









                  vilmoskörte

                  27218




                  27218










                  answered Jul 15 '13 at 13:47









                  Tib

                  8601019




                  8601019












                  • updated with latest devices (iPhone 6S, iPad Pro, etc)
                    – Tib
                    Dec 2 '15 at 13:29






                  • 1




                    Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                    – Nicolas Miari
                    Mar 23 '16 at 9:01






                  • 1




                    @NicolasMiari updated ;)
                    – Tib
                    Mar 30 '16 at 9:47






                  • 2




                    Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                    – vilmoskörte
                    Oct 2 '17 at 13:51






                  • 1




                    Updated with new devices: iPhone XS, XS Max and XR
                    – vilmoskörte
                    Sep 18 at 8:24


















                  • updated with latest devices (iPhone 6S, iPad Pro, etc)
                    – Tib
                    Dec 2 '15 at 13:29






                  • 1




                    Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                    – Nicolas Miari
                    Mar 23 '16 at 9:01






                  • 1




                    @NicolasMiari updated ;)
                    – Tib
                    Mar 30 '16 at 9:47






                  • 2




                    Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                    – vilmoskörte
                    Oct 2 '17 at 13:51






                  • 1




                    Updated with new devices: iPhone XS, XS Max and XR
                    – vilmoskörte
                    Sep 18 at 8:24
















                  updated with latest devices (iPhone 6S, iPad Pro, etc)
                  – Tib
                  Dec 2 '15 at 13:29




                  updated with latest devices (iPhone 6S, iPad Pro, etc)
                  – Tib
                  Dec 2 '15 at 13:29




                  1




                  1




                  Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                  – Nicolas Miari
                  Mar 23 '16 at 9:01




                  Please inline the contents of your plist file within your answer (hopefully, formatted as code). The same rules that apply to link-only answers apply to an essential file stored outside of SO: it could vanish some day.
                  – Nicolas Miari
                  Mar 23 '16 at 9:01




                  1




                  1




                  @NicolasMiari updated ;)
                  – Tib
                  Mar 30 '16 at 9:47




                  @NicolasMiari updated ;)
                  – Tib
                  Mar 30 '16 at 9:47




                  2




                  2




                  Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                  – vilmoskörte
                  Oct 2 '17 at 13:51




                  Updated with latest devices: iPhone 8 (Plus), iPhone X, iPad Pro 12.9 inch 2nd Gen, iPad Pro 10.5 inch
                  – vilmoskörte
                  Oct 2 '17 at 13:51




                  1




                  1




                  Updated with new devices: iPhone XS, XS Max and XR
                  – vilmoskörte
                  Sep 18 at 8:24




                  Updated with new devices: iPhone XS, XS Max and XR
                  – vilmoskörte
                  Sep 18 at 8:24










                  up vote
                  19
                  down vote













                  [[UIDevice currentDevice] model] just returns iPhone or iPod, you don't get the numbers of the model that would let you differentiate between different generations of devices.



                  Code this method:



                  #include <sys/sysctl.h>
                  ...

                  + (NSString *)getModel {
                  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;
                  }


                  And call the method [self getModel] whenever you need the model and you'll get i.e: "iPhone5,1" for the ridiculously thin and speedy iPhone 5.



                  One good practice is to create a class called Utils.h/Utils.m and put methods like getModel there so you can get this info from anywhere in your App simply by importing the class and invoking [Utils getModel];






                  share|improve this answer



























                    up vote
                    19
                    down vote













                    [[UIDevice currentDevice] model] just returns iPhone or iPod, you don't get the numbers of the model that would let you differentiate between different generations of devices.



                    Code this method:



                    #include <sys/sysctl.h>
                    ...

                    + (NSString *)getModel {
                    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;
                    }


                    And call the method [self getModel] whenever you need the model and you'll get i.e: "iPhone5,1" for the ridiculously thin and speedy iPhone 5.



                    One good practice is to create a class called Utils.h/Utils.m and put methods like getModel there so you can get this info from anywhere in your App simply by importing the class and invoking [Utils getModel];






                    share|improve this answer

























                      up vote
                      19
                      down vote










                      up vote
                      19
                      down vote









                      [[UIDevice currentDevice] model] just returns iPhone or iPod, you don't get the numbers of the model that would let you differentiate between different generations of devices.



                      Code this method:



                      #include <sys/sysctl.h>
                      ...

                      + (NSString *)getModel {
                      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;
                      }


                      And call the method [self getModel] whenever you need the model and you'll get i.e: "iPhone5,1" for the ridiculously thin and speedy iPhone 5.



                      One good practice is to create a class called Utils.h/Utils.m and put methods like getModel there so you can get this info from anywhere in your App simply by importing the class and invoking [Utils getModel];






                      share|improve this answer














                      [[UIDevice currentDevice] model] just returns iPhone or iPod, you don't get the numbers of the model that would let you differentiate between different generations of devices.



                      Code this method:



                      #include <sys/sysctl.h>
                      ...

                      + (NSString *)getModel {
                      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;
                      }


                      And call the method [self getModel] whenever you need the model and you'll get i.e: "iPhone5,1" for the ridiculously thin and speedy iPhone 5.



                      One good practice is to create a class called Utils.h/Utils.m and put methods like getModel there so you can get this info from anywhere in your App simply by importing the class and invoking [Utils getModel];







                      share|improve this answer














                      share|improve this answer



                      share|improve this answer








                      edited Aug 11 '17 at 16:38









                      jww

                      51.9k37211478




                      51.9k37211478










                      answered Oct 3 '12 at 18:18









                      Oscar Salguero

                      8,56534143




                      8,56534143






















                          up vote
                          12
                          down vote













                          I've optimized NicolasMiari's implementation, and added Simulator, here:



                          + (NSString*)deviceName {

                          static NSDictionary* deviceNamesByCode = nil;
                          static NSString* deviceName = nil;

                          if (deviceName) {
                          return deviceName;
                          }

                          deviceNamesByCode = @{
                          @"i386" :@"Simulator",
                          @"iPod1,1" :@"iPod Touch", // (Original)
                          @"iPod2,1" :@"iPod Touch", // (Second Generation)
                          @"iPod3,1" :@"iPod Touch", // (Third Generation)
                          @"iPod4,1" :@"iPod Touch", // (Fourth Generation)
                          @"iPhone1,1" :@"iPhone", // (Original)
                          @"iPhone1,2" :@"iPhone", // (3G)
                          @"iPhone2,1" :@"iPhone", // (3GS)
                          @"iPad1,1" :@"iPad", // (Original)
                          @"iPad2,1" :@"iPad 2", //
                          @"iPad3,1" :@"iPad", // (3rd Generation)
                          @"iPhone3,1" :@"iPhone 4", //
                          @"iPhone4,1" :@"iPhone 4S", //
                          @"iPhone5,1" :@"iPhone 5", // (model A1428, AT&T/Canada)
                          @"iPhone5,2" :@"iPhone 5", // (model A1429, everything else)
                          @"iPad3,4" :@"iPad", // (4th Generation)
                          @"iPad2,5" :@"iPad Mini", // (Original)
                          @"iPhone5,3" :@"iPhone 5c", // (model A1456, A1532 | GSM)
                          @"iPhone5,4" :@"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                          @"iPhone6,1" :@"iPhone 5s", // (model A1433, A1533 | GSM)
                          @"iPhone6,2" :@"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                          @"iPad4,1" :@"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                          @"iPad4,2" :@"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                          @"iPad4,4" :@"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                          @"iPad4,5" :@"iPad Mini" // (2nd Generation iPad Mini - Cellular)
                          };

                          struct utsname systemInfo;
                          uname(&systemInfo);
                          NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                          deviceName = [deviceNamesByCode objectForKey:code];

                          if (!deviceName) {
                          // Not found in database. At least guess main device type from string contents:

                          if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                          deviceName = @"iPod Touch";
                          } else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                          deviceName = @"iPad";
                          } else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                          deviceName = @"iPhone";
                          } else {
                          deviceName = @"Simulator";
                          }
                          }

                          return deviceName;
                          }


                          ```






                          share|improve this answer

















                          • 1




                            We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                            – Nicolas Miari
                            Sep 10 '15 at 5:34






                          • 1




                            Perhaps even a cocoapod
                            – Adam W. Dennis
                            Jun 1 '16 at 19:24










                          • github.com/sebyddd/SDVersion
                            – Iulian Onofrei
                            Sep 30 at 10:49















                          up vote
                          12
                          down vote













                          I've optimized NicolasMiari's implementation, and added Simulator, here:



                          + (NSString*)deviceName {

                          static NSDictionary* deviceNamesByCode = nil;
                          static NSString* deviceName = nil;

                          if (deviceName) {
                          return deviceName;
                          }

                          deviceNamesByCode = @{
                          @"i386" :@"Simulator",
                          @"iPod1,1" :@"iPod Touch", // (Original)
                          @"iPod2,1" :@"iPod Touch", // (Second Generation)
                          @"iPod3,1" :@"iPod Touch", // (Third Generation)
                          @"iPod4,1" :@"iPod Touch", // (Fourth Generation)
                          @"iPhone1,1" :@"iPhone", // (Original)
                          @"iPhone1,2" :@"iPhone", // (3G)
                          @"iPhone2,1" :@"iPhone", // (3GS)
                          @"iPad1,1" :@"iPad", // (Original)
                          @"iPad2,1" :@"iPad 2", //
                          @"iPad3,1" :@"iPad", // (3rd Generation)
                          @"iPhone3,1" :@"iPhone 4", //
                          @"iPhone4,1" :@"iPhone 4S", //
                          @"iPhone5,1" :@"iPhone 5", // (model A1428, AT&T/Canada)
                          @"iPhone5,2" :@"iPhone 5", // (model A1429, everything else)
                          @"iPad3,4" :@"iPad", // (4th Generation)
                          @"iPad2,5" :@"iPad Mini", // (Original)
                          @"iPhone5,3" :@"iPhone 5c", // (model A1456, A1532 | GSM)
                          @"iPhone5,4" :@"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                          @"iPhone6,1" :@"iPhone 5s", // (model A1433, A1533 | GSM)
                          @"iPhone6,2" :@"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                          @"iPad4,1" :@"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                          @"iPad4,2" :@"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                          @"iPad4,4" :@"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                          @"iPad4,5" :@"iPad Mini" // (2nd Generation iPad Mini - Cellular)
                          };

                          struct utsname systemInfo;
                          uname(&systemInfo);
                          NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                          deviceName = [deviceNamesByCode objectForKey:code];

                          if (!deviceName) {
                          // Not found in database. At least guess main device type from string contents:

                          if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                          deviceName = @"iPod Touch";
                          } else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                          deviceName = @"iPad";
                          } else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                          deviceName = @"iPhone";
                          } else {
                          deviceName = @"Simulator";
                          }
                          }

                          return deviceName;
                          }


                          ```






                          share|improve this answer

















                          • 1




                            We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                            – Nicolas Miari
                            Sep 10 '15 at 5:34






                          • 1




                            Perhaps even a cocoapod
                            – Adam W. Dennis
                            Jun 1 '16 at 19:24










                          • github.com/sebyddd/SDVersion
                            – Iulian Onofrei
                            Sep 30 at 10:49













                          up vote
                          12
                          down vote










                          up vote
                          12
                          down vote









                          I've optimized NicolasMiari's implementation, and added Simulator, here:



                          + (NSString*)deviceName {

                          static NSDictionary* deviceNamesByCode = nil;
                          static NSString* deviceName = nil;

                          if (deviceName) {
                          return deviceName;
                          }

                          deviceNamesByCode = @{
                          @"i386" :@"Simulator",
                          @"iPod1,1" :@"iPod Touch", // (Original)
                          @"iPod2,1" :@"iPod Touch", // (Second Generation)
                          @"iPod3,1" :@"iPod Touch", // (Third Generation)
                          @"iPod4,1" :@"iPod Touch", // (Fourth Generation)
                          @"iPhone1,1" :@"iPhone", // (Original)
                          @"iPhone1,2" :@"iPhone", // (3G)
                          @"iPhone2,1" :@"iPhone", // (3GS)
                          @"iPad1,1" :@"iPad", // (Original)
                          @"iPad2,1" :@"iPad 2", //
                          @"iPad3,1" :@"iPad", // (3rd Generation)
                          @"iPhone3,1" :@"iPhone 4", //
                          @"iPhone4,1" :@"iPhone 4S", //
                          @"iPhone5,1" :@"iPhone 5", // (model A1428, AT&T/Canada)
                          @"iPhone5,2" :@"iPhone 5", // (model A1429, everything else)
                          @"iPad3,4" :@"iPad", // (4th Generation)
                          @"iPad2,5" :@"iPad Mini", // (Original)
                          @"iPhone5,3" :@"iPhone 5c", // (model A1456, A1532 | GSM)
                          @"iPhone5,4" :@"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                          @"iPhone6,1" :@"iPhone 5s", // (model A1433, A1533 | GSM)
                          @"iPhone6,2" :@"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                          @"iPad4,1" :@"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                          @"iPad4,2" :@"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                          @"iPad4,4" :@"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                          @"iPad4,5" :@"iPad Mini" // (2nd Generation iPad Mini - Cellular)
                          };

                          struct utsname systemInfo;
                          uname(&systemInfo);
                          NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                          deviceName = [deviceNamesByCode objectForKey:code];

                          if (!deviceName) {
                          // Not found in database. At least guess main device type from string contents:

                          if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                          deviceName = @"iPod Touch";
                          } else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                          deviceName = @"iPad";
                          } else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                          deviceName = @"iPhone";
                          } else {
                          deviceName = @"Simulator";
                          }
                          }

                          return deviceName;
                          }


                          ```






                          share|improve this answer












                          I've optimized NicolasMiari's implementation, and added Simulator, here:



                          + (NSString*)deviceName {

                          static NSDictionary* deviceNamesByCode = nil;
                          static NSString* deviceName = nil;

                          if (deviceName) {
                          return deviceName;
                          }

                          deviceNamesByCode = @{
                          @"i386" :@"Simulator",
                          @"iPod1,1" :@"iPod Touch", // (Original)
                          @"iPod2,1" :@"iPod Touch", // (Second Generation)
                          @"iPod3,1" :@"iPod Touch", // (Third Generation)
                          @"iPod4,1" :@"iPod Touch", // (Fourth Generation)
                          @"iPhone1,1" :@"iPhone", // (Original)
                          @"iPhone1,2" :@"iPhone", // (3G)
                          @"iPhone2,1" :@"iPhone", // (3GS)
                          @"iPad1,1" :@"iPad", // (Original)
                          @"iPad2,1" :@"iPad 2", //
                          @"iPad3,1" :@"iPad", // (3rd Generation)
                          @"iPhone3,1" :@"iPhone 4", //
                          @"iPhone4,1" :@"iPhone 4S", //
                          @"iPhone5,1" :@"iPhone 5", // (model A1428, AT&T/Canada)
                          @"iPhone5,2" :@"iPhone 5", // (model A1429, everything else)
                          @"iPad3,4" :@"iPad", // (4th Generation)
                          @"iPad2,5" :@"iPad Mini", // (Original)
                          @"iPhone5,3" :@"iPhone 5c", // (model A1456, A1532 | GSM)
                          @"iPhone5,4" :@"iPhone 5c", // (model A1507, A1516, A1526 (China), A1529 | Global)
                          @"iPhone6,1" :@"iPhone 5s", // (model A1433, A1533 | GSM)
                          @"iPhone6,2" :@"iPhone 5s", // (model A1457, A1518, A1528 (China), A1530 | Global)
                          @"iPad4,1" :@"iPad Air", // 5th Generation iPad (iPad Air) - Wifi
                          @"iPad4,2" :@"iPad Air", // 5th Generation iPad (iPad Air) - Cellular
                          @"iPad4,4" :@"iPad Mini", // (2nd Generation iPad Mini - Wifi)
                          @"iPad4,5" :@"iPad Mini" // (2nd Generation iPad Mini - Cellular)
                          };

                          struct utsname systemInfo;
                          uname(&systemInfo);
                          NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                          deviceName = [deviceNamesByCode objectForKey:code];

                          if (!deviceName) {
                          // Not found in database. At least guess main device type from string contents:

                          if ([code rangeOfString:@"iPod"].location != NSNotFound) {
                          deviceName = @"iPod Touch";
                          } else if([code rangeOfString:@"iPad"].location != NSNotFound) {
                          deviceName = @"iPad";
                          } else if([code rangeOfString:@"iPhone"].location != NSNotFound){
                          deviceName = @"iPhone";
                          } else {
                          deviceName = @"Simulator";
                          }
                          }

                          return deviceName;
                          }


                          ```







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Jun 24 '14 at 14:35









                          Adam W. Dennis

                          27036




                          27036








                          • 1




                            We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                            – Nicolas Miari
                            Sep 10 '15 at 5:34






                          • 1




                            Perhaps even a cocoapod
                            – Adam W. Dennis
                            Jun 1 '16 at 19:24










                          • github.com/sebyddd/SDVersion
                            – Iulian Onofrei
                            Sep 30 at 10:49














                          • 1




                            We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                            – Nicolas Miari
                            Sep 10 '15 at 5:34






                          • 1




                            Perhaps even a cocoapod
                            – Adam W. Dennis
                            Jun 1 '16 at 19:24










                          • github.com/sebyddd/SDVersion
                            – Iulian Onofrei
                            Sep 30 at 10:49








                          1




                          1




                          We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                          – Nicolas Miari
                          Sep 10 '15 at 5:34




                          We need to turn this into a GitHub repo, and update it everytime new iPhones/iPads/etc. get added to the line up!
                          – Nicolas Miari
                          Sep 10 '15 at 5:34




                          1




                          1




                          Perhaps even a cocoapod
                          – Adam W. Dennis
                          Jun 1 '16 at 19:24




                          Perhaps even a cocoapod
                          – Adam W. Dennis
                          Jun 1 '16 at 19:24












                          github.com/sebyddd/SDVersion
                          – Iulian Onofrei
                          Sep 30 at 10:49




                          github.com/sebyddd/SDVersion
                          – Iulian Onofrei
                          Sep 30 at 10:49










                          up vote
                          12
                          down vote













                          Below is the code for that (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;
                          }





                          share|improve this answer

























                            up vote
                            12
                            down vote













                            Below is the code for that (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;
                            }





                            share|improve this answer























                              up vote
                              12
                              down vote










                              up vote
                              12
                              down vote









                              Below is the code for that (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;
                              }





                              share|improve this answer












                              Below is the code for that (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;
                              }






                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered Apr 13 '15 at 6:33









                              Inder Kumar Rathore

                              31.5k1498151




                              31.5k1498151






















                                  up vote
                                  10
                                  down vote













                                  A category for going getting away from the NSString description



                                  In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.



                                  For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.



                                  Updating is a matter of adding the device to the enum and the lookup table.



                                  UIDevice+NTNUExtensions.h



                                  typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
                                  DeviceAppleUnknown,
                                  DeviceAppleSimulator,
                                  DeviceAppleiPhone,
                                  DeviceAppleiPhone3G,
                                  DeviceAppleiPhone3GS,
                                  DeviceAppleiPhone4,
                                  DeviceAppleiPhone4S,
                                  DeviceAppleiPhone5,
                                  DeviceAppleiPhone5C,
                                  DeviceAppleiPhone5S,
                                  DeviceAppleiPhone6,
                                  DeviceAppleiPhone6_Plus,
                                  DeviceAppleiPhone6S,
                                  DeviceAppleiPhone6S_Plus,
                                  DeviceAppleiPhoneSE,
                                  DeviceAppleiPhone7,
                                  DeviceAppleiPhone7_Plus,
                                  DeviceAppleiPodTouch,
                                  DeviceAppleiPodTouch2G,
                                  DeviceAppleiPodTouch3G,
                                  DeviceAppleiPodTouch4G,
                                  DeviceAppleiPad,
                                  DeviceAppleiPad2,
                                  DeviceAppleiPad3G,
                                  DeviceAppleiPad4G,
                                  DeviceAppleiPad5G_Air,
                                  DeviceAppleiPadMini,
                                  DeviceAppleiPadMini2G,
                                  DeviceAppleiPadPro12,
                                  DeviceAppleiPadPro9
                                  };



                                  @interface UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription;
                                  - (NTNUDeviceType)ntnu_deviceType;

                                  @end


                                  UIDevice+NTNUExtensions.m



                                  #import <sys/utsname.h>
                                  #import "UIDevice+NTNUExtensions.h"

                                  @implementation UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription
                                  {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);

                                  return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                  }

                                  - (NTNUDeviceType)ntnu_deviceType
                                  {
                                  NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
                                  return [deviceType unsignedIntegerValue];
                                  }

                                  - (NSDictionary *)ntnu_deviceTypeLookupTable
                                  {
                                  return @{
                                  @"i386": @(DeviceAppleSimulator),
                                  @"x86_64": @(DeviceAppleSimulator),
                                  @"iPod1,1": @(DeviceAppleiPodTouch),
                                  @"iPod2,1": @(DeviceAppleiPodTouch2G),
                                  @"iPod3,1": @(DeviceAppleiPodTouch3G),
                                  @"iPod4,1": @(DeviceAppleiPodTouch4G),
                                  @"iPhone1,1": @(DeviceAppleiPhone),
                                  @"iPhone1,2": @(DeviceAppleiPhone3G),
                                  @"iPhone2,1": @(DeviceAppleiPhone3GS),
                                  @"iPhone3,1": @(DeviceAppleiPhone4),
                                  @"iPhone3,3": @(DeviceAppleiPhone4),
                                  @"iPhone4,1": @(DeviceAppleiPhone4S),
                                  @"iPhone5,1": @(DeviceAppleiPhone5),
                                  @"iPhone5,2": @(DeviceAppleiPhone5),
                                  @"iPhone5,3": @(DeviceAppleiPhone5C),
                                  @"iPhone5,4": @(DeviceAppleiPhone5C),
                                  @"iPhone6,1": @(DeviceAppleiPhone5S),
                                  @"iPhone6,2": @(DeviceAppleiPhone5S),
                                  @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
                                  @"iPhone7,2": @(DeviceAppleiPhone6),
                                  @"iPhone8,1" :@(DeviceAppleiPhone6S),
                                  @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
                                  @"iPhone8,4" :@(DeviceAppleiPhoneSE),
                                  @"iPhone9,1" :@(DeviceAppleiPhone7),
                                  @"iPhone9,3" :@(DeviceAppleiPhone7),
                                  @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
                                  @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
                                  @"iPad1,1": @(DeviceAppleiPad),
                                  @"iPad2,1": @(DeviceAppleiPad2),
                                  @"iPad3,1": @(DeviceAppleiPad3G),
                                  @"iPad3,4": @(DeviceAppleiPad4G),
                                  @"iPad2,5": @(DeviceAppleiPadMini),
                                  @"iPad4,1": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,2": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,4": @(DeviceAppleiPadMini2G),
                                  @"iPad4,5": @(DeviceAppleiPadMini2G),
                                  @"iPad4,7":@(DeviceAppleiPadMini),
                                  @"iPad6,7":@(DeviceAppleiPadPro12),
                                  @"iPad6,8":@(DeviceAppleiPadPro12),
                                  @"iPad6,3":@(DeviceAppleiPadPro9),
                                  @"iPad6,4":@(DeviceAppleiPadPro9)
                                  };
                                  }

                                  @end





                                  share|improve this answer























                                  • This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                    – Mischinab
                                    Jun 13 '16 at 13:58















                                  up vote
                                  10
                                  down vote













                                  A category for going getting away from the NSString description



                                  In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.



                                  For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.



                                  Updating is a matter of adding the device to the enum and the lookup table.



                                  UIDevice+NTNUExtensions.h



                                  typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
                                  DeviceAppleUnknown,
                                  DeviceAppleSimulator,
                                  DeviceAppleiPhone,
                                  DeviceAppleiPhone3G,
                                  DeviceAppleiPhone3GS,
                                  DeviceAppleiPhone4,
                                  DeviceAppleiPhone4S,
                                  DeviceAppleiPhone5,
                                  DeviceAppleiPhone5C,
                                  DeviceAppleiPhone5S,
                                  DeviceAppleiPhone6,
                                  DeviceAppleiPhone6_Plus,
                                  DeviceAppleiPhone6S,
                                  DeviceAppleiPhone6S_Plus,
                                  DeviceAppleiPhoneSE,
                                  DeviceAppleiPhone7,
                                  DeviceAppleiPhone7_Plus,
                                  DeviceAppleiPodTouch,
                                  DeviceAppleiPodTouch2G,
                                  DeviceAppleiPodTouch3G,
                                  DeviceAppleiPodTouch4G,
                                  DeviceAppleiPad,
                                  DeviceAppleiPad2,
                                  DeviceAppleiPad3G,
                                  DeviceAppleiPad4G,
                                  DeviceAppleiPad5G_Air,
                                  DeviceAppleiPadMini,
                                  DeviceAppleiPadMini2G,
                                  DeviceAppleiPadPro12,
                                  DeviceAppleiPadPro9
                                  };



                                  @interface UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription;
                                  - (NTNUDeviceType)ntnu_deviceType;

                                  @end


                                  UIDevice+NTNUExtensions.m



                                  #import <sys/utsname.h>
                                  #import "UIDevice+NTNUExtensions.h"

                                  @implementation UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription
                                  {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);

                                  return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                  }

                                  - (NTNUDeviceType)ntnu_deviceType
                                  {
                                  NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
                                  return [deviceType unsignedIntegerValue];
                                  }

                                  - (NSDictionary *)ntnu_deviceTypeLookupTable
                                  {
                                  return @{
                                  @"i386": @(DeviceAppleSimulator),
                                  @"x86_64": @(DeviceAppleSimulator),
                                  @"iPod1,1": @(DeviceAppleiPodTouch),
                                  @"iPod2,1": @(DeviceAppleiPodTouch2G),
                                  @"iPod3,1": @(DeviceAppleiPodTouch3G),
                                  @"iPod4,1": @(DeviceAppleiPodTouch4G),
                                  @"iPhone1,1": @(DeviceAppleiPhone),
                                  @"iPhone1,2": @(DeviceAppleiPhone3G),
                                  @"iPhone2,1": @(DeviceAppleiPhone3GS),
                                  @"iPhone3,1": @(DeviceAppleiPhone4),
                                  @"iPhone3,3": @(DeviceAppleiPhone4),
                                  @"iPhone4,1": @(DeviceAppleiPhone4S),
                                  @"iPhone5,1": @(DeviceAppleiPhone5),
                                  @"iPhone5,2": @(DeviceAppleiPhone5),
                                  @"iPhone5,3": @(DeviceAppleiPhone5C),
                                  @"iPhone5,4": @(DeviceAppleiPhone5C),
                                  @"iPhone6,1": @(DeviceAppleiPhone5S),
                                  @"iPhone6,2": @(DeviceAppleiPhone5S),
                                  @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
                                  @"iPhone7,2": @(DeviceAppleiPhone6),
                                  @"iPhone8,1" :@(DeviceAppleiPhone6S),
                                  @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
                                  @"iPhone8,4" :@(DeviceAppleiPhoneSE),
                                  @"iPhone9,1" :@(DeviceAppleiPhone7),
                                  @"iPhone9,3" :@(DeviceAppleiPhone7),
                                  @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
                                  @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
                                  @"iPad1,1": @(DeviceAppleiPad),
                                  @"iPad2,1": @(DeviceAppleiPad2),
                                  @"iPad3,1": @(DeviceAppleiPad3G),
                                  @"iPad3,4": @(DeviceAppleiPad4G),
                                  @"iPad2,5": @(DeviceAppleiPadMini),
                                  @"iPad4,1": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,2": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,4": @(DeviceAppleiPadMini2G),
                                  @"iPad4,5": @(DeviceAppleiPadMini2G),
                                  @"iPad4,7":@(DeviceAppleiPadMini),
                                  @"iPad6,7":@(DeviceAppleiPadPro12),
                                  @"iPad6,8":@(DeviceAppleiPadPro12),
                                  @"iPad6,3":@(DeviceAppleiPadPro9),
                                  @"iPad6,4":@(DeviceAppleiPadPro9)
                                  };
                                  }

                                  @end





                                  share|improve this answer























                                  • This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                    – Mischinab
                                    Jun 13 '16 at 13:58













                                  up vote
                                  10
                                  down vote










                                  up vote
                                  10
                                  down vote









                                  A category for going getting away from the NSString description



                                  In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.



                                  For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.



                                  Updating is a matter of adding the device to the enum and the lookup table.



                                  UIDevice+NTNUExtensions.h



                                  typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
                                  DeviceAppleUnknown,
                                  DeviceAppleSimulator,
                                  DeviceAppleiPhone,
                                  DeviceAppleiPhone3G,
                                  DeviceAppleiPhone3GS,
                                  DeviceAppleiPhone4,
                                  DeviceAppleiPhone4S,
                                  DeviceAppleiPhone5,
                                  DeviceAppleiPhone5C,
                                  DeviceAppleiPhone5S,
                                  DeviceAppleiPhone6,
                                  DeviceAppleiPhone6_Plus,
                                  DeviceAppleiPhone6S,
                                  DeviceAppleiPhone6S_Plus,
                                  DeviceAppleiPhoneSE,
                                  DeviceAppleiPhone7,
                                  DeviceAppleiPhone7_Plus,
                                  DeviceAppleiPodTouch,
                                  DeviceAppleiPodTouch2G,
                                  DeviceAppleiPodTouch3G,
                                  DeviceAppleiPodTouch4G,
                                  DeviceAppleiPad,
                                  DeviceAppleiPad2,
                                  DeviceAppleiPad3G,
                                  DeviceAppleiPad4G,
                                  DeviceAppleiPad5G_Air,
                                  DeviceAppleiPadMini,
                                  DeviceAppleiPadMini2G,
                                  DeviceAppleiPadPro12,
                                  DeviceAppleiPadPro9
                                  };



                                  @interface UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription;
                                  - (NTNUDeviceType)ntnu_deviceType;

                                  @end


                                  UIDevice+NTNUExtensions.m



                                  #import <sys/utsname.h>
                                  #import "UIDevice+NTNUExtensions.h"

                                  @implementation UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription
                                  {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);

                                  return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                  }

                                  - (NTNUDeviceType)ntnu_deviceType
                                  {
                                  NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
                                  return [deviceType unsignedIntegerValue];
                                  }

                                  - (NSDictionary *)ntnu_deviceTypeLookupTable
                                  {
                                  return @{
                                  @"i386": @(DeviceAppleSimulator),
                                  @"x86_64": @(DeviceAppleSimulator),
                                  @"iPod1,1": @(DeviceAppleiPodTouch),
                                  @"iPod2,1": @(DeviceAppleiPodTouch2G),
                                  @"iPod3,1": @(DeviceAppleiPodTouch3G),
                                  @"iPod4,1": @(DeviceAppleiPodTouch4G),
                                  @"iPhone1,1": @(DeviceAppleiPhone),
                                  @"iPhone1,2": @(DeviceAppleiPhone3G),
                                  @"iPhone2,1": @(DeviceAppleiPhone3GS),
                                  @"iPhone3,1": @(DeviceAppleiPhone4),
                                  @"iPhone3,3": @(DeviceAppleiPhone4),
                                  @"iPhone4,1": @(DeviceAppleiPhone4S),
                                  @"iPhone5,1": @(DeviceAppleiPhone5),
                                  @"iPhone5,2": @(DeviceAppleiPhone5),
                                  @"iPhone5,3": @(DeviceAppleiPhone5C),
                                  @"iPhone5,4": @(DeviceAppleiPhone5C),
                                  @"iPhone6,1": @(DeviceAppleiPhone5S),
                                  @"iPhone6,2": @(DeviceAppleiPhone5S),
                                  @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
                                  @"iPhone7,2": @(DeviceAppleiPhone6),
                                  @"iPhone8,1" :@(DeviceAppleiPhone6S),
                                  @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
                                  @"iPhone8,4" :@(DeviceAppleiPhoneSE),
                                  @"iPhone9,1" :@(DeviceAppleiPhone7),
                                  @"iPhone9,3" :@(DeviceAppleiPhone7),
                                  @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
                                  @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
                                  @"iPad1,1": @(DeviceAppleiPad),
                                  @"iPad2,1": @(DeviceAppleiPad2),
                                  @"iPad3,1": @(DeviceAppleiPad3G),
                                  @"iPad3,4": @(DeviceAppleiPad4G),
                                  @"iPad2,5": @(DeviceAppleiPadMini),
                                  @"iPad4,1": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,2": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,4": @(DeviceAppleiPadMini2G),
                                  @"iPad4,5": @(DeviceAppleiPadMini2G),
                                  @"iPad4,7":@(DeviceAppleiPadMini),
                                  @"iPad6,7":@(DeviceAppleiPadPro12),
                                  @"iPad6,8":@(DeviceAppleiPadPro12),
                                  @"iPad6,3":@(DeviceAppleiPadPro9),
                                  @"iPad6,4":@(DeviceAppleiPadPro9)
                                  };
                                  }

                                  @end





                                  share|improve this answer














                                  A category for going getting away from the NSString description



                                  In general, it is desirable to avoid arbitrary string comparisons throughout your code. It is better to update the strings in one place and hide the magic string from your app. I provide a category on UIDevice for that purpose.



                                  For my specific needs I need to know which device I am using without the need to know specifics about networking capability that can be easily retrieved in other ways. So you will find a coarser grained enum than the ever growing list of devices.



                                  Updating is a matter of adding the device to the enum and the lookup table.



                                  UIDevice+NTNUExtensions.h



                                  typedef NS_ENUM(NSUInteger, NTNUDeviceType) {
                                  DeviceAppleUnknown,
                                  DeviceAppleSimulator,
                                  DeviceAppleiPhone,
                                  DeviceAppleiPhone3G,
                                  DeviceAppleiPhone3GS,
                                  DeviceAppleiPhone4,
                                  DeviceAppleiPhone4S,
                                  DeviceAppleiPhone5,
                                  DeviceAppleiPhone5C,
                                  DeviceAppleiPhone5S,
                                  DeviceAppleiPhone6,
                                  DeviceAppleiPhone6_Plus,
                                  DeviceAppleiPhone6S,
                                  DeviceAppleiPhone6S_Plus,
                                  DeviceAppleiPhoneSE,
                                  DeviceAppleiPhone7,
                                  DeviceAppleiPhone7_Plus,
                                  DeviceAppleiPodTouch,
                                  DeviceAppleiPodTouch2G,
                                  DeviceAppleiPodTouch3G,
                                  DeviceAppleiPodTouch4G,
                                  DeviceAppleiPad,
                                  DeviceAppleiPad2,
                                  DeviceAppleiPad3G,
                                  DeviceAppleiPad4G,
                                  DeviceAppleiPad5G_Air,
                                  DeviceAppleiPadMini,
                                  DeviceAppleiPadMini2G,
                                  DeviceAppleiPadPro12,
                                  DeviceAppleiPadPro9
                                  };



                                  @interface UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription;
                                  - (NTNUDeviceType)ntnu_deviceType;

                                  @end


                                  UIDevice+NTNUExtensions.m



                                  #import <sys/utsname.h>
                                  #import "UIDevice+NTNUExtensions.h"

                                  @implementation UIDevice (NTNUExtensions)

                                  - (NSString *)ntnu_deviceDescription
                                  {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);

                                  return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                  }

                                  - (NTNUDeviceType)ntnu_deviceType
                                  {
                                  NSNumber *deviceType = [[self ntnu_deviceTypeLookupTable] objectForKey:[self ntnu_deviceDescription]];
                                  return [deviceType unsignedIntegerValue];
                                  }

                                  - (NSDictionary *)ntnu_deviceTypeLookupTable
                                  {
                                  return @{
                                  @"i386": @(DeviceAppleSimulator),
                                  @"x86_64": @(DeviceAppleSimulator),
                                  @"iPod1,1": @(DeviceAppleiPodTouch),
                                  @"iPod2,1": @(DeviceAppleiPodTouch2G),
                                  @"iPod3,1": @(DeviceAppleiPodTouch3G),
                                  @"iPod4,1": @(DeviceAppleiPodTouch4G),
                                  @"iPhone1,1": @(DeviceAppleiPhone),
                                  @"iPhone1,2": @(DeviceAppleiPhone3G),
                                  @"iPhone2,1": @(DeviceAppleiPhone3GS),
                                  @"iPhone3,1": @(DeviceAppleiPhone4),
                                  @"iPhone3,3": @(DeviceAppleiPhone4),
                                  @"iPhone4,1": @(DeviceAppleiPhone4S),
                                  @"iPhone5,1": @(DeviceAppleiPhone5),
                                  @"iPhone5,2": @(DeviceAppleiPhone5),
                                  @"iPhone5,3": @(DeviceAppleiPhone5C),
                                  @"iPhone5,4": @(DeviceAppleiPhone5C),
                                  @"iPhone6,1": @(DeviceAppleiPhone5S),
                                  @"iPhone6,2": @(DeviceAppleiPhone5S),
                                  @"iPhone7,1": @(DeviceAppleiPhone6_Plus),
                                  @"iPhone7,2": @(DeviceAppleiPhone6),
                                  @"iPhone8,1" :@(DeviceAppleiPhone6S),
                                  @"iPhone8,2" :@(DeviceAppleiPhone6S_Plus),
                                  @"iPhone8,4" :@(DeviceAppleiPhoneSE),
                                  @"iPhone9,1" :@(DeviceAppleiPhone7),
                                  @"iPhone9,3" :@(DeviceAppleiPhone7),
                                  @"iPhone9,2" :@(DeviceAppleiPhone7_Plus),
                                  @"iPhone9,4" :@(DeviceAppleiPhone7_Plus),
                                  @"iPad1,1": @(DeviceAppleiPad),
                                  @"iPad2,1": @(DeviceAppleiPad2),
                                  @"iPad3,1": @(DeviceAppleiPad3G),
                                  @"iPad3,4": @(DeviceAppleiPad4G),
                                  @"iPad2,5": @(DeviceAppleiPadMini),
                                  @"iPad4,1": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,2": @(DeviceAppleiPad5G_Air),
                                  @"iPad4,4": @(DeviceAppleiPadMini2G),
                                  @"iPad4,5": @(DeviceAppleiPadMini2G),
                                  @"iPad4,7":@(DeviceAppleiPadMini),
                                  @"iPad6,7":@(DeviceAppleiPadPro12),
                                  @"iPad6,8":@(DeviceAppleiPadPro12),
                                  @"iPad6,3":@(DeviceAppleiPadPro9),
                                  @"iPad6,4":@(DeviceAppleiPadPro9)
                                  };
                                  }

                                  @end






                                  share|improve this answer














                                  share|improve this answer



                                  share|improve this answer








                                  edited Dec 15 '16 at 14:36









                                  Alexander Telegin

                                  1631215




                                  1631215










                                  answered Feb 1 '15 at 10:56









                                  Cameron Lowell Palmer

                                  14.3k37696




                                  14.3k37696












                                  • This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                    – Mischinab
                                    Jun 13 '16 at 13:58


















                                  • This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                    – Mischinab
                                    Jun 13 '16 at 13:58
















                                  This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                  – Mischinab
                                  Jun 13 '16 at 13:58




                                  This a nice solution. A useful extension of this is to sort the enum based on the device’s processor which let’s you use a simple < or > comparison to determine if a device is less or more powerful than your target. For example, if you want to limit background animations on devices coming before the iPhone 4S.
                                  – Mischinab
                                  Jun 13 '16 at 13:58










                                  up vote
                                  9
                                  down vote













                                  Device name and Machine Names, based on iOS Real Device Hardware



                                  My solution to this issue is basically looks related to @NicolasMiari answer within this thread. Separate utility class has a predefined set of Device and Machine names and then depending on the real machine name, retrieve the Device Name.



                                  Note: This answer and it's linked GitHub project has been updated to identify current latest iPhones (iPhone 8, 8+, X) as of October 2017. And this works on iOS11 too. Please visit the GitHub repo and see, and give me feedback if something is wrong.



                                  /*
                                  * Retrieves back the device name or if not the machine name.
                                  */
                                  + (NSString*)deviceModelName {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);
                                  NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                                  //MARK: More official list is at
                                  //http://theiphonewiki.com/wiki/Models
                                  //MARK: You may just return machineName. Following is for convenience

                                  NSDictionary *commonNamesDictionary =
                                  @{
                                  @"i386": @"i386 Simulator",
                                  @"x86_64": @"x86_64 Simulator",

                                  @"iPhone1,1": @"iPhone",
                                  @"iPhone1,2": @"iPhone 3G",
                                  @"iPhone2,1": @"iPhone 3GS",
                                  @"iPhone3,1": @"iPhone 4",
                                  @"iPhone3,2": @"iPhone 4(Rev A)",
                                  @"iPhone3,3": @"iPhone 4(CDMA)",
                                  @"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,1": @"iPhone 6+(GSM+CDMA)",
                                  @"iPhone7,2": @"iPhone 6(GSM+CDMA)",

                                  @"iPhone8,1": @"iPhone 6S(GSM+CDMA)",
                                  @"iPhone8,2": @"iPhone 6S+(GSM+CDMA)",
                                  @"iPhone8,4": @"iPhone SE(GSM+CDMA)",
                                  @"iPhone9,1": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,2": @"iPhone 7+(GSM+CDMA)",
                                  @"iPhone9,3": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,4": @"iPhone 7+(GSM+CDMA)",

                                  @"iPad1,1": @"iPad",
                                  @"iPad2,1": @"iPad 2(WiFi)",
                                  @"iPad2,2": @"iPad 2(GSM)",
                                  @"iPad2,3": @"iPad 2(CDMA)",
                                  @"iPad2,4": @"iPad 2(WiFi Rev A)",
                                  @"iPad2,5": @"iPad Mini 1G (WiFi)",
                                  @"iPad2,6": @"iPad Mini 1G (GSM)",
                                  @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)",
                                  @"iPad3,1": @"iPad 3(WiFi)",
                                  @"iPad3,2": @"iPad 3(GSM+CDMA)",
                                  @"iPad3,3": @"iPad 3(GSM)",
                                  @"iPad3,4": @"iPad 4(WiFi)",
                                  @"iPad3,5": @"iPad 4(GSM)",
                                  @"iPad3,6": @"iPad 4(GSM+CDMA)",

                                  @"iPad4,1": @"iPad Air(WiFi)",
                                  @"iPad4,2": @"iPad Air(GSM)",
                                  @"iPad4,3": @"iPad Air(GSM+CDMA)",

                                  @"iPad5,3": @"iPad Air 2 (WiFi)",
                                  @"iPad5,4": @"iPad Air 2 (GSM+CDMA)",

                                  @"iPad4,4": @"iPad Mini 2G (WiFi)",
                                  @"iPad4,5": @"iPad Mini 2G (GSM)",
                                  @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)",

                                  @"iPad4,7": @"iPad Mini 3G (WiFi)",
                                  @"iPad4,8": @"iPad Mini 3G (GSM)",
                                  @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)",

                                  @"iPod1,1": @"iPod 1st Gen",
                                  @"iPod2,1": @"iPod 2nd Gen",
                                  @"iPod3,1": @"iPod 3rd Gen",
                                  @"iPod4,1": @"iPod 4th Gen",
                                  @"iPod5,1": @"iPod 5th Gen",
                                  @"iPod7,1": @"iPod 6th Gen",
                                  };

                                  NSString *deviceName = commonNamesDictionary[machineName];

                                  if (deviceName == nil) {
                                  deviceName = machineName;
                                  }

                                  return deviceName;
                                  }


                                  I have added this implementation and few other convenient utility methods in a class and put it out there in this GitHub Repository. And also you can find the up to date device information list within this Wiki page.



                                  Please visit it and get use of it.



                                  Update:



                                  You may requires to import sys framework,



                                  #import <sys/utsname.h>





                                  share|improve this answer



















                                  • 1




                                    Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                    – Hemang
                                    Dec 22 '16 at 7:20















                                  up vote
                                  9
                                  down vote













                                  Device name and Machine Names, based on iOS Real Device Hardware



                                  My solution to this issue is basically looks related to @NicolasMiari answer within this thread. Separate utility class has a predefined set of Device and Machine names and then depending on the real machine name, retrieve the Device Name.



                                  Note: This answer and it's linked GitHub project has been updated to identify current latest iPhones (iPhone 8, 8+, X) as of October 2017. And this works on iOS11 too. Please visit the GitHub repo and see, and give me feedback if something is wrong.



                                  /*
                                  * Retrieves back the device name or if not the machine name.
                                  */
                                  + (NSString*)deviceModelName {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);
                                  NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                                  //MARK: More official list is at
                                  //http://theiphonewiki.com/wiki/Models
                                  //MARK: You may just return machineName. Following is for convenience

                                  NSDictionary *commonNamesDictionary =
                                  @{
                                  @"i386": @"i386 Simulator",
                                  @"x86_64": @"x86_64 Simulator",

                                  @"iPhone1,1": @"iPhone",
                                  @"iPhone1,2": @"iPhone 3G",
                                  @"iPhone2,1": @"iPhone 3GS",
                                  @"iPhone3,1": @"iPhone 4",
                                  @"iPhone3,2": @"iPhone 4(Rev A)",
                                  @"iPhone3,3": @"iPhone 4(CDMA)",
                                  @"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,1": @"iPhone 6+(GSM+CDMA)",
                                  @"iPhone7,2": @"iPhone 6(GSM+CDMA)",

                                  @"iPhone8,1": @"iPhone 6S(GSM+CDMA)",
                                  @"iPhone8,2": @"iPhone 6S+(GSM+CDMA)",
                                  @"iPhone8,4": @"iPhone SE(GSM+CDMA)",
                                  @"iPhone9,1": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,2": @"iPhone 7+(GSM+CDMA)",
                                  @"iPhone9,3": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,4": @"iPhone 7+(GSM+CDMA)",

                                  @"iPad1,1": @"iPad",
                                  @"iPad2,1": @"iPad 2(WiFi)",
                                  @"iPad2,2": @"iPad 2(GSM)",
                                  @"iPad2,3": @"iPad 2(CDMA)",
                                  @"iPad2,4": @"iPad 2(WiFi Rev A)",
                                  @"iPad2,5": @"iPad Mini 1G (WiFi)",
                                  @"iPad2,6": @"iPad Mini 1G (GSM)",
                                  @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)",
                                  @"iPad3,1": @"iPad 3(WiFi)",
                                  @"iPad3,2": @"iPad 3(GSM+CDMA)",
                                  @"iPad3,3": @"iPad 3(GSM)",
                                  @"iPad3,4": @"iPad 4(WiFi)",
                                  @"iPad3,5": @"iPad 4(GSM)",
                                  @"iPad3,6": @"iPad 4(GSM+CDMA)",

                                  @"iPad4,1": @"iPad Air(WiFi)",
                                  @"iPad4,2": @"iPad Air(GSM)",
                                  @"iPad4,3": @"iPad Air(GSM+CDMA)",

                                  @"iPad5,3": @"iPad Air 2 (WiFi)",
                                  @"iPad5,4": @"iPad Air 2 (GSM+CDMA)",

                                  @"iPad4,4": @"iPad Mini 2G (WiFi)",
                                  @"iPad4,5": @"iPad Mini 2G (GSM)",
                                  @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)",

                                  @"iPad4,7": @"iPad Mini 3G (WiFi)",
                                  @"iPad4,8": @"iPad Mini 3G (GSM)",
                                  @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)",

                                  @"iPod1,1": @"iPod 1st Gen",
                                  @"iPod2,1": @"iPod 2nd Gen",
                                  @"iPod3,1": @"iPod 3rd Gen",
                                  @"iPod4,1": @"iPod 4th Gen",
                                  @"iPod5,1": @"iPod 5th Gen",
                                  @"iPod7,1": @"iPod 6th Gen",
                                  };

                                  NSString *deviceName = commonNamesDictionary[machineName];

                                  if (deviceName == nil) {
                                  deviceName = machineName;
                                  }

                                  return deviceName;
                                  }


                                  I have added this implementation and few other convenient utility methods in a class and put it out there in this GitHub Repository. And also you can find the up to date device information list within this Wiki page.



                                  Please visit it and get use of it.



                                  Update:



                                  You may requires to import sys framework,



                                  #import <sys/utsname.h>





                                  share|improve this answer



















                                  • 1




                                    Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                    – Hemang
                                    Dec 22 '16 at 7:20













                                  up vote
                                  9
                                  down vote










                                  up vote
                                  9
                                  down vote









                                  Device name and Machine Names, based on iOS Real Device Hardware



                                  My solution to this issue is basically looks related to @NicolasMiari answer within this thread. Separate utility class has a predefined set of Device and Machine names and then depending on the real machine name, retrieve the Device Name.



                                  Note: This answer and it's linked GitHub project has been updated to identify current latest iPhones (iPhone 8, 8+, X) as of October 2017. And this works on iOS11 too. Please visit the GitHub repo and see, and give me feedback if something is wrong.



                                  /*
                                  * Retrieves back the device name or if not the machine name.
                                  */
                                  + (NSString*)deviceModelName {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);
                                  NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                                  //MARK: More official list is at
                                  //http://theiphonewiki.com/wiki/Models
                                  //MARK: You may just return machineName. Following is for convenience

                                  NSDictionary *commonNamesDictionary =
                                  @{
                                  @"i386": @"i386 Simulator",
                                  @"x86_64": @"x86_64 Simulator",

                                  @"iPhone1,1": @"iPhone",
                                  @"iPhone1,2": @"iPhone 3G",
                                  @"iPhone2,1": @"iPhone 3GS",
                                  @"iPhone3,1": @"iPhone 4",
                                  @"iPhone3,2": @"iPhone 4(Rev A)",
                                  @"iPhone3,3": @"iPhone 4(CDMA)",
                                  @"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,1": @"iPhone 6+(GSM+CDMA)",
                                  @"iPhone7,2": @"iPhone 6(GSM+CDMA)",

                                  @"iPhone8,1": @"iPhone 6S(GSM+CDMA)",
                                  @"iPhone8,2": @"iPhone 6S+(GSM+CDMA)",
                                  @"iPhone8,4": @"iPhone SE(GSM+CDMA)",
                                  @"iPhone9,1": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,2": @"iPhone 7+(GSM+CDMA)",
                                  @"iPhone9,3": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,4": @"iPhone 7+(GSM+CDMA)",

                                  @"iPad1,1": @"iPad",
                                  @"iPad2,1": @"iPad 2(WiFi)",
                                  @"iPad2,2": @"iPad 2(GSM)",
                                  @"iPad2,3": @"iPad 2(CDMA)",
                                  @"iPad2,4": @"iPad 2(WiFi Rev A)",
                                  @"iPad2,5": @"iPad Mini 1G (WiFi)",
                                  @"iPad2,6": @"iPad Mini 1G (GSM)",
                                  @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)",
                                  @"iPad3,1": @"iPad 3(WiFi)",
                                  @"iPad3,2": @"iPad 3(GSM+CDMA)",
                                  @"iPad3,3": @"iPad 3(GSM)",
                                  @"iPad3,4": @"iPad 4(WiFi)",
                                  @"iPad3,5": @"iPad 4(GSM)",
                                  @"iPad3,6": @"iPad 4(GSM+CDMA)",

                                  @"iPad4,1": @"iPad Air(WiFi)",
                                  @"iPad4,2": @"iPad Air(GSM)",
                                  @"iPad4,3": @"iPad Air(GSM+CDMA)",

                                  @"iPad5,3": @"iPad Air 2 (WiFi)",
                                  @"iPad5,4": @"iPad Air 2 (GSM+CDMA)",

                                  @"iPad4,4": @"iPad Mini 2G (WiFi)",
                                  @"iPad4,5": @"iPad Mini 2G (GSM)",
                                  @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)",

                                  @"iPad4,7": @"iPad Mini 3G (WiFi)",
                                  @"iPad4,8": @"iPad Mini 3G (GSM)",
                                  @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)",

                                  @"iPod1,1": @"iPod 1st Gen",
                                  @"iPod2,1": @"iPod 2nd Gen",
                                  @"iPod3,1": @"iPod 3rd Gen",
                                  @"iPod4,1": @"iPod 4th Gen",
                                  @"iPod5,1": @"iPod 5th Gen",
                                  @"iPod7,1": @"iPod 6th Gen",
                                  };

                                  NSString *deviceName = commonNamesDictionary[machineName];

                                  if (deviceName == nil) {
                                  deviceName = machineName;
                                  }

                                  return deviceName;
                                  }


                                  I have added this implementation and few other convenient utility methods in a class and put it out there in this GitHub Repository. And also you can find the up to date device information list within this Wiki page.



                                  Please visit it and get use of it.



                                  Update:



                                  You may requires to import sys framework,



                                  #import <sys/utsname.h>





                                  share|improve this answer














                                  Device name and Machine Names, based on iOS Real Device Hardware



                                  My solution to this issue is basically looks related to @NicolasMiari answer within this thread. Separate utility class has a predefined set of Device and Machine names and then depending on the real machine name, retrieve the Device Name.



                                  Note: This answer and it's linked GitHub project has been updated to identify current latest iPhones (iPhone 8, 8+, X) as of October 2017. And this works on iOS11 too. Please visit the GitHub repo and see, and give me feedback if something is wrong.



                                  /*
                                  * Retrieves back the device name or if not the machine name.
                                  */
                                  + (NSString*)deviceModelName {
                                  struct utsname systemInfo;
                                  uname(&systemInfo);
                                  NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

                                  //MARK: More official list is at
                                  //http://theiphonewiki.com/wiki/Models
                                  //MARK: You may just return machineName. Following is for convenience

                                  NSDictionary *commonNamesDictionary =
                                  @{
                                  @"i386": @"i386 Simulator",
                                  @"x86_64": @"x86_64 Simulator",

                                  @"iPhone1,1": @"iPhone",
                                  @"iPhone1,2": @"iPhone 3G",
                                  @"iPhone2,1": @"iPhone 3GS",
                                  @"iPhone3,1": @"iPhone 4",
                                  @"iPhone3,2": @"iPhone 4(Rev A)",
                                  @"iPhone3,3": @"iPhone 4(CDMA)",
                                  @"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,1": @"iPhone 6+(GSM+CDMA)",
                                  @"iPhone7,2": @"iPhone 6(GSM+CDMA)",

                                  @"iPhone8,1": @"iPhone 6S(GSM+CDMA)",
                                  @"iPhone8,2": @"iPhone 6S+(GSM+CDMA)",
                                  @"iPhone8,4": @"iPhone SE(GSM+CDMA)",
                                  @"iPhone9,1": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,2": @"iPhone 7+(GSM+CDMA)",
                                  @"iPhone9,3": @"iPhone 7(GSM+CDMA)",
                                  @"iPhone9,4": @"iPhone 7+(GSM+CDMA)",

                                  @"iPad1,1": @"iPad",
                                  @"iPad2,1": @"iPad 2(WiFi)",
                                  @"iPad2,2": @"iPad 2(GSM)",
                                  @"iPad2,3": @"iPad 2(CDMA)",
                                  @"iPad2,4": @"iPad 2(WiFi Rev A)",
                                  @"iPad2,5": @"iPad Mini 1G (WiFi)",
                                  @"iPad2,6": @"iPad Mini 1G (GSM)",
                                  @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)",
                                  @"iPad3,1": @"iPad 3(WiFi)",
                                  @"iPad3,2": @"iPad 3(GSM+CDMA)",
                                  @"iPad3,3": @"iPad 3(GSM)",
                                  @"iPad3,4": @"iPad 4(WiFi)",
                                  @"iPad3,5": @"iPad 4(GSM)",
                                  @"iPad3,6": @"iPad 4(GSM+CDMA)",

                                  @"iPad4,1": @"iPad Air(WiFi)",
                                  @"iPad4,2": @"iPad Air(GSM)",
                                  @"iPad4,3": @"iPad Air(GSM+CDMA)",

                                  @"iPad5,3": @"iPad Air 2 (WiFi)",
                                  @"iPad5,4": @"iPad Air 2 (GSM+CDMA)",

                                  @"iPad4,4": @"iPad Mini 2G (WiFi)",
                                  @"iPad4,5": @"iPad Mini 2G (GSM)",
                                  @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)",

                                  @"iPad4,7": @"iPad Mini 3G (WiFi)",
                                  @"iPad4,8": @"iPad Mini 3G (GSM)",
                                  @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)",

                                  @"iPod1,1": @"iPod 1st Gen",
                                  @"iPod2,1": @"iPod 2nd Gen",
                                  @"iPod3,1": @"iPod 3rd Gen",
                                  @"iPod4,1": @"iPod 4th Gen",
                                  @"iPod5,1": @"iPod 5th Gen",
                                  @"iPod7,1": @"iPod 6th Gen",
                                  };

                                  NSString *deviceName = commonNamesDictionary[machineName];

                                  if (deviceName == nil) {
                                  deviceName = machineName;
                                  }

                                  return deviceName;
                                  }


                                  I have added this implementation and few other convenient utility methods in a class and put it out there in this GitHub Repository. And also you can find the up to date device information list within this Wiki page.



                                  Please visit it and get use of it.



                                  Update:



                                  You may requires to import sys framework,



                                  #import <sys/utsname.h>






                                  share|improve this answer














                                  share|improve this answer



                                  share|improve this answer








                                  edited Oct 20 '17 at 18:27

























                                  answered Jun 29 '16 at 10:28









                                  Randika Vishman

                                  4,32723657




                                  4,32723657








                                  • 1




                                    Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                    – Hemang
                                    Dec 22 '16 at 7:20














                                  • 1




                                    Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                    – Hemang
                                    Dec 22 '16 at 7:20








                                  1




                                  1




                                  Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                  – Hemang
                                  Dec 22 '16 at 7:20




                                  Kasun, thanks for the updated implementation of this. Please try to keep it updated for new models in future.
                                  – Hemang
                                  Dec 22 '16 at 7:20










                                  up vote
                                  6
                                  down vote













                                  Swift 3 compatible



                                  // MARK: - UIDevice Extension -

                                  private let DeviceList = [
                                  /* iPod 5 */ "iPod5,1": "iPod Touch 5",
                                  /* iPhone 4 */ "iPhone3,1": "iPhone 4", "iPhone3,2": "iPhone 4", "iPhone3,3": "iPhone 4",
                                  /* iPhone 4S */ "iPhone4,1": "iPhone 4S",
                                  /* iPhone 5 */ "iPhone5,1": "iPhone 5", "iPhone5,2": "iPhone 5",
                                  /* iPhone 5C */ "iPhone5,3": "iPhone 5C", "iPhone5,4": "iPhone 5C",
                                  /* iPhone 5S */ "iPhone6,1": "iPhone 5S", "iPhone6,2": "iPhone 5S",
                                  /* iPhone 6 */ "iPhone7,2": "iPhone 6",
                                  /* iPhone 6 Plus */ "iPhone7,1": "iPhone 6 Plus",
                                  /* iPhone 6S */ "iPhone8,1": "iPhone 6S",
                                  /* iPhone 6S Plus */ "iPhone8,2": "iPhone 6S Plus",
                                  /* iPhone SE */ "iPhone8,4": "iPhone SE",
                                  /* iPhone 7 */ "iPhone9,1": "iPhone 7",
                                  /* iPhone 7 */ "iPhone9,3": "iPhone 7",
                                  /* iPhone 7 Plus */ "iPhone9,2": "iPhone 7 Plus",
                                  /* iPhone 7 Plus */ "iPhone9,4": "iPhone 7 Plus",
                                  /* iPad 2 */ "iPad2,1": "iPad 2", "iPad2,2": "iPad 2", "iPad2,3": "iPad 2", "iPad2,4": "iPad 2",
                                  /* iPad 3 */ "iPad3,1": "iPad 3", "iPad3,2": "iPad 3", "iPad3,3": "iPad 3",
                                  /* iPad 4 */ "iPad3,4": "iPad 4", "iPad3,5": "iPad 4", "iPad3,6": "iPad 4",
                                  /* iPad Air */ "iPad4,1": "iPad Air", "iPad4,2": "iPad Air", "iPad4,3": "iPad Air",
                                  /* iPad Air 2 */ "iPad5,1": "iPad Air 2", "iPad5,3": "iPad Air 2", "iPad5,4": "iPad Air 2",
                                  /* iPad Mini */ "iPad2,5": "iPad Mini 1", "iPad2,6": "iPad Mini 1", "iPad2,7": "iPad Mini 1",
                                  /* iPad Mini 2 */ "iPad4,4": "iPad Mini 2", "iPad4,5": "iPad Mini 2", "iPad4,6": "iPad Mini 2",
                                  /* iPad Mini 3 */ "iPad4,7": "iPad Mini 3", "iPad4,8": "iPad Mini 3", "iPad4,9": "iPad Mini 3",
                                  /* iPad Pro 12.9 */ "iPad6,7": "iPad Pro 12.9", "iPad6,8": "iPad Pro 12.9",
                                  /* iPad Pro 9.7 */ "iPad6,3": "iPad Pro 9.7", "iPad6,4": "iPad Pro 9.7",
                                  /* Simulator */ "x86_64": "Simulator", "i386": "Simulator"
                                  ]

                                  extension UIDevice {

                                  static var modelName: String {
                                  var systemInfo = utsname()
                                  uname(&systemInfo)

                                  let machine = systemInfo.machine
                                  let mirror = Mirror(reflecting: machine)

                                  var identifier = ""

                                  for child in mirror.children {
                                  if let value = child.value as? Int8, value != 0 {
                                  identifier += String(UnicodeScalar(UInt8(value)))
                                  }
                                  }
                                  return DeviceList[identifier] ?? identifier
                                  }

                                  static var isIphone4: Bool {
                                  return modelName == "iPhone 5" || modelName == "iPhone 5C" || modelName == "iPhone 5S" || UIDevice.isSimulatorIPhone4
                                  }

                                  static var isIphone5: Bool {
                                  return modelName == "iPhone 4S" || modelName == "iPhone 4" || UIDevice.isSimulatorIPhone5
                                  }

                                  static var isIphone6: Bool {
                                  return modelName == "iPhone 6" || UIDevice.isSimulatorIPhone6
                                  }
                                  static var isIphone6Plus: Bool {
                                  return modelName == "iPhone 6 Plus" || UIDevice.isSimulatorIPhone6Plus
                                  }

                                  static var isIpad: Bool {
                                  if UIDevice.current.model.contains("iPad") {
                                  return true
                                  }
                                  return false
                                  }

                                  static var isIphone: Bool {
                                  return !self.isIpad
                                  }

                                  /// Check if current device is iPhone4S (and earlier) relying on screen heigth
                                  static var isSimulatorIPhone4: Bool {
                                  return UIDevice.isSimulatorWithScreenHeigth(480)
                                  }

                                  /// Check if current device is iPhone5 relying on screen heigth
                                  static var isSimulatorIPhone5: Bool {
                                  return UIDevice.isSimulatorWithScreenHeigth(568)
                                  }

                                  /// Check if current device is iPhone6 relying on screen heigth
                                  static var isSimulatorIPhone6: Bool {
                                  return UIDevice.isSimulatorWithScreenHeigth(667)
                                  }

                                  /// Check if current device is iPhone6 Plus relying on screen heigth
                                  static var isSimulatorIPhone6Plus: Bool {
                                  return UIDevice.isSimulatorWithScreenHeigth(736)
                                  }

                                  private static func isSimulatorWithScreenHeigth(_ heigth: CGFloat) -> Bool {
                                  let screenSize: CGRect = UIScreen.main.bounds
                                  return modelName == "Simulator" && screenSize.height == heigth
                                  }

                                  }





                                  share|improve this answer



























                                    up vote
                                    6
                                    down vote













                                    Swift 3 compatible



                                    // MARK: - UIDevice Extension -

                                    private let DeviceList = [
                                    /* iPod 5 */ "iPod5,1": "iPod Touch 5",
                                    /* iPhone 4 */ "iPhone3,1": "iPhone 4", "iPhone3,2": "iPhone 4", "iPhone3,3": "iPhone 4",
                                    /* iPhone 4S */ "iPhone4,1": "iPhone 4S",
                                    /* iPhone 5 */ "iPhone5,1": "iPhone 5", "iPhone5,2": "iPhone 5",
                                    /* iPhone 5C */ "iPhone5,3": "iPhone 5C", "iPhone5,4": "iPhone 5C",
                                    /* iPhone 5S */ "iPhone6,1": "iPhone 5S", "iPhone6,2": "iPhone 5S",
                                    /* iPhone 6 */ "iPhone7,2": "iPhone 6",
                                    /* iPhone 6 Plus */ "iPhone7,1": "iPhone 6 Plus",
                                    /* iPhone 6S */ "iPhone8,1": "iPhone 6S",
                                    /* iPhone 6S Plus */ "iPhone8,2": "iPhone 6S Plus",
                                    /* iPhone SE */ "iPhone8,4": "iPhone SE",
                                    /* iPhone 7 */ "iPhone9,1": "iPhone 7",
                                    /* iPhone 7 */ "iPhone9,3": "iPhone 7",
                                    /* iPhone 7 Plus */ "iPhone9,2": "iPhone 7 Plus",
                                    /* iPhone 7 Plus */ "iPhone9,4": "iPhone 7 Plus",
                                    /* iPad 2 */ "iPad2,1": "iPad 2", "iPad2,2": "iPad 2", "iPad2,3": "iPad 2", "iPad2,4": "iPad 2",
                                    /* iPad 3 */ "iPad3,1": "iPad 3", "iPad3,2": "iPad 3", "iPad3,3": "iPad 3",
                                    /* iPad 4 */ "iPad3,4": "iPad 4", "iPad3,5": "iPad 4", "iPad3,6": "iPad 4",
                                    /* iPad Air */ "iPad4,1": "iPad Air", "iPad4,2": "iPad Air", "iPad4,3": "iPad Air",
                                    /* iPad Air 2 */ "iPad5,1": "iPad Air 2", "iPad5,3": "iPad Air 2", "iPad5,4": "iPad Air 2",
                                    /* iPad Mini */ "iPad2,5": "iPad Mini 1", "iPad2,6": "iPad Mini 1", "iPad2,7": "iPad Mini 1",
                                    /* iPad Mini 2 */ "iPad4,4": "iPad Mini 2", "iPad4,5": "iPad Mini 2", "iPad4,6": "iPad Mini 2",
                                    /* iPad Mini 3 */ "iPad4,7": "iPad Mini 3", "iPad4,8": "iPad Mini 3", "iPad4,9": "iPad Mini 3",
                                    /* iPad Pro 12.9 */ "iPad6,7": "iPad Pro 12.9", "iPad6,8": "iPad Pro 12.9",
                                    /* iPad Pro 9.7 */ "iPad6,3": "iPad Pro 9.7", "iPad6,4": "iPad Pro 9.7",
                                    /* Simulator */ "x86_64": "Simulator", "i386": "Simulator"
                                    ]

                                    extension UIDevice {

                                    static var modelName: String {
                                    var systemInfo = utsname()
                                    uname(&systemInfo)

                                    let machine = systemInfo.machine
                                    let mirror = Mirror(reflecting: machine)

                                    var identifier = ""

                                    for child in mirror.children {
                                    if let value = child.value as? Int8, value != 0 {
                                    identifier += String(UnicodeScalar(UInt8(value)))
                                    }
                                    }
                                    return DeviceList[identifier] ?? identifier
                                    }

                                    static var isIphone4: Bool {
                                    return modelName == "iPhone 5" || modelName == "iPhone 5C" || modelName == "iPhone 5S" || UIDevice.isSimulatorIPhone4
                                    }

                                    static var isIphone5: Bool {
                                    return modelName == "iPhone 4S" || modelName == "iPhone 4" || UIDevice.isSimulatorIPhone5
                                    }

                                    static var isIphone6: Bool {
                                    return modelName == "iPhone 6" || UIDevice.isSimulatorIPhone6
                                    }
                                    static var isIphone6Plus: Bool {
                                    return modelName == "iPhone 6 Plus" || UIDevice.isSimulatorIPhone6Plus
                                    }

                                    static var isIpad: Bool {
                                    if UIDevice.current.model.contains("iPad") {
                                    return true
                                    }
                                    return false
                                    }

                                    static var isIphone: Bool {
                                    return !self.isIpad
                                    }

                                    /// Check if current device is iPhone4S (and earlier) relying on screen heigth
                                    static var isSimulatorIPhone4: Bool {
                                    return UIDevice.isSimulatorWithScreenHeigth(480)
                                    }

                                    /// Check if current device is iPhone5 relying on screen heigth
                                    static var isSimulatorIPhone5: Bool {
                                    return UIDevice.isSimulatorWithScreenHeigth(568)
                                    }

                                    /// Check if current device is iPhone6 relying on screen heigth
                                    static var isSimulatorIPhone6: Bool {
                                    return UIDevice.isSimulatorWithScreenHeigth(667)
                                    }

                                    /// Check if current device is iPhone6 Plus relying on screen heigth
                                    static var isSimulatorIPhone6Plus: Bool {
                                    return UIDevice.isSimulatorWithScreenHeigth(736)
                                    }

                                    private static func isSimulatorWithScreenHeigth(_ heigth: CGFloat) -> Bool {
                                    let screenSize: CGRect = UIScreen.main.bounds
                                    return modelName == "Simulator" && screenSize.height == heigth
                                    }

                                    }





                                    share|improve this answer

























                                      up vote
                                      6
                                      down vote










                                      up vote
                                      6
                                      down vote









                                      Swift 3 compatible



                                      // MARK: - UIDevice Extension -

                                      private let DeviceList = [
                                      /* iPod 5 */ "iPod5,1": "iPod Touch 5",
                                      /* iPhone 4 */ "iPhone3,1": "iPhone 4", "iPhone3,2": "iPhone 4", "iPhone3,3": "iPhone 4",
                                      /* iPhone 4S */ "iPhone4,1": "iPhone 4S",
                                      /* iPhone 5 */ "iPhone5,1": "iPhone 5", "iPhone5,2": "iPhone 5",
                                      /* iPhone 5C */ "iPhone5,3": "iPhone 5C", "iPhone5,4": "iPhone 5C",
                                      /* iPhone 5S */ "iPhone6,1": "iPhone 5S", "iPhone6,2": "iPhone 5S",
                                      /* iPhone 6 */ "iPhone7,2": "iPhone 6",
                                      /* iPhone 6 Plus */ "iPhone7,1": "iPhone 6 Plus",
                                      /* iPhone 6S */ "iPhone8,1": "iPhone 6S",
                                      /* iPhone 6S Plus */ "iPhone8,2": "iPhone 6S Plus",
                                      /* iPhone SE */ "iPhone8,4": "iPhone SE",
                                      /* iPhone 7 */ "iPhone9,1": "iPhone 7",
                                      /* iPhone 7 */ "iPhone9,3": "iPhone 7",
                                      /* iPhone 7 Plus */ "iPhone9,2": "iPhone 7 Plus",
                                      /* iPhone 7 Plus */ "iPhone9,4": "iPhone 7 Plus",
                                      /* iPad 2 */ "iPad2,1": "iPad 2", "iPad2,2": "iPad 2", "iPad2,3": "iPad 2", "iPad2,4": "iPad 2",
                                      /* iPad 3 */ "iPad3,1": "iPad 3", "iPad3,2": "iPad 3", "iPad3,3": "iPad 3",
                                      /* iPad 4 */ "iPad3,4": "iPad 4", "iPad3,5": "iPad 4", "iPad3,6": "iPad 4",
                                      /* iPad Air */ "iPad4,1": "iPad Air", "iPad4,2": "iPad Air", "iPad4,3": "iPad Air",
                                      /* iPad Air 2 */ "iPad5,1": "iPad Air 2", "iPad5,3": "iPad Air 2", "iPad5,4": "iPad Air 2",
                                      /* iPad Mini */ "iPad2,5": "iPad Mini 1", "iPad2,6": "iPad Mini 1", "iPad2,7": "iPad Mini 1",
                                      /* iPad Mini 2 */ "iPad4,4": "iPad Mini 2", "iPad4,5": "iPad Mini 2", "iPad4,6": "iPad Mini 2",
                                      /* iPad Mini 3 */ "iPad4,7": "iPad Mini 3", "iPad4,8": "iPad Mini 3", "iPad4,9": "iPad Mini 3",
                                      /* iPad Pro 12.9 */ "iPad6,7": "iPad Pro 12.9", "iPad6,8": "iPad Pro 12.9",
                                      /* iPad Pro 9.7 */ "iPad6,3": "iPad Pro 9.7", "iPad6,4": "iPad Pro 9.7",
                                      /* Simulator */ "x86_64": "Simulator", "i386": "Simulator"
                                      ]

                                      extension UIDevice {

                                      static var modelName: String {
                                      var systemInfo = utsname()
                                      uname(&systemInfo)

                                      let machine = systemInfo.machine
                                      let mirror = Mirror(reflecting: machine)

                                      var identifier = ""

                                      for child in mirror.children {
                                      if let value = child.value as? Int8, value != 0 {
                                      identifier += String(UnicodeScalar(UInt8(value)))
                                      }
                                      }
                                      return DeviceList[identifier] ?? identifier
                                      }

                                      static var isIphone4: Bool {
                                      return modelName == "iPhone 5" || modelName == "iPhone 5C" || modelName == "iPhone 5S" || UIDevice.isSimulatorIPhone4
                                      }

                                      static var isIphone5: Bool {
                                      return modelName == "iPhone 4S" || modelName == "iPhone 4" || UIDevice.isSimulatorIPhone5
                                      }

                                      static var isIphone6: Bool {
                                      return modelName == "iPhone 6" || UIDevice.isSimulatorIPhone6
                                      }
                                      static var isIphone6Plus: Bool {
                                      return modelName == "iPhone 6 Plus" || UIDevice.isSimulatorIPhone6Plus
                                      }

                                      static var isIpad: Bool {
                                      if UIDevice.current.model.contains("iPad") {
                                      return true
                                      }
                                      return false
                                      }

                                      static var isIphone: Bool {
                                      return !self.isIpad
                                      }

                                      /// Check if current device is iPhone4S (and earlier) relying on screen heigth
                                      static var isSimulatorIPhone4: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(480)
                                      }

                                      /// Check if current device is iPhone5 relying on screen heigth
                                      static var isSimulatorIPhone5: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(568)
                                      }

                                      /// Check if current device is iPhone6 relying on screen heigth
                                      static var isSimulatorIPhone6: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(667)
                                      }

                                      /// Check if current device is iPhone6 Plus relying on screen heigth
                                      static var isSimulatorIPhone6Plus: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(736)
                                      }

                                      private static func isSimulatorWithScreenHeigth(_ heigth: CGFloat) -> Bool {
                                      let screenSize: CGRect = UIScreen.main.bounds
                                      return modelName == "Simulator" && screenSize.height == heigth
                                      }

                                      }





                                      share|improve this answer














                                      Swift 3 compatible



                                      // MARK: - UIDevice Extension -

                                      private let DeviceList = [
                                      /* iPod 5 */ "iPod5,1": "iPod Touch 5",
                                      /* iPhone 4 */ "iPhone3,1": "iPhone 4", "iPhone3,2": "iPhone 4", "iPhone3,3": "iPhone 4",
                                      /* iPhone 4S */ "iPhone4,1": "iPhone 4S",
                                      /* iPhone 5 */ "iPhone5,1": "iPhone 5", "iPhone5,2": "iPhone 5",
                                      /* iPhone 5C */ "iPhone5,3": "iPhone 5C", "iPhone5,4": "iPhone 5C",
                                      /* iPhone 5S */ "iPhone6,1": "iPhone 5S", "iPhone6,2": "iPhone 5S",
                                      /* iPhone 6 */ "iPhone7,2": "iPhone 6",
                                      /* iPhone 6 Plus */ "iPhone7,1": "iPhone 6 Plus",
                                      /* iPhone 6S */ "iPhone8,1": "iPhone 6S",
                                      /* iPhone 6S Plus */ "iPhone8,2": "iPhone 6S Plus",
                                      /* iPhone SE */ "iPhone8,4": "iPhone SE",
                                      /* iPhone 7 */ "iPhone9,1": "iPhone 7",
                                      /* iPhone 7 */ "iPhone9,3": "iPhone 7",
                                      /* iPhone 7 Plus */ "iPhone9,2": "iPhone 7 Plus",
                                      /* iPhone 7 Plus */ "iPhone9,4": "iPhone 7 Plus",
                                      /* iPad 2 */ "iPad2,1": "iPad 2", "iPad2,2": "iPad 2", "iPad2,3": "iPad 2", "iPad2,4": "iPad 2",
                                      /* iPad 3 */ "iPad3,1": "iPad 3", "iPad3,2": "iPad 3", "iPad3,3": "iPad 3",
                                      /* iPad 4 */ "iPad3,4": "iPad 4", "iPad3,5": "iPad 4", "iPad3,6": "iPad 4",
                                      /* iPad Air */ "iPad4,1": "iPad Air", "iPad4,2": "iPad Air", "iPad4,3": "iPad Air",
                                      /* iPad Air 2 */ "iPad5,1": "iPad Air 2", "iPad5,3": "iPad Air 2", "iPad5,4": "iPad Air 2",
                                      /* iPad Mini */ "iPad2,5": "iPad Mini 1", "iPad2,6": "iPad Mini 1", "iPad2,7": "iPad Mini 1",
                                      /* iPad Mini 2 */ "iPad4,4": "iPad Mini 2", "iPad4,5": "iPad Mini 2", "iPad4,6": "iPad Mini 2",
                                      /* iPad Mini 3 */ "iPad4,7": "iPad Mini 3", "iPad4,8": "iPad Mini 3", "iPad4,9": "iPad Mini 3",
                                      /* iPad Pro 12.9 */ "iPad6,7": "iPad Pro 12.9", "iPad6,8": "iPad Pro 12.9",
                                      /* iPad Pro 9.7 */ "iPad6,3": "iPad Pro 9.7", "iPad6,4": "iPad Pro 9.7",
                                      /* Simulator */ "x86_64": "Simulator", "i386": "Simulator"
                                      ]

                                      extension UIDevice {

                                      static var modelName: String {
                                      var systemInfo = utsname()
                                      uname(&systemInfo)

                                      let machine = systemInfo.machine
                                      let mirror = Mirror(reflecting: machine)

                                      var identifier = ""

                                      for child in mirror.children {
                                      if let value = child.value as? Int8, value != 0 {
                                      identifier += String(UnicodeScalar(UInt8(value)))
                                      }
                                      }
                                      return DeviceList[identifier] ?? identifier
                                      }

                                      static var isIphone4: Bool {
                                      return modelName == "iPhone 5" || modelName == "iPhone 5C" || modelName == "iPhone 5S" || UIDevice.isSimulatorIPhone4
                                      }

                                      static var isIphone5: Bool {
                                      return modelName == "iPhone 4S" || modelName == "iPhone 4" || UIDevice.isSimulatorIPhone5
                                      }

                                      static var isIphone6: Bool {
                                      return modelName == "iPhone 6" || UIDevice.isSimulatorIPhone6
                                      }
                                      static var isIphone6Plus: Bool {
                                      return modelName == "iPhone 6 Plus" || UIDevice.isSimulatorIPhone6Plus
                                      }

                                      static var isIpad: Bool {
                                      if UIDevice.current.model.contains("iPad") {
                                      return true
                                      }
                                      return false
                                      }

                                      static var isIphone: Bool {
                                      return !self.isIpad
                                      }

                                      /// Check if current device is iPhone4S (and earlier) relying on screen heigth
                                      static var isSimulatorIPhone4: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(480)
                                      }

                                      /// Check if current device is iPhone5 relying on screen heigth
                                      static var isSimulatorIPhone5: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(568)
                                      }

                                      /// Check if current device is iPhone6 relying on screen heigth
                                      static var isSimulatorIPhone6: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(667)
                                      }

                                      /// Check if current device is iPhone6 Plus relying on screen heigth
                                      static var isSimulatorIPhone6Plus: Bool {
                                      return UIDevice.isSimulatorWithScreenHeigth(736)
                                      }

                                      private static func isSimulatorWithScreenHeigth(_ heigth: CGFloat) -> Bool {
                                      let screenSize: CGRect = UIScreen.main.bounds
                                      return modelName == "Simulator" && screenSize.height == heigth
                                      }

                                      }






                                      share|improve this answer














                                      share|improve this answer



                                      share|improve this answer








                                      edited Apr 18 '17 at 13:27









                                      Casper Zandbergen

                                      607513




                                      607513










                                      answered Oct 16 '15 at 9:46









                                      Luca Davanzo

                                      12.5k1070103




                                      12.5k1070103






















                                          up vote
                                          4
                                          down vote













                                          #import <sys/utsname.h>

                                          #define HARDWARE @{@"i386": @"Simulator",@"x86_64": @"Simulator",@"iPod1,1": @"iPod Touch",@"iPod2,1": @"iPod Touch 2nd Generation",@"iPod3,1": @"iPod Touch 3rd Generation",@"iPod4,1": @"iPod Touch 4th Generation",@"iPhone1,1": @"iPhone",@"iPhone1,2": @"iPhone 3G",@"iPhone2,1": @"iPhone 3GS",@"iPhone3,1": @"iPhone 4",@"iPhone4,1": @"iPhone 4S",@"iPhone5,1": @"iPhone 5",@"iPhone5,2": @"iPhone 5",@"iPhone5,3": @"iPhone 5c",@"iPhone5,4": @"iPhone 5c",@"iPhone6,1": @"iPhone 5s",@"iPhone6,2": @"iPhone 5s",@"iPad1,1": @"iPad",@"iPad2,1": @"iPad 2",@"iPad3,1": @"iPad 3rd Generation ",@"iPad3,4": @"iPad 4th Generation ",@"iPad2,5": @"iPad Mini",@"iPad4,4": @"iPad Mini 2nd Generation - Wifi",@"iPad4,5": @"iPad Mini 2nd Generation - Cellular",@"iPad4,1": @"iPad Air 5th Generation - Wifi",@"iPad4,2": @"iPad Air 5th Generation - Cellular"}

                                          @interface ViewController ()
                                          @end

                                          @implementation ViewController

                                          - (void)viewDidLoad
                                          {
                                          [super viewDidLoad];
                                          struct utsname systemInfo;
                                          uname(&systemInfo);
                                          NSLog(@"hardware: %@",[HARDWARE objectForKey:[NSString stringWithCString: systemInfo.machine encoding:NSUTF8StringEncoding]]);
                                          }





                                          share|improve this answer

























                                            up vote
                                            4
                                            down vote













                                            #import <sys/utsname.h>

                                            #define HARDWARE @{@"i386": @"Simulator",@"x86_64": @"Simulator",@"iPod1,1": @"iPod Touch",@"iPod2,1": @"iPod Touch 2nd Generation",@"iPod3,1": @"iPod Touch 3rd Generation",@"iPod4,1": @"iPod Touch 4th Generation",@"iPhone1,1": @"iPhone",@"iPhone1,2": @"iPhone 3G",@"iPhone2,1": @"iPhone 3GS",@"iPhone3,1": @"iPhone 4",@"iPhone4,1": @"iPhone 4S",@"iPhone5,1": @"iPhone 5",@"iPhone5,2": @"iPhone 5",@"iPhone5,3": @"iPhone 5c",@"iPhone5,4": @"iPhone 5c",@"iPhone6,1": @"iPhone 5s",@"iPhone6,2": @"iPhone 5s",@"iPad1,1": @"iPad",@"iPad2,1": @"iPad 2",@"iPad3,1": @"iPad 3rd Generation ",@"iPad3,4": @"iPad 4th Generation ",@"iPad2,5": @"iPad Mini",@"iPad4,4": @"iPad Mini 2nd Generation - Wifi",@"iPad4,5": @"iPad Mini 2nd Generation - Cellular",@"iPad4,1": @"iPad Air 5th Generation - Wifi",@"iPad4,2": @"iPad Air 5th Generation - Cellular"}

                                            @interface ViewController ()
                                            @end

                                            @implementation ViewController

                                            - (void)viewDidLoad
                                            {
                                            [super viewDidLoad];
                                            struct utsname systemInfo;
                                            uname(&systemInfo);
                                            NSLog(@"hardware: %@",[HARDWARE objectForKey:[NSString stringWithCString: systemInfo.machine encoding:NSUTF8StringEncoding]]);
                                            }





                                            share|improve this answer























                                              up vote
                                              4
                                              down vote










                                              up vote
                                              4
                                              down vote









                                              #import <sys/utsname.h>

                                              #define HARDWARE @{@"i386": @"Simulator",@"x86_64": @"Simulator",@"iPod1,1": @"iPod Touch",@"iPod2,1": @"iPod Touch 2nd Generation",@"iPod3,1": @"iPod Touch 3rd Generation",@"iPod4,1": @"iPod Touch 4th Generation",@"iPhone1,1": @"iPhone",@"iPhone1,2": @"iPhone 3G",@"iPhone2,1": @"iPhone 3GS",@"iPhone3,1": @"iPhone 4",@"iPhone4,1": @"iPhone 4S",@"iPhone5,1": @"iPhone 5",@"iPhone5,2": @"iPhone 5",@"iPhone5,3": @"iPhone 5c",@"iPhone5,4": @"iPhone 5c",@"iPhone6,1": @"iPhone 5s",@"iPhone6,2": @"iPhone 5s",@"iPad1,1": @"iPad",@"iPad2,1": @"iPad 2",@"iPad3,1": @"iPad 3rd Generation ",@"iPad3,4": @"iPad 4th Generation ",@"iPad2,5": @"iPad Mini",@"iPad4,4": @"iPad Mini 2nd Generation - Wifi",@"iPad4,5": @"iPad Mini 2nd Generation - Cellular",@"iPad4,1": @"iPad Air 5th Generation - Wifi",@"iPad4,2": @"iPad Air 5th Generation - Cellular"}

                                              @interface ViewController ()
                                              @end

                                              @implementation ViewController

                                              - (void)viewDidLoad
                                              {
                                              [super viewDidLoad];
                                              struct utsname systemInfo;
                                              uname(&systemInfo);
                                              NSLog(@"hardware: %@",[HARDWARE objectForKey:[NSString stringWithCString: systemInfo.machine encoding:NSUTF8StringEncoding]]);
                                              }





                                              share|improve this answer












                                              #import <sys/utsname.h>

                                              #define HARDWARE @{@"i386": @"Simulator",@"x86_64": @"Simulator",@"iPod1,1": @"iPod Touch",@"iPod2,1": @"iPod Touch 2nd Generation",@"iPod3,1": @"iPod Touch 3rd Generation",@"iPod4,1": @"iPod Touch 4th Generation",@"iPhone1,1": @"iPhone",@"iPhone1,2": @"iPhone 3G",@"iPhone2,1": @"iPhone 3GS",@"iPhone3,1": @"iPhone 4",@"iPhone4,1": @"iPhone 4S",@"iPhone5,1": @"iPhone 5",@"iPhone5,2": @"iPhone 5",@"iPhone5,3": @"iPhone 5c",@"iPhone5,4": @"iPhone 5c",@"iPhone6,1": @"iPhone 5s",@"iPhone6,2": @"iPhone 5s",@"iPad1,1": @"iPad",@"iPad2,1": @"iPad 2",@"iPad3,1": @"iPad 3rd Generation ",@"iPad3,4": @"iPad 4th Generation ",@"iPad2,5": @"iPad Mini",@"iPad4,4": @"iPad Mini 2nd Generation - Wifi",@"iPad4,5": @"iPad Mini 2nd Generation - Cellular",@"iPad4,1": @"iPad Air 5th Generation - Wifi",@"iPad4,2": @"iPad Air 5th Generation - Cellular"}

                                              @interface ViewController ()
                                              @end

                                              @implementation ViewController

                                              - (void)viewDidLoad
                                              {
                                              [super viewDidLoad];
                                              struct utsname systemInfo;
                                              uname(&systemInfo);
                                              NSLog(@"hardware: %@",[HARDWARE objectForKey:[NSString stringWithCString: systemInfo.machine encoding:NSUTF8StringEncoding]]);
                                              }






                                              share|improve this answer












                                              share|improve this answer



                                              share|improve this answer










                                              answered Aug 28 '14 at 5:09









                                              Ocelot

                                              82031643




                                              82031643






















                                                  up vote
                                                  4
                                                  down vote













                                                  This solution works for both physical devices and iOS simulator in a way that simulator returns the same model as physical device would return for a model e.g. "iPhone10,6" for iPhone X (GSM) rather than "x86_64".



                                                  Definition - Swift 4:



                                                  import UIKit

                                                  extension UIDevice {
                                                  var modelName: String {
                                                  var systemInfo = utsname()
                                                  uname(&systemInfo)
                                                  let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                  let identifier = machineMirror.children.reduce("") { identifier, element in
                                                  guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                  return identifier + String(UnicodeScalar(UInt8(value)))
                                                  }
                                                  if let value = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
                                                  return value
                                                  } else {
                                                  return identifier
                                                  }
                                                  }
                                                  }


                                                  Usage:



                                                  print(UIDevice.current.modelName)





                                                  share|improve this answer



























                                                    up vote
                                                    4
                                                    down vote













                                                    This solution works for both physical devices and iOS simulator in a way that simulator returns the same model as physical device would return for a model e.g. "iPhone10,6" for iPhone X (GSM) rather than "x86_64".



                                                    Definition - Swift 4:



                                                    import UIKit

                                                    extension UIDevice {
                                                    var modelName: String {
                                                    var systemInfo = utsname()
                                                    uname(&systemInfo)
                                                    let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                    let identifier = machineMirror.children.reduce("") { identifier, element in
                                                    guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                    return identifier + String(UnicodeScalar(UInt8(value)))
                                                    }
                                                    if let value = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
                                                    return value
                                                    } else {
                                                    return identifier
                                                    }
                                                    }
                                                    }


                                                    Usage:



                                                    print(UIDevice.current.modelName)





                                                    share|improve this answer

























                                                      up vote
                                                      4
                                                      down vote










                                                      up vote
                                                      4
                                                      down vote









                                                      This solution works for both physical devices and iOS simulator in a way that simulator returns the same model as physical device would return for a model e.g. "iPhone10,6" for iPhone X (GSM) rather than "x86_64".



                                                      Definition - Swift 4:



                                                      import UIKit

                                                      extension UIDevice {
                                                      var modelName: String {
                                                      var systemInfo = utsname()
                                                      uname(&systemInfo)
                                                      let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                      let identifier = machineMirror.children.reduce("") { identifier, element in
                                                      guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                      return identifier + String(UnicodeScalar(UInt8(value)))
                                                      }
                                                      if let value = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
                                                      return value
                                                      } else {
                                                      return identifier
                                                      }
                                                      }
                                                      }


                                                      Usage:



                                                      print(UIDevice.current.modelName)





                                                      share|improve this answer














                                                      This solution works for both physical devices and iOS simulator in a way that simulator returns the same model as physical device would return for a model e.g. "iPhone10,6" for iPhone X (GSM) rather than "x86_64".



                                                      Definition - Swift 4:



                                                      import UIKit

                                                      extension UIDevice {
                                                      var modelName: String {
                                                      var systemInfo = utsname()
                                                      uname(&systemInfo)
                                                      let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                      let identifier = machineMirror.children.reduce("") { identifier, element in
                                                      guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                      return identifier + String(UnicodeScalar(UInt8(value)))
                                                      }
                                                      if let value = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] {
                                                      return value
                                                      } else {
                                                      return identifier
                                                      }
                                                      }
                                                      }


                                                      Usage:



                                                      print(UIDevice.current.modelName)






                                                      share|improve this answer














                                                      share|improve this answer



                                                      share|improve this answer








                                                      edited Aug 28 at 13:34









                                                      Leo Dabus

                                                      127k29258333




                                                      127k29258333










                                                      answered Dec 4 '17 at 17:58









                                                      vedrano

                                                      2,0751620




                                                      2,0751620






















                                                          up vote
                                                          3
                                                          down vote













                                                          Below Function Perfectly Working on iOS7 or later version in Swift



                                                          func DeviceName()-> String {

                                                          var myDeviceName : String = String()

                                                          var systemInfo = [UInt8](count: sizeof(utsname), repeatedValue: 0)

                                                          let model = systemInfo.withUnsafeMutableBufferPointer { (inout body: UnsafeMutableBufferPointer<UInt8>) -> String? in

                                                          if uname(UnsafeMutablePointer(body.baseAddress)) != 0 {
                                                          return nil
                                                          }

                                                          return String.fromCString(UnsafePointer(body.baseAddress.advancedBy(Int(_SYS_NAMELEN * 4))))
                                                          }

                                                          let deviceNamesByCode : [String: String] = ["iPod1,1":"iPod Touch 1",
                                                          "iPod2,1":"iPod Touch 2",
                                                          "iPod3,1":"iPod Touch 3",
                                                          "iPod4,1":"iPod Touch 4",
                                                          "iPod5,1":"iPod Touch 5",
                                                          "iPod7,1":"iPod Touch 6",
                                                          "iPhone1,1":"iPhone",
                                                          "iPhone1,2":"iPhone ",
                                                          "iPhone2,1":"iPhone ",
                                                          "iPhone3,1":"iPhone 4",
                                                          "iPhone3,2":"iPhone 4",
                                                          "iPhone3,3":"iPhone 4",
                                                          "iPhone4,1":"iPhone 4s",
                                                          "iPhone5,1":"iPhone 5",
                                                          "iPhone5,2":"iPhone 5",
                                                          "iPhone5,3":"iPhone 5c",
                                                          "iPhone5,4":"iPhone 5c",
                                                          "iPhone6,1":"iPhone 5s",
                                                          "iPhone6,2":"iPhone 5s",
                                                          "iPhone7,2":"iPhone 6",
                                                          "iPhone7,1":"iPhone 6 Plus",
                                                          "iPhone8,1":"iPhone 6s",
                                                          "iPhone8,2":"iPhone 6s Plus",
                                                          "iPhone8,4":"iPhone SE",
                                                          "iPad2,1":"iPad 2",
                                                          "iPad2,2":"iPad 2",
                                                          "iPad2,3":"iPad 2",
                                                          "iPad2,4":"iPad 2",
                                                          "iPad3,1":"iPad 3",
                                                          "iPad3,2":"iPad 3",
                                                          "iPad3,3":"iPad 3",
                                                          "iPad3,4":"iPad 4",
                                                          "iPad3,5":"iPad 4",
                                                          "iPad3,6":"iPad 4",
                                                          "iPad4,1":"iPad Air",
                                                          "iPad4,2":"iPad Air",
                                                          "iPad4,3":"iPad Air",
                                                          "iPad5,3":"iPad Air 2",
                                                          "iPad5,4":"iPad Air 2",
                                                          "iPad2,5":"iPad Mini",
                                                          "iPad2,6":"iPad Mini",
                                                          "iPad2,7":"iPad Mini",
                                                          "iPad4,4":"iPad Mini 2",
                                                          "iPad4,5":"iPad Mini 2",
                                                          "iPad4,6":"iPad Mini 2",
                                                          "iPad4,7":"iPad Mini 3",
                                                          "iPad4,8":"iPad Mini 3",
                                                          "iPad4,9":"iPad Mini 3",
                                                          "iPad5,1":"iPad Mini 4",
                                                          "iPad5,2":"iPad Mini 4",
                                                          "iPad6,3":"iPad Pro",
                                                          "iPad6,4":"iPad Pro",
                                                          "iPad6,7":"iPad Pro",
                                                          "iPad6,8":"iPad Pro",
                                                          "AppleTV5,3":"Apple TV",
                                                          "i386":"Simulator",
                                                          "x86_64":"Simulator"

                                                          ]

                                                          if model!.characters.count > 0 {
                                                          myDeviceName = deviceNamesByCode[model!]!
                                                          }else{
                                                          myDeviceName = UIDevice.currentDevice().model
                                                          }

                                                          print("myDeviceName==(myDeviceName)")
                                                          return myDeviceName

                                                          }





                                                          share|improve this answer























                                                          • Thanks for the update! And do please update for new devices too.
                                                            – Sohil R. Memon
                                                            Jun 27 '16 at 5:58















                                                          up vote
                                                          3
                                                          down vote













                                                          Below Function Perfectly Working on iOS7 or later version in Swift



                                                          func DeviceName()-> String {

                                                          var myDeviceName : String = String()

                                                          var systemInfo = [UInt8](count: sizeof(utsname), repeatedValue: 0)

                                                          let model = systemInfo.withUnsafeMutableBufferPointer { (inout body: UnsafeMutableBufferPointer<UInt8>) -> String? in

                                                          if uname(UnsafeMutablePointer(body.baseAddress)) != 0 {
                                                          return nil
                                                          }

                                                          return String.fromCString(UnsafePointer(body.baseAddress.advancedBy(Int(_SYS_NAMELEN * 4))))
                                                          }

                                                          let deviceNamesByCode : [String: String] = ["iPod1,1":"iPod Touch 1",
                                                          "iPod2,1":"iPod Touch 2",
                                                          "iPod3,1":"iPod Touch 3",
                                                          "iPod4,1":"iPod Touch 4",
                                                          "iPod5,1":"iPod Touch 5",
                                                          "iPod7,1":"iPod Touch 6",
                                                          "iPhone1,1":"iPhone",
                                                          "iPhone1,2":"iPhone ",
                                                          "iPhone2,1":"iPhone ",
                                                          "iPhone3,1":"iPhone 4",
                                                          "iPhone3,2":"iPhone 4",
                                                          "iPhone3,3":"iPhone 4",
                                                          "iPhone4,1":"iPhone 4s",
                                                          "iPhone5,1":"iPhone 5",
                                                          "iPhone5,2":"iPhone 5",
                                                          "iPhone5,3":"iPhone 5c",
                                                          "iPhone5,4":"iPhone 5c",
                                                          "iPhone6,1":"iPhone 5s",
                                                          "iPhone6,2":"iPhone 5s",
                                                          "iPhone7,2":"iPhone 6",
                                                          "iPhone7,1":"iPhone 6 Plus",
                                                          "iPhone8,1":"iPhone 6s",
                                                          "iPhone8,2":"iPhone 6s Plus",
                                                          "iPhone8,4":"iPhone SE",
                                                          "iPad2,1":"iPad 2",
                                                          "iPad2,2":"iPad 2",
                                                          "iPad2,3":"iPad 2",
                                                          "iPad2,4":"iPad 2",
                                                          "iPad3,1":"iPad 3",
                                                          "iPad3,2":"iPad 3",
                                                          "iPad3,3":"iPad 3",
                                                          "iPad3,4":"iPad 4",
                                                          "iPad3,5":"iPad 4",
                                                          "iPad3,6":"iPad 4",
                                                          "iPad4,1":"iPad Air",
                                                          "iPad4,2":"iPad Air",
                                                          "iPad4,3":"iPad Air",
                                                          "iPad5,3":"iPad Air 2",
                                                          "iPad5,4":"iPad Air 2",
                                                          "iPad2,5":"iPad Mini",
                                                          "iPad2,6":"iPad Mini",
                                                          "iPad2,7":"iPad Mini",
                                                          "iPad4,4":"iPad Mini 2",
                                                          "iPad4,5":"iPad Mini 2",
                                                          "iPad4,6":"iPad Mini 2",
                                                          "iPad4,7":"iPad Mini 3",
                                                          "iPad4,8":"iPad Mini 3",
                                                          "iPad4,9":"iPad Mini 3",
                                                          "iPad5,1":"iPad Mini 4",
                                                          "iPad5,2":"iPad Mini 4",
                                                          "iPad6,3":"iPad Pro",
                                                          "iPad6,4":"iPad Pro",
                                                          "iPad6,7":"iPad Pro",
                                                          "iPad6,8":"iPad Pro",
                                                          "AppleTV5,3":"Apple TV",
                                                          "i386":"Simulator",
                                                          "x86_64":"Simulator"

                                                          ]

                                                          if model!.characters.count > 0 {
                                                          myDeviceName = deviceNamesByCode[model!]!
                                                          }else{
                                                          myDeviceName = UIDevice.currentDevice().model
                                                          }

                                                          print("myDeviceName==(myDeviceName)")
                                                          return myDeviceName

                                                          }





                                                          share|improve this answer























                                                          • Thanks for the update! And do please update for new devices too.
                                                            – Sohil R. Memon
                                                            Jun 27 '16 at 5:58













                                                          up vote
                                                          3
                                                          down vote










                                                          up vote
                                                          3
                                                          down vote









                                                          Below Function Perfectly Working on iOS7 or later version in Swift



                                                          func DeviceName()-> String {

                                                          var myDeviceName : String = String()

                                                          var systemInfo = [UInt8](count: sizeof(utsname), repeatedValue: 0)

                                                          let model = systemInfo.withUnsafeMutableBufferPointer { (inout body: UnsafeMutableBufferPointer<UInt8>) -> String? in

                                                          if uname(UnsafeMutablePointer(body.baseAddress)) != 0 {
                                                          return nil
                                                          }

                                                          return String.fromCString(UnsafePointer(body.baseAddress.advancedBy(Int(_SYS_NAMELEN * 4))))
                                                          }

                                                          let deviceNamesByCode : [String: String] = ["iPod1,1":"iPod Touch 1",
                                                          "iPod2,1":"iPod Touch 2",
                                                          "iPod3,1":"iPod Touch 3",
                                                          "iPod4,1":"iPod Touch 4",
                                                          "iPod5,1":"iPod Touch 5",
                                                          "iPod7,1":"iPod Touch 6",
                                                          "iPhone1,1":"iPhone",
                                                          "iPhone1,2":"iPhone ",
                                                          "iPhone2,1":"iPhone ",
                                                          "iPhone3,1":"iPhone 4",
                                                          "iPhone3,2":"iPhone 4",
                                                          "iPhone3,3":"iPhone 4",
                                                          "iPhone4,1":"iPhone 4s",
                                                          "iPhone5,1":"iPhone 5",
                                                          "iPhone5,2":"iPhone 5",
                                                          "iPhone5,3":"iPhone 5c",
                                                          "iPhone5,4":"iPhone 5c",
                                                          "iPhone6,1":"iPhone 5s",
                                                          "iPhone6,2":"iPhone 5s",
                                                          "iPhone7,2":"iPhone 6",
                                                          "iPhone7,1":"iPhone 6 Plus",
                                                          "iPhone8,1":"iPhone 6s",
                                                          "iPhone8,2":"iPhone 6s Plus",
                                                          "iPhone8,4":"iPhone SE",
                                                          "iPad2,1":"iPad 2",
                                                          "iPad2,2":"iPad 2",
                                                          "iPad2,3":"iPad 2",
                                                          "iPad2,4":"iPad 2",
                                                          "iPad3,1":"iPad 3",
                                                          "iPad3,2":"iPad 3",
                                                          "iPad3,3":"iPad 3",
                                                          "iPad3,4":"iPad 4",
                                                          "iPad3,5":"iPad 4",
                                                          "iPad3,6":"iPad 4",
                                                          "iPad4,1":"iPad Air",
                                                          "iPad4,2":"iPad Air",
                                                          "iPad4,3":"iPad Air",
                                                          "iPad5,3":"iPad Air 2",
                                                          "iPad5,4":"iPad Air 2",
                                                          "iPad2,5":"iPad Mini",
                                                          "iPad2,6":"iPad Mini",
                                                          "iPad2,7":"iPad Mini",
                                                          "iPad4,4":"iPad Mini 2",
                                                          "iPad4,5":"iPad Mini 2",
                                                          "iPad4,6":"iPad Mini 2",
                                                          "iPad4,7":"iPad Mini 3",
                                                          "iPad4,8":"iPad Mini 3",
                                                          "iPad4,9":"iPad Mini 3",
                                                          "iPad5,1":"iPad Mini 4",
                                                          "iPad5,2":"iPad Mini 4",
                                                          "iPad6,3":"iPad Pro",
                                                          "iPad6,4":"iPad Pro",
                                                          "iPad6,7":"iPad Pro",
                                                          "iPad6,8":"iPad Pro",
                                                          "AppleTV5,3":"Apple TV",
                                                          "i386":"Simulator",
                                                          "x86_64":"Simulator"

                                                          ]

                                                          if model!.characters.count > 0 {
                                                          myDeviceName = deviceNamesByCode[model!]!
                                                          }else{
                                                          myDeviceName = UIDevice.currentDevice().model
                                                          }

                                                          print("myDeviceName==(myDeviceName)")
                                                          return myDeviceName

                                                          }





                                                          share|improve this answer














                                                          Below Function Perfectly Working on iOS7 or later version in Swift



                                                          func DeviceName()-> String {

                                                          var myDeviceName : String = String()

                                                          var systemInfo = [UInt8](count: sizeof(utsname), repeatedValue: 0)

                                                          let model = systemInfo.withUnsafeMutableBufferPointer { (inout body: UnsafeMutableBufferPointer<UInt8>) -> String? in

                                                          if uname(UnsafeMutablePointer(body.baseAddress)) != 0 {
                                                          return nil
                                                          }

                                                          return String.fromCString(UnsafePointer(body.baseAddress.advancedBy(Int(_SYS_NAMELEN * 4))))
                                                          }

                                                          let deviceNamesByCode : [String: String] = ["iPod1,1":"iPod Touch 1",
                                                          "iPod2,1":"iPod Touch 2",
                                                          "iPod3,1":"iPod Touch 3",
                                                          "iPod4,1":"iPod Touch 4",
                                                          "iPod5,1":"iPod Touch 5",
                                                          "iPod7,1":"iPod Touch 6",
                                                          "iPhone1,1":"iPhone",
                                                          "iPhone1,2":"iPhone ",
                                                          "iPhone2,1":"iPhone ",
                                                          "iPhone3,1":"iPhone 4",
                                                          "iPhone3,2":"iPhone 4",
                                                          "iPhone3,3":"iPhone 4",
                                                          "iPhone4,1":"iPhone 4s",
                                                          "iPhone5,1":"iPhone 5",
                                                          "iPhone5,2":"iPhone 5",
                                                          "iPhone5,3":"iPhone 5c",
                                                          "iPhone5,4":"iPhone 5c",
                                                          "iPhone6,1":"iPhone 5s",
                                                          "iPhone6,2":"iPhone 5s",
                                                          "iPhone7,2":"iPhone 6",
                                                          "iPhone7,1":"iPhone 6 Plus",
                                                          "iPhone8,1":"iPhone 6s",
                                                          "iPhone8,2":"iPhone 6s Plus",
                                                          "iPhone8,4":"iPhone SE",
                                                          "iPad2,1":"iPad 2",
                                                          "iPad2,2":"iPad 2",
                                                          "iPad2,3":"iPad 2",
                                                          "iPad2,4":"iPad 2",
                                                          "iPad3,1":"iPad 3",
                                                          "iPad3,2":"iPad 3",
                                                          "iPad3,3":"iPad 3",
                                                          "iPad3,4":"iPad 4",
                                                          "iPad3,5":"iPad 4",
                                                          "iPad3,6":"iPad 4",
                                                          "iPad4,1":"iPad Air",
                                                          "iPad4,2":"iPad Air",
                                                          "iPad4,3":"iPad Air",
                                                          "iPad5,3":"iPad Air 2",
                                                          "iPad5,4":"iPad Air 2",
                                                          "iPad2,5":"iPad Mini",
                                                          "iPad2,6":"iPad Mini",
                                                          "iPad2,7":"iPad Mini",
                                                          "iPad4,4":"iPad Mini 2",
                                                          "iPad4,5":"iPad Mini 2",
                                                          "iPad4,6":"iPad Mini 2",
                                                          "iPad4,7":"iPad Mini 3",
                                                          "iPad4,8":"iPad Mini 3",
                                                          "iPad4,9":"iPad Mini 3",
                                                          "iPad5,1":"iPad Mini 4",
                                                          "iPad5,2":"iPad Mini 4",
                                                          "iPad6,3":"iPad Pro",
                                                          "iPad6,4":"iPad Pro",
                                                          "iPad6,7":"iPad Pro",
                                                          "iPad6,8":"iPad Pro",
                                                          "AppleTV5,3":"Apple TV",
                                                          "i386":"Simulator",
                                                          "x86_64":"Simulator"

                                                          ]

                                                          if model!.characters.count > 0 {
                                                          myDeviceName = deviceNamesByCode[model!]!
                                                          }else{
                                                          myDeviceName = UIDevice.currentDevice().model
                                                          }

                                                          print("myDeviceName==(myDeviceName)")
                                                          return myDeviceName

                                                          }






                                                          share|improve this answer














                                                          share|improve this answer



                                                          share|improve this answer








                                                          edited Jun 27 '16 at 5:49









                                                          Sohil R. Memon

                                                          6,54611742




                                                          6,54611742










                                                          answered May 4 '16 at 11:06









                                                          Renish Dadhaniya

                                                          8,35822143




                                                          8,35822143












                                                          • Thanks for the update! And do please update for new devices too.
                                                            – Sohil R. Memon
                                                            Jun 27 '16 at 5:58


















                                                          • Thanks for the update! And do please update for new devices too.
                                                            – Sohil R. Memon
                                                            Jun 27 '16 at 5:58
















                                                          Thanks for the update! And do please update for new devices too.
                                                          – Sohil R. Memon
                                                          Jun 27 '16 at 5:58




                                                          Thanks for the update! And do please update for new devices too.
                                                          – Sohil R. Memon
                                                          Jun 27 '16 at 5:58










                                                          up vote
                                                          0
                                                          down vote













                                                          If you have a plist of devices (eg maintained by @Tib above in https://stackoverflow.com/a/17655825/849616) to handle it if Swift 3 you'd use:



                                                          extension UIDevice {
                                                          /// Fetches the information about the name of the device.
                                                          ///
                                                          /// - Returns: Should return meaningful device name, if not found will return device system code.
                                                          public static func modelName() -> String {
                                                          let physicalName = deviceSystemCode()
                                                          if let deviceTypes = deviceTypes(), let modelName = deviceTypes[physicalName] as? String {
                                                          return modelName
                                                          }
                                                          return physicalName
                                                          }
                                                          }

                                                          private extension UIDevice {
                                                          /// Fetches from system the code of the device
                                                          static func deviceSystemCode() -> String {
                                                          var systemInfo = utsname()
                                                          uname(&systemInfo)
                                                          let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                          let identifier = machineMirror.children.reduce("") { identifier, element in
                                                          guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                          return identifier + String(UnicodeScalar(UInt8(value)))
                                                          }
                                                          return identifier
                                                          }

                                                          /// Fetches the plist entries from plist maintained in https://stackoverflow.com/a/17655825/849616
                                                          ///
                                                          /// - Returns: A dictionary with pairs of deviceSystemCode <-> meaningfulDeviceName.
                                                          static func deviceTypes() -> NSDictionary? {
                                                          if let fileUrl = Bundle.main.url(forResource: "your plist name", withExtension: "plist"),
                                                          let configurationDictionary = NSDictionary(contentsOf: fileUrl) {
                                                          return configurationDictionary
                                                          }
                                                          return nil
                                                          }
                                                          }


                                                          Later you can call it using UIDevice.modelName().



                                                          Additional credits go to @Tib (for plist), @Aniruddh Joshi (for deviceSystemCode() function).






                                                          share|improve this answer

























                                                            up vote
                                                            0
                                                            down vote













                                                            If you have a plist of devices (eg maintained by @Tib above in https://stackoverflow.com/a/17655825/849616) to handle it if Swift 3 you'd use:



                                                            extension UIDevice {
                                                            /// Fetches the information about the name of the device.
                                                            ///
                                                            /// - Returns: Should return meaningful device name, if not found will return device system code.
                                                            public static func modelName() -> String {
                                                            let physicalName = deviceSystemCode()
                                                            if let deviceTypes = deviceTypes(), let modelName = deviceTypes[physicalName] as? String {
                                                            return modelName
                                                            }
                                                            return physicalName
                                                            }
                                                            }

                                                            private extension UIDevice {
                                                            /// Fetches from system the code of the device
                                                            static func deviceSystemCode() -> String {
                                                            var systemInfo = utsname()
                                                            uname(&systemInfo)
                                                            let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                            let identifier = machineMirror.children.reduce("") { identifier, element in
                                                            guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                            return identifier + String(UnicodeScalar(UInt8(value)))
                                                            }
                                                            return identifier
                                                            }

                                                            /// Fetches the plist entries from plist maintained in https://stackoverflow.com/a/17655825/849616
                                                            ///
                                                            /// - Returns: A dictionary with pairs of deviceSystemCode <-> meaningfulDeviceName.
                                                            static func deviceTypes() -> NSDictionary? {
                                                            if let fileUrl = Bundle.main.url(forResource: "your plist name", withExtension: "plist"),
                                                            let configurationDictionary = NSDictionary(contentsOf: fileUrl) {
                                                            return configurationDictionary
                                                            }
                                                            return nil
                                                            }
                                                            }


                                                            Later you can call it using UIDevice.modelName().



                                                            Additional credits go to @Tib (for plist), @Aniruddh Joshi (for deviceSystemCode() function).






                                                            share|improve this answer























                                                              up vote
                                                              0
                                                              down vote










                                                              up vote
                                                              0
                                                              down vote









                                                              If you have a plist of devices (eg maintained by @Tib above in https://stackoverflow.com/a/17655825/849616) to handle it if Swift 3 you'd use:



                                                              extension UIDevice {
                                                              /// Fetches the information about the name of the device.
                                                              ///
                                                              /// - Returns: Should return meaningful device name, if not found will return device system code.
                                                              public static func modelName() -> String {
                                                              let physicalName = deviceSystemCode()
                                                              if let deviceTypes = deviceTypes(), let modelName = deviceTypes[physicalName] as? String {
                                                              return modelName
                                                              }
                                                              return physicalName
                                                              }
                                                              }

                                                              private extension UIDevice {
                                                              /// Fetches from system the code of the device
                                                              static func deviceSystemCode() -> String {
                                                              var systemInfo = utsname()
                                                              uname(&systemInfo)
                                                              let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                              let identifier = machineMirror.children.reduce("") { identifier, element in
                                                              guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                              return identifier + String(UnicodeScalar(UInt8(value)))
                                                              }
                                                              return identifier
                                                              }

                                                              /// Fetches the plist entries from plist maintained in https://stackoverflow.com/a/17655825/849616
                                                              ///
                                                              /// - Returns: A dictionary with pairs of deviceSystemCode <-> meaningfulDeviceName.
                                                              static func deviceTypes() -> NSDictionary? {
                                                              if let fileUrl = Bundle.main.url(forResource: "your plist name", withExtension: "plist"),
                                                              let configurationDictionary = NSDictionary(contentsOf: fileUrl) {
                                                              return configurationDictionary
                                                              }
                                                              return nil
                                                              }
                                                              }


                                                              Later you can call it using UIDevice.modelName().



                                                              Additional credits go to @Tib (for plist), @Aniruddh Joshi (for deviceSystemCode() function).






                                                              share|improve this answer












                                                              If you have a plist of devices (eg maintained by @Tib above in https://stackoverflow.com/a/17655825/849616) to handle it if Swift 3 you'd use:



                                                              extension UIDevice {
                                                              /// Fetches the information about the name of the device.
                                                              ///
                                                              /// - Returns: Should return meaningful device name, if not found will return device system code.
                                                              public static func modelName() -> String {
                                                              let physicalName = deviceSystemCode()
                                                              if let deviceTypes = deviceTypes(), let modelName = deviceTypes[physicalName] as? String {
                                                              return modelName
                                                              }
                                                              return physicalName
                                                              }
                                                              }

                                                              private extension UIDevice {
                                                              /// Fetches from system the code of the device
                                                              static func deviceSystemCode() -> String {
                                                              var systemInfo = utsname()
                                                              uname(&systemInfo)
                                                              let machineMirror = Mirror(reflecting: systemInfo.machine)
                                                              let identifier = machineMirror.children.reduce("") { identifier, element in
                                                              guard let value = element.value as? Int8, value != 0 else { return identifier }
                                                              return identifier + String(UnicodeScalar(UInt8(value)))
                                                              }
                                                              return identifier
                                                              }

                                                              /// Fetches the plist entries from plist maintained in https://stackoverflow.com/a/17655825/849616
                                                              ///
                                                              /// - Returns: A dictionary with pairs of deviceSystemCode <-> meaningfulDeviceName.
                                                              static func deviceTypes() -> NSDictionary? {
                                                              if let fileUrl = Bundle.main.url(forResource: "your plist name", withExtension: "plist"),
                                                              let configurationDictionary = NSDictionary(contentsOf: fileUrl) {
                                                              return configurationDictionary
                                                              }
                                                              return nil
                                                              }
                                                              }


                                                              Later you can call it using UIDevice.modelName().



                                                              Additional credits go to @Tib (for plist), @Aniruddh Joshi (for deviceSystemCode() function).







                                                              share|improve this answer












                                                              share|improve this answer



                                                              share|improve this answer










                                                              answered Nov 15 '17 at 14:12









                                                              Vive

                                                              5,84853785




                                                              5,84853785






















                                                                  up vote
                                                                  0
                                                                  down vote













                                                                  //
                                                                  // UIDevice+Hardware.h
                                                                  // gauravds
                                                                  //

                                                                  #import <UIKit/UIKit.h>

                                                                  @interface UIDevice (Hardware)

                                                                  - (NSString *)modelIdentifier;
                                                                  - (NSString *)modelName;

                                                                  @end


                                                                  Why not create a category. Don't use malloc method security leak issue. Use safe functions.



                                                                  NSLog(@"%@ %@", [[UIDevice currentDevice] modelName], [[UIDevice currentDevice] modelIdentifier]);


                                                                  See the implentations



                                                                  //
                                                                  // UIDevice+Hardware.m
                                                                  // gauravds
                                                                  //

                                                                  #import "UIDevice+Hardware.h"
                                                                  #import <sys/utsname.h>

                                                                  @implementation UIDevice (Hardware)

                                                                  - (NSString *)modelIdentifier {
                                                                  struct utsname systemInfo;
                                                                  uname(&systemInfo);
                                                                  return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                                                  }

                                                                  - (NSString *)modelName {
                                                                  return [self modelNameForModelIdentifier:[self modelIdentifier]];
                                                                  }

                                                                  - (NSString *)modelNameForModelIdentifier:(NSString *)modelIdentifier {
                                                                  // iPhone http://theiphonewiki.com/wiki/IPhone

                                                                  if ([modelIdentifier isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; // US (Verizon), China, Japan
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; // US (Verizon), China, Japan
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,3"]) return @"iPhone X"; // US (Verizon), China, Japan
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; // AT&T, Global
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; // AT&T, Global
                                                                  if ([modelIdentifier isEqualToString:@"iPhone10,6"]) return @"iPhone X"; // AT&T, Global

                                                                  // iPad http://theiphonewiki.com/wiki/IPad

                                                                  if ([modelIdentifier isEqualToString:@"iPad1,1"]) return @"iPad 1G";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,4"]) return @"iPad 2 (Rev A)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,1"]) return @"iPad 3 (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,4"]) return @"iPad 4 (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad6,11"]) return @"iPad (5th gen) (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad6,12"]) return @"iPad (5th gen) (Cellular)";

                                                                  if ([modelIdentifier isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";

                                                                  // iPad Mini http://theiphonewiki.com/wiki/IPad_mini

                                                                  if ([modelIdentifier isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (GSM)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (Global)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,6"]) return @"iPad mini 2G (Cellular)"; // TD-LTE model see https://support.apple.com/en-us/HT201471#iPad-mini2
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,7"]) return @"iPad mini 3G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,8"]) return @"iPad mini 3G (Cellular)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad4,9"]) return @"iPad mini 3G (Cellular)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad5,1"]) return @"iPad mini 4G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad5,2"]) return @"iPad mini 4G (Cellular)";

                                                                  // iPad Pro https://www.theiphonewiki.com/wiki/IPad_Pro

                                                                  if ([modelIdentifier isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=9938&c=apple_ipad_pro_9.7-inch_a1673_wifi_32gb_apple_ipad_6,3
                                                                  if ([modelIdentifier isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=9981&c=apple_ipad_pro_9.7-inch_a1675_td-lte_32gb_apple_ipad_6,4
                                                                  if ([modelIdentifier isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=8960&c=apple_ipad_pro_wifi_a1584_128gb
                                                                  if ([modelIdentifier isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=8965&c=apple_ipad_pro_td-lte_a1652_32gb_apple_ipad_6,8
                                                                  if ([modelIdentifier isEqualToString:@"iPad 7,1"]) return @"iPad Pro (12.9 inch) 2G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad 7,2"]) return @"iPad Pro (12.9 inch) 2G (Cellular)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad 7,3"]) return @"iPad Pro (10.5 inch) 1G (Wi-Fi)";
                                                                  if ([modelIdentifier isEqualToString:@"iPad 7,4"]) return @"iPad Pro (10.5 inch) 1G (Cellular)";

                                                                  // iPod http://theiphonewiki.com/wiki/IPod

                                                                  if ([modelIdentifier isEqualToString:@"iPod1,1"]) return @"iPod touch 1G";
                                                                  if ([modelIdentifier isEqualToString:@"iPod2,1"]) return @"iPod touch 2G";
                                                                  if ([modelIdentifier isEqualToString:@"iPod3,1"]) return @"iPod touch 3G";
                                                                  if ([modelIdentifier isEqualToString:@"iPod4,1"]) return @"iPod touch 4G";
                                                                  if ([modelIdentifier isEqualToString:@"iPod5,1"]) return @"iPod touch 5G";
                                                                  if ([modelIdentifier isEqualToString:@"iPod7,1"]) return @"iPod touch 6G"; // as 6,1 was never released 7,1 is actually 6th generation

                                                                  // Apple TV https://www.theiphonewiki.com/wiki/Apple_TV

                                                                  if ([modelIdentifier isEqualToString:@"AppleTV1,1"]) return @"Apple TV 1G";
                                                                  if ([modelIdentifier isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G";
                                                                  if ([modelIdentifier isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G";
                                                                  if ([modelIdentifier isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; // small, incremental update over 3,1
                                                                  if ([modelIdentifier isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // as 4,1 was never released, 5,1 is actually 4th generation

                                                                  // Simulator
                                                                  if ([modelIdentifier hasSuffix:@"86"] || [modelIdentifier isEqual:@"x86_64"])
                                                                  {
                                                                  BOOL smallerScreen = ([[UIScreen mainScreen] bounds].size.width < 768.0);
                                                                  return (smallerScreen ? @"iPhone Simulator" : @"iPad Simulator");
                                                                  }

                                                                  return modelIdentifier;
                                                                  }

                                                                  @end





                                                                  share|improve this answer

























                                                                    up vote
                                                                    0
                                                                    down vote













                                                                    //
                                                                    // UIDevice+Hardware.h
                                                                    // gauravds
                                                                    //

                                                                    #import <UIKit/UIKit.h>

                                                                    @interface UIDevice (Hardware)

                                                                    - (NSString *)modelIdentifier;
                                                                    - (NSString *)modelName;

                                                                    @end


                                                                    Why not create a category. Don't use malloc method security leak issue. Use safe functions.



                                                                    NSLog(@"%@ %@", [[UIDevice currentDevice] modelName], [[UIDevice currentDevice] modelIdentifier]);


                                                                    See the implentations



                                                                    //
                                                                    // UIDevice+Hardware.m
                                                                    // gauravds
                                                                    //

                                                                    #import "UIDevice+Hardware.h"
                                                                    #import <sys/utsname.h>

                                                                    @implementation UIDevice (Hardware)

                                                                    - (NSString *)modelIdentifier {
                                                                    struct utsname systemInfo;
                                                                    uname(&systemInfo);
                                                                    return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                                                    }

                                                                    - (NSString *)modelName {
                                                                    return [self modelNameForModelIdentifier:[self modelIdentifier]];
                                                                    }

                                                                    - (NSString *)modelNameForModelIdentifier:(NSString *)modelIdentifier {
                                                                    // iPhone http://theiphonewiki.com/wiki/IPhone

                                                                    if ([modelIdentifier isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; // US (Verizon), China, Japan
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; // US (Verizon), China, Japan
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,3"]) return @"iPhone X"; // US (Verizon), China, Japan
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; // AT&T, Global
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; // AT&T, Global
                                                                    if ([modelIdentifier isEqualToString:@"iPhone10,6"]) return @"iPhone X"; // AT&T, Global

                                                                    // iPad http://theiphonewiki.com/wiki/IPad

                                                                    if ([modelIdentifier isEqualToString:@"iPad1,1"]) return @"iPad 1G";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,4"]) return @"iPad 2 (Rev A)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,1"]) return @"iPad 3 (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,4"]) return @"iPad 4 (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad6,11"]) return @"iPad (5th gen) (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad6,12"]) return @"iPad (5th gen) (Cellular)";

                                                                    if ([modelIdentifier isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";

                                                                    // iPad Mini http://theiphonewiki.com/wiki/IPad_mini

                                                                    if ([modelIdentifier isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (GSM)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (Global)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,6"]) return @"iPad mini 2G (Cellular)"; // TD-LTE model see https://support.apple.com/en-us/HT201471#iPad-mini2
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,7"]) return @"iPad mini 3G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,8"]) return @"iPad mini 3G (Cellular)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad4,9"]) return @"iPad mini 3G (Cellular)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad5,1"]) return @"iPad mini 4G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad5,2"]) return @"iPad mini 4G (Cellular)";

                                                                    // iPad Pro https://www.theiphonewiki.com/wiki/IPad_Pro

                                                                    if ([modelIdentifier isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=9938&c=apple_ipad_pro_9.7-inch_a1673_wifi_32gb_apple_ipad_6,3
                                                                    if ([modelIdentifier isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=9981&c=apple_ipad_pro_9.7-inch_a1675_td-lte_32gb_apple_ipad_6,4
                                                                    if ([modelIdentifier isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=8960&c=apple_ipad_pro_wifi_a1584_128gb
                                                                    if ([modelIdentifier isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=8965&c=apple_ipad_pro_td-lte_a1652_32gb_apple_ipad_6,8
                                                                    if ([modelIdentifier isEqualToString:@"iPad 7,1"]) return @"iPad Pro (12.9 inch) 2G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad 7,2"]) return @"iPad Pro (12.9 inch) 2G (Cellular)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad 7,3"]) return @"iPad Pro (10.5 inch) 1G (Wi-Fi)";
                                                                    if ([modelIdentifier isEqualToString:@"iPad 7,4"]) return @"iPad Pro (10.5 inch) 1G (Cellular)";

                                                                    // iPod http://theiphonewiki.com/wiki/IPod

                                                                    if ([modelIdentifier isEqualToString:@"iPod1,1"]) return @"iPod touch 1G";
                                                                    if ([modelIdentifier isEqualToString:@"iPod2,1"]) return @"iPod touch 2G";
                                                                    if ([modelIdentifier isEqualToString:@"iPod3,1"]) return @"iPod touch 3G";
                                                                    if ([modelIdentifier isEqualToString:@"iPod4,1"]) return @"iPod touch 4G";
                                                                    if ([modelIdentifier isEqualToString:@"iPod5,1"]) return @"iPod touch 5G";
                                                                    if ([modelIdentifier isEqualToString:@"iPod7,1"]) return @"iPod touch 6G"; // as 6,1 was never released 7,1 is actually 6th generation

                                                                    // Apple TV https://www.theiphonewiki.com/wiki/Apple_TV

                                                                    if ([modelIdentifier isEqualToString:@"AppleTV1,1"]) return @"Apple TV 1G";
                                                                    if ([modelIdentifier isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G";
                                                                    if ([modelIdentifier isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G";
                                                                    if ([modelIdentifier isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; // small, incremental update over 3,1
                                                                    if ([modelIdentifier isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // as 4,1 was never released, 5,1 is actually 4th generation

                                                                    // Simulator
                                                                    if ([modelIdentifier hasSuffix:@"86"] || [modelIdentifier isEqual:@"x86_64"])
                                                                    {
                                                                    BOOL smallerScreen = ([[UIScreen mainScreen] bounds].size.width < 768.0);
                                                                    return (smallerScreen ? @"iPhone Simulator" : @"iPad Simulator");
                                                                    }

                                                                    return modelIdentifier;
                                                                    }

                                                                    @end





                                                                    share|improve this answer























                                                                      up vote
                                                                      0
                                                                      down vote










                                                                      up vote
                                                                      0
                                                                      down vote









                                                                      //
                                                                      // UIDevice+Hardware.h
                                                                      // gauravds
                                                                      //

                                                                      #import <UIKit/UIKit.h>

                                                                      @interface UIDevice (Hardware)

                                                                      - (NSString *)modelIdentifier;
                                                                      - (NSString *)modelName;

                                                                      @end


                                                                      Why not create a category. Don't use malloc method security leak issue. Use safe functions.



                                                                      NSLog(@"%@ %@", [[UIDevice currentDevice] modelName], [[UIDevice currentDevice] modelIdentifier]);


                                                                      See the implentations



                                                                      //
                                                                      // UIDevice+Hardware.m
                                                                      // gauravds
                                                                      //

                                                                      #import "UIDevice+Hardware.h"
                                                                      #import <sys/utsname.h>

                                                                      @implementation UIDevice (Hardware)

                                                                      - (NSString *)modelIdentifier {
                                                                      struct utsname systemInfo;
                                                                      uname(&systemInfo);
                                                                      return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                                                      }

                                                                      - (NSString *)modelName {
                                                                      return [self modelNameForModelIdentifier:[self modelIdentifier]];
                                                                      }

                                                                      - (NSString *)modelNameForModelIdentifier:(NSString *)modelIdentifier {
                                                                      // iPhone http://theiphonewiki.com/wiki/IPhone

                                                                      if ([modelIdentifier isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,3"]) return @"iPhone X"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; // AT&T, Global
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; // AT&T, Global
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,6"]) return @"iPhone X"; // AT&T, Global

                                                                      // iPad http://theiphonewiki.com/wiki/IPad

                                                                      if ([modelIdentifier isEqualToString:@"iPad1,1"]) return @"iPad 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,4"]) return @"iPad 2 (Rev A)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,1"]) return @"iPad 3 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,4"]) return @"iPad 4 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,11"]) return @"iPad (5th gen) (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,12"]) return @"iPad (5th gen) (Cellular)";

                                                                      if ([modelIdentifier isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";

                                                                      // iPad Mini http://theiphonewiki.com/wiki/IPad_mini

                                                                      if ([modelIdentifier isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,6"]) return @"iPad mini 2G (Cellular)"; // TD-LTE model see https://support.apple.com/en-us/HT201471#iPad-mini2
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,7"]) return @"iPad mini 3G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,8"]) return @"iPad mini 3G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,9"]) return @"iPad mini 3G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,1"]) return @"iPad mini 4G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,2"]) return @"iPad mini 4G (Cellular)";

                                                                      // iPad Pro https://www.theiphonewiki.com/wiki/IPad_Pro

                                                                      if ([modelIdentifier isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=9938&c=apple_ipad_pro_9.7-inch_a1673_wifi_32gb_apple_ipad_6,3
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=9981&c=apple_ipad_pro_9.7-inch_a1675_td-lte_32gb_apple_ipad_6,4
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=8960&c=apple_ipad_pro_wifi_a1584_128gb
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=8965&c=apple_ipad_pro_td-lte_a1652_32gb_apple_ipad_6,8
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,1"]) return @"iPad Pro (12.9 inch) 2G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,2"]) return @"iPad Pro (12.9 inch) 2G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,3"]) return @"iPad Pro (10.5 inch) 1G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,4"]) return @"iPad Pro (10.5 inch) 1G (Cellular)";

                                                                      // iPod http://theiphonewiki.com/wiki/IPod

                                                                      if ([modelIdentifier isEqualToString:@"iPod1,1"]) return @"iPod touch 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod2,1"]) return @"iPod touch 2G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod3,1"]) return @"iPod touch 3G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod4,1"]) return @"iPod touch 4G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod5,1"]) return @"iPod touch 5G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod7,1"]) return @"iPod touch 6G"; // as 6,1 was never released 7,1 is actually 6th generation

                                                                      // Apple TV https://www.theiphonewiki.com/wiki/Apple_TV

                                                                      if ([modelIdentifier isEqualToString:@"AppleTV1,1"]) return @"Apple TV 1G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; // small, incremental update over 3,1
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // as 4,1 was never released, 5,1 is actually 4th generation

                                                                      // Simulator
                                                                      if ([modelIdentifier hasSuffix:@"86"] || [modelIdentifier isEqual:@"x86_64"])
                                                                      {
                                                                      BOOL smallerScreen = ([[UIScreen mainScreen] bounds].size.width < 768.0);
                                                                      return (smallerScreen ? @"iPhone Simulator" : @"iPad Simulator");
                                                                      }

                                                                      return modelIdentifier;
                                                                      }

                                                                      @end





                                                                      share|improve this answer












                                                                      //
                                                                      // UIDevice+Hardware.h
                                                                      // gauravds
                                                                      //

                                                                      #import <UIKit/UIKit.h>

                                                                      @interface UIDevice (Hardware)

                                                                      - (NSString *)modelIdentifier;
                                                                      - (NSString *)modelName;

                                                                      @end


                                                                      Why not create a category. Don't use malloc method security leak issue. Use safe functions.



                                                                      NSLog(@"%@ %@", [[UIDevice currentDevice] modelName], [[UIDevice currentDevice] modelIdentifier]);


                                                                      See the implentations



                                                                      //
                                                                      // UIDevice+Hardware.m
                                                                      // gauravds
                                                                      //

                                                                      #import "UIDevice+Hardware.h"
                                                                      #import <sys/utsname.h>

                                                                      @implementation UIDevice (Hardware)

                                                                      - (NSString *)modelIdentifier {
                                                                      struct utsname systemInfo;
                                                                      uname(&systemInfo);
                                                                      return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
                                                                      }

                                                                      - (NSString *)modelName {
                                                                      return [self modelNameForModelIdentifier:[self modelIdentifier]];
                                                                      }

                                                                      - (NSString *)modelNameForModelIdentifier:(NSString *)modelIdentifier {
                                                                      // iPhone http://theiphonewiki.com/wiki/IPhone

                                                                      if ([modelIdentifier isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,1"]) return @"iPhone 8"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,3"]) return @"iPhone X"; // US (Verizon), China, Japan
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,4"]) return @"iPhone 8"; // AT&T, Global
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus"; // AT&T, Global
                                                                      if ([modelIdentifier isEqualToString:@"iPhone10,6"]) return @"iPhone X"; // AT&T, Global

                                                                      // iPad http://theiphonewiki.com/wiki/IPad

                                                                      if ([modelIdentifier isEqualToString:@"iPad1,1"]) return @"iPad 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,4"]) return @"iPad 2 (Rev A)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,1"]) return @"iPad 3 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,3"]) return @"iPad 3 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,4"]) return @"iPad 4 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad3,6"]) return @"iPad 4 (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,11"]) return @"iPad (5th gen) (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,12"]) return @"iPad (5th gen) (Cellular)";

                                                                      if ([modelIdentifier isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,3"]) return @"iPad Air 2 (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";

                                                                      // iPad Mini http://theiphonewiki.com/wiki/IPad_mini

                                                                      if ([modelIdentifier isEqualToString:@"iPad2,5"]) return @"iPad mini 1G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,6"]) return @"iPad mini 1G (GSM)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad2,7"]) return @"iPad mini 1G (Global)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,6"]) return @"iPad mini 2G (Cellular)"; // TD-LTE model see https://support.apple.com/en-us/HT201471#iPad-mini2
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,7"]) return @"iPad mini 3G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,8"]) return @"iPad mini 3G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad4,9"]) return @"iPad mini 3G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,1"]) return @"iPad mini 4G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad5,2"]) return @"iPad mini 4G (Cellular)";

                                                                      // iPad Pro https://www.theiphonewiki.com/wiki/IPad_Pro

                                                                      if ([modelIdentifier isEqualToString:@"iPad6,3"]) return @"iPad Pro (9.7 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=9938&c=apple_ipad_pro_9.7-inch_a1673_wifi_32gb_apple_ipad_6,3
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,4"]) return @"iPad Pro (9.7 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=9981&c=apple_ipad_pro_9.7-inch_a1675_td-lte_32gb_apple_ipad_6,4
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,7"]) return @"iPad Pro (12.9 inch) 1G (Wi-Fi)"; // http://pdadb.net/index.php?m=specs&id=8960&c=apple_ipad_pro_wifi_a1584_128gb
                                                                      if ([modelIdentifier isEqualToString:@"iPad6,8"]) return @"iPad Pro (12.9 inch) 1G (Cellular)"; // http://pdadb.net/index.php?m=specs&id=8965&c=apple_ipad_pro_td-lte_a1652_32gb_apple_ipad_6,8
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,1"]) return @"iPad Pro (12.9 inch) 2G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,2"]) return @"iPad Pro (12.9 inch) 2G (Cellular)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,3"]) return @"iPad Pro (10.5 inch) 1G (Wi-Fi)";
                                                                      if ([modelIdentifier isEqualToString:@"iPad 7,4"]) return @"iPad Pro (10.5 inch) 1G (Cellular)";

                                                                      // iPod http://theiphonewiki.com/wiki/IPod

                                                                      if ([modelIdentifier isEqualToString:@"iPod1,1"]) return @"iPod touch 1G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod2,1"]) return @"iPod touch 2G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod3,1"]) return @"iPod touch 3G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod4,1"]) return @"iPod touch 4G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod5,1"]) return @"iPod touch 5G";
                                                                      if ([modelIdentifier isEqualToString:@"iPod7,1"]) return @"iPod touch 6G"; // as 6,1 was never released 7,1 is actually 6th generation

                                                                      // Apple TV https://www.theiphonewiki.com/wiki/Apple_TV

                                                                      if ([modelIdentifier isEqualToString:@"AppleTV1,1"]) return @"Apple TV 1G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3G";
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3G"; // small, incremental update over 3,1
                                                                      if ([modelIdentifier isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4G"; // as 4,1 was never released, 5,1 is actually 4th generation

                                                                      // Simulator
                                                                      if ([modelIdentifier hasSuffix:@"86"] || [modelIdentifier isEqual:@"x86_64"])
                                                                      {
                                                                      BOOL smallerScreen = ([[UIScreen mainScreen] bounds].size.width < 768.0);
                                                                      return (smallerScreen ? @"iPhone Simulator" : @"iPad Simulator");
                                                                      }

                                                                      return modelIdentifier;
                                                                      }

                                                                      @end






                                                                      share|improve this answer












                                                                      share|improve this answer



                                                                      share|improve this answer










                                                                      answered May 11 at 6:42









                                                                      dayitv89

                                                                      2,13422141




                                                                      2,13422141






















                                                                          up vote
                                                                          0
                                                                          down vote













                                                                          Swift 4 or later



                                                                          extension UIDevice {
                                                                          var modelName: String {
                                                                          if let modelName = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] { return modelName }
                                                                          var info = utsname()
                                                                          uname(&info)
                                                                          return String(
                                                                          Mirror(reflecting: info.machine).children.compactMap { // for Swift versions below 4.1 use flatMap
                                                                          guard let value = $0.value as? Int8,
                                                                          case let unicode = UnicodeScalar(UInt8(value)),
                                                                          32...126 ~= unicode.value else { return nil }
                                                                          return Character(unicode)
                                                                          })
                                                                          }
                                                                          }





                                                                          share|improve this answer

























                                                                            up vote
                                                                            0
                                                                            down vote













                                                                            Swift 4 or later



                                                                            extension UIDevice {
                                                                            var modelName: String {
                                                                            if let modelName = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] { return modelName }
                                                                            var info = utsname()
                                                                            uname(&info)
                                                                            return String(
                                                                            Mirror(reflecting: info.machine).children.compactMap { // for Swift versions below 4.1 use flatMap
                                                                            guard let value = $0.value as? Int8,
                                                                            case let unicode = UnicodeScalar(UInt8(value)),
                                                                            32...126 ~= unicode.value else { return nil }
                                                                            return Character(unicode)
                                                                            })
                                                                            }
                                                                            }





                                                                            share|improve this answer























                                                                              up vote
                                                                              0
                                                                              down vote










                                                                              up vote
                                                                              0
                                                                              down vote









                                                                              Swift 4 or later



                                                                              extension UIDevice {
                                                                              var modelName: String {
                                                                              if let modelName = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] { return modelName }
                                                                              var info = utsname()
                                                                              uname(&info)
                                                                              return String(
                                                                              Mirror(reflecting: info.machine).children.compactMap { // for Swift versions below 4.1 use flatMap
                                                                              guard let value = $0.value as? Int8,
                                                                              case let unicode = UnicodeScalar(UInt8(value)),
                                                                              32...126 ~= unicode.value else { return nil }
                                                                              return Character(unicode)
                                                                              })
                                                                              }
                                                                              }





                                                                              share|improve this answer












                                                                              Swift 4 or later



                                                                              extension UIDevice {
                                                                              var modelName: String {
                                                                              if let modelName = ProcessInfo.processInfo.environment["SIMULATOR_MODEL_IDENTIFIER"] { return modelName }
                                                                              var info = utsname()
                                                                              uname(&info)
                                                                              return String(
                                                                              Mirror(reflecting: info.machine).children.compactMap { // for Swift versions below 4.1 use flatMap
                                                                              guard let value = $0.value as? Int8,
                                                                              case let unicode = UnicodeScalar(UInt8(value)),
                                                                              32...126 ~= unicode.value else { return nil }
                                                                              return Character(unicode)
                                                                              })
                                                                              }
                                                                              }






                                                                              share|improve this answer












                                                                              share|improve this answer



                                                                              share|improve this answer










                                                                              answered Sep 4 at 23:06









                                                                              Leo Dabus

                                                                              127k29258333




                                                                              127k29258333






















                                                                                  up vote
                                                                                  -2
                                                                                  down vote













                                                                                  For save time of others.
                                                                                  Because accepted, must voted answer propose library that uses private API and my app was rejected because of uidevice-extension just yesterday!
                                                                                  I am switching to GBDeviceInfo library, installed as pod as well, for now it looks nice, maintained and updated to latest devices.






                                                                                  share|improve this answer





















                                                                                  • wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                    – Renetik
                                                                                    Aug 30 at 3:43















                                                                                  up vote
                                                                                  -2
                                                                                  down vote













                                                                                  For save time of others.
                                                                                  Because accepted, must voted answer propose library that uses private API and my app was rejected because of uidevice-extension just yesterday!
                                                                                  I am switching to GBDeviceInfo library, installed as pod as well, for now it looks nice, maintained and updated to latest devices.






                                                                                  share|improve this answer





















                                                                                  • wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                    – Renetik
                                                                                    Aug 30 at 3:43













                                                                                  up vote
                                                                                  -2
                                                                                  down vote










                                                                                  up vote
                                                                                  -2
                                                                                  down vote









                                                                                  For save time of others.
                                                                                  Because accepted, must voted answer propose library that uses private API and my app was rejected because of uidevice-extension just yesterday!
                                                                                  I am switching to GBDeviceInfo library, installed as pod as well, for now it looks nice, maintained and updated to latest devices.






                                                                                  share|improve this answer












                                                                                  For save time of others.
                                                                                  Because accepted, must voted answer propose library that uses private API and my app was rejected because of uidevice-extension just yesterday!
                                                                                  I am switching to GBDeviceInfo library, installed as pod as well, for now it looks nice, maintained and updated to latest devices.







                                                                                  share|improve this answer












                                                                                  share|improve this answer



                                                                                  share|improve this answer










                                                                                  answered Aug 3 at 16:34









                                                                                  Renetik

                                                                                  1,9132135




                                                                                  1,9132135












                                                                                  • wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                    – Renetik
                                                                                    Aug 30 at 3:43


















                                                                                  • wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                    – Renetik
                                                                                    Aug 30 at 3:43
















                                                                                  wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                  – Renetik
                                                                                  Aug 30 at 3:43




                                                                                  wtf ? I would like to know why someone downvote use-full answer, I informed people that accepted answer is referring to this library github.com/erica/uidevice-extension , and that library is using private API and my application was rejected because of THIS library , I had to remove it to be approved by Apple again.
                                                                                  – Renetik
                                                                                  Aug 30 at 3:43





                                                                                  protected by Community Mar 27 '15 at 11:35



                                                                                  Thank you for your interest in this question.
                                                                                  Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                                                                  Would you like to answer one of these unanswered questions instead?



                                                                                  這個網誌中的熱門文章

                                                                                  Tangent Lines Diagram Along Smooth Curve

                                                                                  Yusuf al-Mu'taman ibn Hud

                                                                                  Zucchini