如果新版本发布,你将使用上一个已知设备的标识符来进行识别。
#include <sys/types.h>
#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 *sDeviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
free(model);
if ([sDeviceModel isEqual:@"i386"]) return @"Simulator";
if ([sDeviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G";
if ([sDeviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G";
if ([sDeviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS";
if ([sDeviceModel isEqual:@"iPhone3,1"]) return @"iPhone4 AT&T";
if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone4 Other";
if ([sDeviceModel isEqual:@"iPhone3,3"]) return @"iPhone4";
if ([sDeviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S";
if ([sDeviceModel isEqual:@"iPhone5,1"]) return @"iPhone5";
if ([sDeviceModel isEqual:@"iPod1,1"]) return @"iPod1stGen";
if ([sDeviceModel isEqual:@"iPod2,1"]) return @"iPod2ndGen";
if ([sDeviceModel isEqual:@"iPod3,1"]) return @"iPod3rdGen";
if ([sDeviceModel isEqual:@"iPod4,1"]) return @"iPod4thGen";
if ([sDeviceModel isEqual:@"iPad1,1"]) return @"iPadWiFi";
if ([sDeviceModel isEqual:@"iPad1,2"]) return @"iPad3G";
if ([sDeviceModel isEqual:@"iPad2,1"]) return @"iPad2";
if ([sDeviceModel isEqual:@"iPad2,2"]) return @"iPad2";
if ([sDeviceModel isEqual:@"iPad2,3"]) return @"iPad2";
NSString *aux = [[sDeviceModel componentsSeparatedByString:@","] objectAtIndex:0];
if ([aux rangeOfString:@"iPhone"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
if (version == 3) return @"iPhone4"
if (version >= 4) return @"iPhone4s";
}
if ([aux rangeOfString:@"iPod"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
if (version >=4) return @"iPod4thGen";
}
if ([aux rangeOfString:@"iPad"].location!=NSNotFound) {
int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
if (version ==1) return @"iPad3G";
if (version >=2) return @"iPad2";
}
return sDeviceModel;
}