
随便放的图
问题描述
公司开发APP的时候,领导要求分析设备用户量,即用iPhone5s的有多少,iPhone6s的有多少等等。这样就需要在代码中获取设备的名称
解决方案
从网上查找了些资料,基本上都是通过获取到设备的产品类型来判断设备名称的。废话不多说,直接上代码了
导入头文件  #include <sys/sysctl.h>
- (NSString *)getCurrentDeviceName
{
int mib[2];
size_t len;
char *machine;
    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;
    sysctl(mib, 2, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2, machine, &len, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
    free(machine);
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
    if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
    if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
    if ([platform isEqualToString:@"i386"])      return @"iPhone Simulator";
    if ([platform isEqualToString:@"x86_64"])    return @"iPhone Simulator";
    return platform;
}
附录
| 产品类型 | 设备名称 | 
|---|---|
| iPhone1,2 | iPhone 3G | 
| iPhone2,1 | iPhone 3GS | 
| iPhone3,1 | iPhone 4 | 
| iPhone3,2 | iPhone 4 | 
| iPhone3,3 | iPhone 4 | 
| iPhone4,1 | iPhone 4s | 
| iPhone5,1 | iPhone 5 | 
| iPhone5,2 | iPhone 5 | 
| iPhone5,3 | iPhone 5c | 
| iPhone5,4 | iPhone 5c | 
| iPhone6,1 | iPhone 5s | 
| iPhone6,2 | iPhone 5s | 
| iPhone7,1 | iPhone 6 Plus | 
| iPhone7,2 | iPhone 6 | 
| iPhone8,1 | iPhone 6s | 
| iPhone8,2 | iPhone 6s Plus | 
| iPhone8,4 | iPhone SE | 
注: iPhone 6/6Plus 和 iPhone 6s/6sPlus的产品类型要注意分别
更多产品类型对应的设备名称请参考http://www.i4.cn/firmware.html