一般情况下,我们总是通过UIDevice去获取model和name
[[UIDevice currentDevice] model];
[[UIDevice currentDevice] name];
但是获取只是iphone
,并没有获取具体的手机型号,而通过屏幕宽高去估算手机型号也并不完全正确,所以现在通过系统的Identifier去判断更加全面和准确。
系统的Identifier可以在这里查询,https://www.theiphonewiki.com/wiki/Models。
下面函数我已更新到截止到现在2017年市面上最新的机型:
iPhone最新为iPhoneX,AirPods为一代,Apple TV为Apple TV 4K版,Apple Watch为Apple Watch Series 3,HomePod为一代,iPad为iPad Pro10.5英寸版,iPad mini 4,iPod touch为6代
函数方法实现
一、导入"sys/utsname.h"
#import "sys/utsname.h"
二、函数方案
///获取具体的型号
- (NSString*)getDetailModel
{
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
//iPhone
if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone3,2"]) return @"Verizon iPhone 4";
if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5S";
if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([deviceString isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([deviceString isEqualToString:@"iPhone9,1"]
|| [deviceString isEqualToString:@"iPhone9,3"]) return @"iPhone 7";
if ([deviceString isEqualToString:@"iPhone9,2"]
|| [deviceString isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus";
if ([deviceString isEqualToString:@"iPhone10,1"]
|| [deviceString isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
if ([deviceString isEqualToString:@"iPhone10,2"]
|| [deviceString isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
if ([deviceString isEqualToString:@"iPhone10,3"]
|| [deviceString isEqualToString:@"iPhone10,6"]) return @"iPhone X";
//iPod
if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([deviceString isEqualToString:@"iPod7,1"]) return @"iPod Touch 6G";
//iPad
if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2 (32nm)";
if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad mini (WiFi)";
if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad mini (GSM)";
if ([deviceString isEqualToString:@"iPad2,7"]) return @"iPad mini (CDMA)";
if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3(WiFi)";
if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3(CDMA)";
if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3(4G)";
if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4 (4G)";
if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (CDMA)";
if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([deviceString isEqualToString:@"iPad4,4"]
||[deviceString isEqualToString:@"iPad4,5"]
||[deviceString isEqualToString:@"iPad4,6"]) return @"iPad mini 2";
if ([deviceString isEqualToString:@"iPad4,7"]
||[deviceString isEqualToString:@"iPad4,8"]
||[deviceString isEqualToString:@"iPad4,9"]) return @"iPad mini 3";
if ([deviceString isEqualToString:@"iPad5,1"]
|| [deviceString isEqualToString:@"iPad5,2"]) return @"iPad mini 4";
if ([deviceString isEqualToString:@"iPad5,3"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"iPad5,4"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"iPad6,3"]
|| [deviceString isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7-inch";
if ([deviceString isEqualToString:@"iPad6,7"]
|| [deviceString isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9-inch";
if ([deviceString isEqualToString:@"iPad6,11"]
|| [deviceString isEqualToString:@"iPad6,12"]) return @"iPad 5Th";//五代
if ([deviceString isEqualToString:@"iPad7,1"]
|| [deviceString isEqualToString:@"iPad7,2"]) return @"iPad Pro 12.9-inch 2nd";
if ([deviceString isEqualToString:@"iPad7,3"]
|| [deviceString isEqualToString:@"iPad7,4"]) return @"iPad Pro 10.5-inch";
//AirPods
if ([deviceString isEqualToString:@"AirPods1,1"]) return @"AirPods";
//Apple TV
if ([deviceString isEqualToString:@"AppleTV2,1"]) return @"AppleTV 2";
if ([deviceString isEqualToString:@"AppleTV3,1"]
||[deviceString isEqualToString:@"AppleTV3,2"]) return @"AppleTV 3";
if ([deviceString isEqualToString:@"AppleTV5,3"]) return @"AppleTV 4";
if ([deviceString isEqualToString:@"AppleTV6,2"]) return @"AppleTV 4K";
//Apple Watch
if ([deviceString isEqualToString:@"Watch1,1"]
||[deviceString isEqualToString:@"Watch1,2"]) return @"Apple Watch1";
if ([deviceString isEqualToString:@"Watch2,6"]
||[deviceString isEqualToString:@"Watch2,7"]) return @"Apple Watch Series 1";
if ([deviceString isEqualToString:@"Watch2,3"]
||[deviceString isEqualToString:@"Watch2,4"]) return @"Apple Watch Series 2";
if ([deviceString isEqualToString:@"Watch3,1"]
||[deviceString isEqualToString:@"Watch3,2"]
||[deviceString isEqualToString:@"Watch3,3"]
||[deviceString isEqualToString:@"Watch3,4"]) return @"Apple Watch Series 3";
//HomePod
if ([deviceString isEqualToString:@"AudioAccessory1,1"]) return @"HomePod";
//模拟器
if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
return deviceString;
}
三、使用
直接调用即可。
NSLog(@"%@",[self getDetailModel]);
参考文章
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/630.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!