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
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