How to programmatically differentiate between iphone 4 and iphone 4S? How to programmatically differentiate between iphone 4 and iphone 4S? ios ios

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;

}