How to programmatically differentiate between iphone 4 and iphone 4S?
This is much simpler one. SIMPLE ENOUGH FOR JUST COPY & PASTE
Also, I've included matching model name for machine name.
//MARK: Required import#import <sys/utsname.h>+ (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": @"iPhone Simulator", @"x86_64": @"iPad 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)", @"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;}
Here is a common method of retriving the device model. There are no NS methods for this, so you gotta use c
#include <sys/types.h>#include <sys/sysctl.h>- (NSString *)machine { NSString *machine; size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *name = malloc(size); sysctlbyname("hw.machine", name, &size, NULL, 0); machine = [NSString stringWithUTF8String:name]; free(name); return machine;}
Update a list of devices: In future will be updated with iPad 4.+ (NSString*)deviceModelName {/* @"i386" on the simulator @"x86_64" on the simulator @"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 @"iPod5,1" on iPod Touch Fourth Generation @"iPhone1,1" on iPhone @"iPhone1,2" on iPhone 3G @"iPhone2,1" on iPhone 3GS @"iPad1,1" on iPad @"iPad2,1" on iPad 2 @"iPad2,5" on iPad mini 1 @"iPad3,1" on iPad 3 @"iPhone3,1" on iPhone 4 @"iPhone4,1" on iPhone 4S @"iPhone5,1" on iPhone 5 */struct utsname systemInfo;uname(&systemInfo);NSString *modelName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];if([modelName isEqualToString:@"i386"] || [modelName isEqualToString:@"x86_64"]) { modelName = @"iPhone Simulator";}else if([modelName isEqualToString:@"iPhone1,1"]) { modelName = @"iPhone";}else if([modelName isEqualToString:@"iPhone1,2"]) { modelName = @"iPhone 3G";}else if([modelName isEqualToString:@"iPhone2,1"]) { modelName = @"iPhone 3GS";}else if([modelName isEqualToString:@"iPhone3,1"]) { modelName = @"iPhone 4";}else if([modelName isEqualToString:@"iPhone4,1"]) { modelName = @"iPhone 4S";}else if([modelName isEqualToString:@"iPhone5,1"]) { modelName = @"iPhone 5";}else if([modelName isEqualToString:@"iPod1,1"]) { modelName = @"iPod 1st Gen";}else if([modelName isEqualToString:@"iPod2,1"]) { modelName = @"iPod 2nd Gen";}else if([modelName isEqualToString:@"iPod3,1"]) { modelName = @"iPod 3rd Gen";}else if([modelName isEqualToString:@"iPod4,1"]) { modelName = @"iPod 4th Gen";}else if([modelName isEqualToString:@"iPod5,1"]) { modelName = @"iPod 5th Gen";}else if([modelName isEqualToString:@"iPad1,1"]) { modelName = @"iPad";}else if([modelName isEqualToString:@"iPad2,1"]) { modelName = @"iPad 2(WiFi)";}else if([modelName isEqualToString:@"iPad2,2"]) { modelName = @"iPad 2(GSM)";}else if([modelName isEqualToString:@"iPad2,3"]) { modelName = @"iPad 2(CDMA)";}else if([modelName isEqualToString:@"iPad2,4"]) { modelName = @"iPad 2(WiFi + New Chip)";}else if([modelName isEqualToString:@"iPad2,5"]) { modelName = @"iPad mini (WiFi)";}else if([modelName isEqualToString:@"iPad2,6"]) { modelName = @"iPad mini (GSM)";}else if([modelName isEqualToString:@"iPad3,1"]) { modelName = @"iPad 3(WiFi)";}else if([modelName isEqualToString:@"iPad3,2"]) { modelName = @"iPad 3(GSM)";}else if([modelName isEqualToString:@"iPad3,3"]) { modelName = @"iPad 3(CDMA)";}return modelName;
}