今天整理项目,发现之前在网上拷贝的获取设备型号,然后在根据分辨率给设备分类并保存型号的代码if语句太多,看着烦,就处理了下。
iOS13的状态高度获取
#define kStatusBarHeight (@available(iOS 13.0, *)?[UIApplication sharedApplication].windows[0].windowScene.statusBarManager.statusBarFrame.size.height:[[UIApplication sharedApplication] statusBarFrame].size.height)
设备型号获取
创建一个设备列表plist文件
你可以通过右键这个文件点击"Open As"选择Source Code 用代码的方式打开,拷贝下面这些代码进去覆盖就可以了。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>display</key>
<dict>
<key>Simulator</key>
<dict>
<key>2688</key>
<string>iPhone XS Max</string>
<key>2436</key>
<string>iPhone X</string>
<key>1792</key>
<string>iPhone XR</string>
<key>2208</key>
<string>iPhone 6 Plus</string>
<key>1334</key>
<string>iPhone 6</string>
<key>1136</key>
<string>iPhone 5</string>
<key>960</key>
<string>iPhone 4</string>
<key>1024</key>
<string>iPad</string>
<key>2048</key>
<string>iPad</string>
<key>2160</key>
<string>iPad</string>
<key>2224</key>
<string>iPad</string>
<key>2388</key>
<string>iPad</string>
<key>2732</key>
<string>iPad</string>
</dict>
<key>Device</key>
<dict>
<key>iPhone 4</key>
<string>iPhone 4</string>
<key>iPhone 4S</key>
<string>iPhone 4</string>
<key>iPhone 5</key>
<string>iPhone 5</string>
<key>iPhone 5c</key>
<string>iPhone 5</string>
<key>iPhone 5s</key>
<string>iPhone 5</string>
<key>iPod Touch 5G</key>
<string>iPod Touch</string>
<key>iPod Touch 6G</key>
<string>iPod Touch</string>
<key>iPhone SE</key>
<string>iPhone 5</string>
<key>iPhone SE 2</key>
<string>iPhone 5</string>
<key>iPhone 6</key>
<string>iPhone 6</string>
<key>iPhone 6s</key>
<string>iPhone 6</string>
<key>iPhone 7</key>
<string>iPhone 6</string>
<key>iPhone 8</key>
<string>iPhone 6</string>
<key>iPhone 6 Plus</key>
<string>iPhone 6 Plus</string>
<key>iPhone 6s Plus</key>
<string>iPhone 6 Plus</string>
<key>iPhone 7 Plus</key>
<string>iPhone 6 Plus</string>
<key>iPhone 8 Plus</key>
<string>iPhone 6 Plus</string>
<key>iPhone X</key>
<string>iPhone X</string>
<key>iPhone XS</key>
<string>iPhone X</string>
<key>iPhone XS Max</key>
<string>iPhone X Max</string>
<key>iPhone XR</key>
<string>iPhone XR</string>
<key>iPhone 11</key>
<string>iPhone XR</string>
<key>iPhone 11 Pro</key>
<string>iPhone X</string>
<key>iPhone 11 Pro Max</key>
<string>iPhone X Max</string>
<key>iPad</key>
<string>iPad</string>
<key>iPad 3G</key>
<string>iPad</string>
<key>iPad 2</key>
<string>iPad</string>
<key>iPad Mini</key>
<string>iPad</string>
<key>iPad 3</key>
<string>iPad</string>
<key>iPad 4</key>
<string>iPad</string>
<key>iPad Air</key>
<string>iPad</string>
<key>iPad Mini 2</key>
<string>iPad</string>
<key>iPad Mini 3</key>
<string>iPad</string>
<key>iPad Mini 4</key>
<string>iPad</string>
<key>iPad Air 2</key>
<string>iPad</string>
<key>iPad Pro 9.7</key>
<string>iPad</string>
<key>iPad Pro 12.9</key>
<string>iPad</string>
<key>iPad 5</key>
<string>iPad</string>
<key>iPad Pro 12.9 inch 2nd gen</key>
<string>iPad</string>
<key>iPad Pro 10.5 inch</key>
<string>iPad</string>
<key>iPad 6</key>
<string>iPad</string>
<key>iPad 7</key>
<string>iPad</string>
<key>iPad Pro 11-inch</key>
<string>iPad</string>
<key>iPad Pro 12.9-inch 3rd gen</key>
<string>iPad</string>
<key>iPad Pro 11-inch 2nd gen</key>
<string>iPad</string>
<key>iPad Pro 12.9-inch 4th gen</key>
<string>iPad</string>
<key>iPad Mini 5</key>
<string>iPad</string>
<key>iPad Air 3</key>
<string>iPad</string>
<key>iPod Touch 1G</key>
<string>iPod Touch</string>
<key>iPod Touch 2G</key>
<string>iPod Touch</string>
<key>iPod Touch 3G</key>
<string>iPod Touch</string>
<key>iPod Touch 4G</key>
<string>iPod Touch</string>
<key>iPod Touch 7G</key>
<string>iPod Touch</string>
</dict>
</dict>
<key>model</key>
<dict>
<key>iPhone1,1</key>
<string>iPhone</string>
<key>iPhone1,2</key>
<string>iPhone 3G</string>
<key>iPhone2,1</key>
<string>iPhone 3GS</string>
<key>iPhone3,1</key>
<string>iPhone 4</string>
<key>iPhone3,2</key>
<string>iPhone 4</string>
<key>iPhone3,3</key>
<string>iPhone 4</string>
<key>iPhone4,1</key>
<string>iPhone 4S</string>
<key>iPhone5,1</key>
<string>iPhone 5</string>
<key>iPhone5,2</key>
<string>iPhone 5</string>
<key>iPhone5,3</key>
<string>iPhone 5c</string>
<key>iPhone5,4</key>
<string>iPhone 5c</string>
<key>iPhone6,1</key>
<string>iPhone 5s</string>
<key>iPhone6,2</key>
<string>iPhone 5s</string>
<key>iPhone7,1</key>
<string>iPhone 6 Plus</string>
<key>iPhone7,2</key>
<string>iPhone 6</string>
<key>iPhone8,1</key>
<string>iPhone 6s</string>
<key>iPhone8,2</key>
<string>iPhone 6s Plus</string>
<key>iPhone8,4</key>
<string>iPhone SE</string>
<key>iPhone9,1</key>
<string>iPhone 7</string>
<key>iPhone9,2</key>
<string>iPhone 7 Plus</string>
<key>iPhone9,3</key>
<string>iPhone 7</string>
<key>iPhone9,4</key>
<string>iPhone 7 Plus</string>
<key>iPhone10,1</key>
<string>iPhone 8</string>
<key>iPhone10,2</key>
<string>iPhone 8 Plus</string>
<key>iPhone10,3</key>
<string>iPhone X</string>
<key>iPhone10,4</key>
<string>iPhone 8</string>
<key>iPhone10,5</key>
<string>iPhone 8 Plus</string>
<key>iPhone10,6</key>
<string>iPhone X</string>
<key>iPhone11,2</key>
<string>iPhone XS</string>
<key>iPhone11,4</key>
<string>iPhone XS Max</string>
<key>iPhone11,6</key>
<string>iPhone XS Max</string>
<key>iPhone11,8</key>
<string>iPhone XR</string>
<key>iPhone12,1</key>
<string>iPhone 11</string>
<key>iPhone12,3</key>
<string>iPhone 11 Pro</string>
<key>iPhone12,5</key>
<string>iPhone 11 Pro Max</string>
<key>iPhone12,8</key>
<string>iPhone SE 2</string>
<key>i386</key>
<string>Simulator</string>
<key>x86_64</key>
<string>Simulator</string>
<key>iPod1,1</key>
<string>iPod Touch 1G</string>
<key>iPod2,1</key>
<string>iPod Touch 2G</string>
<key>iPod3,1</key>
<string>iPod Touch 3G</string>
<key>iPod4,1</key>
<string>iPod Touch 4G</string>
<key>iPod5,1</key>
<string>iPod Touch 5G</string>
<key>iPod7,1</key>
<string>iPod Touch 6G</string>
<key>iPod9,1</key>
<string>iPod Touch 7G</string>
<key>iPad1,1</key>
<string>iPad</string>
<key>iPad1,2</key>
<string>iPad 3G</string>
<key>iPad2,1</key>
<string>iPad 2</string>
<key>iPad2,2</key>
<string>iPad 2</string>
<key>iPad2,3</key>
<string>iPad 2</string>
<key>iPad2,4</key>
<string>iPad 2</string>
<key>iPad2,5</key>
<string>iPad Mini</string>
<key>iPad2,6</key>
<string>iPad Mini</string>
<key>iPad2,7</key>
<string>iPad Mini</string>
<key>iPad3,1</key>
<string>iPad 3</string>
<key>iPad3,2</key>
<string>iPad 3</string>
<key>iPad3,3</key>
<string>iPad 3</string>
<key>iPad3,4</key>
<string>iPad 4</string>
<key>iPad3,5</key>
<string>iPad 4</string>
<key>iPad3,6</key>
<string>iPad 4</string>
<key>iPad4,1</key>
<string>iPad Air</string>
<key>iPad4,2</key>
<string>iPad Air</string>
<key>iPad4,4</key>
<string>iPad Mini 2</string>
<key>iPad4,5</key>
<string>iPad Mini 2</string>
<key>iPad4,6</key>
<string>iPad Mini 2</string>
<key>iPad4,7</key>
<string>iPad Mini 3</string>
<key>iPad4,8</key>
<string>iPad Mini 3</string>
<key>iPad4,9</key>
<string>iPad Mini 3</string>
<key>iPad5,1</key>
<string>iPad Mini 4</string>
<key>iPad5,2</key>
<string>iPad Mini 4</string>
<key>iPad5,3</key>
<string>iPad Air 2</string>
<key>iPad5,4</key>
<string>iPad Air 2</string>
<key>iPad6,3</key>
<string>iPad Pro 9.7</string>
<key>iPad6,4</key>
<string>iPad Pro 9.7</string>
<key>iPad6,7</key>
<string>iPad Pro 12.9</string>
<key>iPad6,8</key>
<string>iPad Pro 12.9</string>
<key>iPad6,11</key>
<string>iPad 5</string>
<key>iPad6,12</key>
<string>iPad 5</string>
<key>iPad7,1</key>
<string>iPad Pro 12.9 inch 2nd gen</string>
<key>iPad7,2</key>
<string>iPad Pro 12.9 inch 2nd gen</string>
<key>iPad7,3</key>
<string>iPad Pro 10.5 inch</string>
<key>iPad7,4</key>
<string>iPad Pro 10.5 inch</string>
<key>iPad7,5</key>
<string>iPad 6</string>
<key>iPad7,6</key>
<string>iPad 6</string>
<key>iPad7,11</key>
<string>iPad 7</string>
<key>iPad7,12</key>
<string>iPad 7</string>
<key>iPad8,1</key>
<string>iPad Pro 11-inch</string>
<key>iPad8,2</key>
<string>iPad Pro 11-inch</string>
<key>iPad8,3</key>
<string>iPad Pro 11-inch</string>
<key>iPad8,4</key>
<string>iPad Pro 11-inch</string>
<key>iPad8,5</key>
<string>iPad Pro 12.9-inch 3rd gen</string>
<key>iPad8,6</key>
<string>iPad Pro 12.9-inch 3rd gen</string>
<key>iPad8,7</key>
<string>iPad Pro 12.9-inch 3rd gen</string>
<key>iPad8,8</key>
<string>iPad Pro 12.9-inch 3rd gen</string>
<key>iPad8,9</key>
<string>iPad Pro 11-inch 2nd gen</string>
<key>iPad8,10</key>
<string>iPad Pro 11-inch 2nd gen</string>
<key>iPad8,11</key>
<string>iPad Pro 12.9-inch 4th gen</string>
<key>iPad8,12</key>
<string>iiPad Pro 12.9-inch 4th gen</string>
<key>iPad11,1</key>
<string>iPad Mini 5</string>
<key>iPad11,2</key>
<string>iPad Mini 5</string>
<key>iPad11,3</key>
<string>iPad Air 3</string>
<key>iPad11,4</key>
<string>iPad Air 3</string>
</dict>
</dict>
</plist>
通过拿到的设备类型说明字符去匹配就可以拿到型号,然后你也可以根据获得的设备型号再去匹配拿到同分辨率设备方便你不用写太多设备去判断分辨率。
下面这些则是具体的实现,你要是没空自己写就可以看看
获取当前型号类型,也就是 iPhone11,8这串字符串 。
记得导入头文件
#import <sys/sysctl.h>
+ (NSString *)getCurrentDeviceModelDescription{
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);
return platform;
}
调用 getCurrentDeviceModelDescription 获取到设备的类型说明
把plist文件数据拿出来匹配到具体的设备型号
+ (NSString *)getCurrentDeviceModel{
NSString *platform = [Tools+DeviceCategory getCurrentDeviceModelDescription];
NSDictionary * dataDict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DeviceList"ofType:@"plist"]];
NSDictionary * modelDic = dataDict[@"model"];
if ([modelDic.allKeys containsObject: platform]) {
return modelDic[platform];
}
return platform;
}
+ (void)saveDeviceInfo {
NSDictionary * dataDict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DeviceList"ofType:@"plist"]];
NSString *model = [self getCurrentDeviceModel];
NSString *displayModel = model;
NSDictionary * displayDic = dataDict[@"display"];
if ([model isEqualToString:@"Simulator"])
{
NSDictionary *simulatorDic = displayDic[model];
NSString *simulatorHeightStr = [NSString stringWithFormat:@"%.f",[UIScreen mainScreen].currentMode.size.height];
if ([simulatorDic.allKeys containsObject:simulatorHeightStr])
{
displayModel = simulatorDic[simulatorHeightStr];
}
}
else
{
NSDictionary *deviceDic = displayDic[@"Device"];
if ([deviceDic.allKeys containsObject: model])
{
displayModel = deviceDic[model];
}
}
[[NSUserDefaults standardUserDefaults] setObject:displayModel forKey:@"DeviceName"];
[[NSUserDefaults standardUserDefaults] synchronize];
}