以编程方式标识iphone设备
我想确定安装应用程序的设备。 这意味着,当我在iphone上安装应用程序时,它应该告诉我设备信息。 信息是这样的,设备是2G、3G或3GS 目前我只获得设备的型号、名称、系统名称和系统版本 我想知道这个设备是2G、3G还是3GS以编程方式标识iphone设备,iphone,objective-c,ios,Iphone,Objective C,Ios,我想确定安装应用程序的设备。 这意味着,当我在iphone上安装应用程序时,它应该告诉我设备信息。 信息是这样的,设备是2G、3G或3GS 目前我只获得设备的型号、名称、系统名称和系统版本 我想知道这个设备是2G、3G还是3GS 请帮帮我。在过去的Mac编程史上,这一直被认为是一个错误的问题 你真正需要知道的是一条更具体的信息。针对代码中的每个行为决策提出一个更为狭义的问题。例如,您可能需要知道设备是否具有GPS。另一个问题是,您不应该根据OpenGL堆栈是什么模型设备来决定如何使用它,而应该根
请帮帮我。在过去的Mac编程史上,这一直被认为是一个错误的问题 你真正需要知道的是一条更具体的信息。针对代码中的每个行为决策提出一个更为狭义的问题。例如,您可能需要知道设备是否具有GPS。另一个问题是,您不应该根据OpenGL堆栈是什么模型设备来决定如何使用它,而应该根据提供的OpenGL功能/扩展信息来决定 您现在获得的信息来自UIDevice,这是一个设计糟糕的API。它以最糟糕的格式(字符串)为您提供了完全错误的信息 Erica Sadun有一个对UIDevice的扩展,可能很有用。它只是sysctlbyname(“hw.machine,…)的包装器。每个模型的此属性都不同
但是,这通常是一个错误的问题。这是我在我的应用程序中使用的,效果很好
NSString *deviceType = [UIDevice currentDevice].model;
NSLog(@"DEVICE TYPE %@", deviceType);
struct utsname systemInfo;
uname(&systemInfo);
- (NSString *) platformString{
NSString *platform = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
NSLog(@"type ...%@", platform);
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
return platform;
}
希望它有帮助我做了这个,它甚至会显示型号:
struct utsname systemInfo;
uname(&systemInfo);
NSString *modelName = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
NSString *machinename = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
NSString *modelnumber = @"Not listed";
//Simulator
if([modelName isEqualToString:@"i386"] || [modelName isEqualToString:@"x86_64"]) {
modelName = @"iPhone Simulator";
modelnumber = @"XXXXX";
}
//iPhone
else if([modelName isEqualToString:@"iPhone1,1"]) {
modelName = @"iPhone";
modelnumber = @"A1203";
}
else if([modelName isEqualToString:@"iPhone1,2"]) {
modelName = @"iPhone 3G";
modelnumber = @"A1241/A1324";
}
else if([modelName isEqualToString:@"iPhone2,1"]) {
modelName = @"iPhone 3GS";
modelnumber = @"A1303/A1325";
}
else if([modelName isEqualToString:@"iPhone3,1"]) {
modelName = @"iPhone 4 (GSM)";
modelnumber = @"A1332";
}
else if([modelName isEqualToString:@"iPhone3,2"]) {
modelName = @"iPhone 4 GSM Rev A";
modelnumber = @"Not listed";
}
else if([modelName isEqualToString:@"iPhone3,3"]) {
modelName = @"iPhone 4 (CDMA)";
modelnumber = @"A1349";
}
else if([modelName isEqualToString:@"iPhone4,1"]) {
modelName = @"iPhone 4S";
modelnumber = @"A1387/A1431";
}
else if([modelName isEqualToString:@"iPhone5,1"]) {
modelName = @"iPhone 5 (GSM)";
modelnumber = @"A1428";
}
else if([modelName isEqualToString:@"iPhone5,2"]) {
modelName = @"iPhone 5 (GSM+CDMA)";
modelnumber = @"A1429/A1442";
}
//iPod touch
else if([modelName isEqualToString:@"iPod1,1"]) {
modelName = @"iPod touch 1G";
modelnumber = @"A1213";
}
else if([modelName isEqualToString:@"iPod2,1"]) {
modelName = @"iPod touch 2G";
modelnumber = @"A1288";
}
else if([modelName isEqualToString:@"iPod3,1"]) {
modelName = @"iPod touch 3G";
modelnumber = @"A1318";
}
else if([modelName isEqualToString:@"iPod4,1"]) {
modelName = @"iPod touch 4G";
modelnumber = @"A1367";
}
else if([modelName isEqualToString:@"iPod5,1"]) {
modelName = @"iPod touch 5G";
modelnumber = @"A1421";
}
//iPad
else if([modelName isEqualToString:@"iPad1,1"]) {
modelName = @"iPad 1G";
modelnumber = @"A1219/A1337";
}
else if([modelName isEqualToString:@"iPad2,1"]) {
modelName = @"iPad 2 (WiFi)";
modelnumber = @"A1395";
}
else if([modelName isEqualToString:@"iPad2,2"]) {
modelName = @"iPad 2 (GSM)";
modelnumber = @"A1396";
}
else if([modelName isEqualToString:@"iPad2,3"]) {
modelName = @"iPad 2 (CDMA)";
modelnumber = @"A1397";
}
else if([modelName isEqualToString:@"iPad2,4"]) {
modelName = @"iPad 2 (WiFi + Rev A)";
modelnumber = @"A1395";
}
else if([modelName isEqualToString:@"iPad3,1"]) {
modelName = @"iPad 3 (WiFi)";
modelnumber = @"A1416";
}
else if([modelName isEqualToString:@"iPad3,2"]) {
modelName = @"iPad 3 (GSM+CDMA)";
modelnumber = @"A1403";
}
else if([modelName isEqualToString:@"iPad3,3"]) {
modelName = @"iPad 3 (GSM)";
modelnumber = @"A1430";
}
else if([modelName isEqualToString:@"iPad3,4"]) {
modelName = @"iPad 4 (WiFi)";
modelnumber = @"A1458";
}
else if([modelName isEqualToString:@"iPad3,5"]) {
modelName = @"iPad 4 (GSM)";
modelnumber = @"A1459";
}
else if([modelName isEqualToString:@"iPad3,6"]) {
modelName = @"iPad 4 (GSM+CDMA)";
modelnumber = @"A1460";
}
//iPad mini
else if([modelName isEqualToString:@"iPad2,5"]) {
modelName = @"iPad mini (WiFi)";
modelnumber = @"A1432";
}
else if([modelName isEqualToString:@"iPad2,6"]) {
modelName = @"iPad mini (GSM)";
modelnumber = @"A1454";
}
else if([modelName isEqualToString:@"iPad2,7"]) {
modelName = @"iPad mini (GSM+CDMA)";
modelnumber = @"A1455";
}
//Apple TV, just for funn:)
else if([modelName isEqualToString:@"AppleTV2,1"]) {
modelName = @"Apple TV 2G";
modelnumber = @"A1378";
}
else if([modelName isEqualToString:@"AppleTV3,1"]) {
modelName = @"Apple TV 3G";
modelnumber = @"A1427";
}
else if([modelName isEqualToString:@"AppleTV3,2"]) {
modelName = @"Apple TV 3G (Rev A)";
modelnumber = @"A1469";
}
NSLog(@"Device model: %@/ %@ /%@",modelName,machinename,modelnumber);
同意。除非你正在开发一款应用程序,该应用程序只列出公司车队中所有不同的iPhone,并且你需要能够对它们进行排序,否则你可能不需要知道它是3G还是3Gs,只需要知道它是否支持你想访问的功能。使用AvailabilityMacros查看设备是否支持您所需的功能。嘿,兄弟!这帮了我的忙!非常感谢!:)