以编程方式识别iphone设备

SST*_*SST 7 iphone objective-c ios

我想确定安装我的应用程序的设备.这意味着,当我在iPhone上安装应用程序时,它应该告诉我设备信息.信息就像,设备是2G,3G或3GS.

目前我只获得设备的型号,名称,systemName,systemVersion.

我想知道该设备是2G,3G或3GS.

请帮我.

ohm*_*ics 8

在过去的Mac编程历史中,这一直被认为是错误的问题.

您真正需要知道的是更具体的信息.为代码中的每个行为决策提出一个更狭隘的问题.例如,您可能需要知道设备是否具有GPS.另一个原因是你不应该根据它是什么型号设备来决定如何使用OpenGL堆栈,而是根据提供的OpenGL功能/扩展信息来决定.

您现在获得的信息来自UIDevice,这是一个设计不佳的API.它以最糟糕的格式为您提供完全错误的信息 - 字符串.

Erica Sadun对UIDevice有一个扩展,可能在这里很有用.它只是一个包装sysctlbyname("hw.machine", ...).每个型号的此属性都不同.

但同样,这通常是错误的问题.

  • 同意.除非您正在开发一个只需清点公司机队中所有不同iPhone的应用程序,并且您需要能够对它们进行排序,否则您可能不需要知道它是3G还是3G,以及它是否支持您想要访问的功能.使用AvailibilityMacros查看设备是否支持您所需的功能. (3认同)

Hir*_*ren 5

这是我在我的应用程序中使用的,它工作得很好

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;
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你