可编程识别 iPhone 设备

7
我想识别应用程序所安装的设备。也就是说,当我在iPhone上安装应用程序时,它应该告诉我设备信息。这些信息包括设备是2G、3G还是3GS。
目前,我只能获取设备的型号、名称、系统名称和系统版本。
我想知道设备是2G、3G还是3GS。
请帮助我。
3个回答

8
在Mac编程的过去历史中,这被认为是错误的问题。真正需要知道的是更具体的信息。针对代码中的每个行为决策,提出更加狭窄的问题。例如,您可能需要知道设备是否具有GPS功能。另一个例子是,您不应基于设备型号来决定如何使用OpenGL堆栈,而应该基于提供的OpenGL能力/扩展信息来进行决定。您现在获取的信息来自UIDevice,这是一个设计不良的API。它以最糟糕的格式 - 字符串,向您提供完全错误的信息。Erica Sadun有一个扩展程序可以用于UIDevice 这里。它只是sysctlbyname("hw.machine",...)的包装器。此属性对于每个模型都不同。但是再次强调,通常这是错误的问题。

3
同意。除非你在开发一个可以清点公司机群中不同iPhone设备的应用,需要对它们进行排序,否则你可能并不需要知道它是3G还是3Gs,而更需要知道它是否支持你想要使用的功能。使用AvailibilityMacros来查找该设备是否支持你需要的功能。 - mahboudz

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;
}

希望这会有所帮助。


0

我做了这个,它甚至能显示出型号编号:

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接