|
| 1 | +// |
| 2 | +// UIWidgetsDevice.m |
| 3 | +// Unity-iPhone |
| 4 | +// |
| 5 | +// Created by Xingwei Zhu on 2019/6/24. |
| 6 | +// |
| 7 | +#include "UIWidgetsDevice.h" |
| 8 | +#import <sys/utsname.h> |
| 9 | + |
| 10 | +static NSString* _deviceName = nil; |
| 11 | + |
| 12 | +@implementation UIWidgetsDevice |
| 13 | + |
| 14 | ++ (NSString *) deviceName |
| 15 | +{ |
| 16 | + if (_deviceName != nil) { |
| 17 | + return _deviceName; |
| 18 | + } |
| 19 | + |
| 20 | + struct utsname systemInfo; |
| 21 | + uname(&systemInfo); |
| 22 | + NSString* code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; |
| 23 | + |
| 24 | + NSDictionary* deviceNamesByCode = @{ |
| 25 | + @"i386" : @"Simulator", |
| 26 | + @"x86_64" : @"Simulator", |
| 27 | + @"iPod1,1" : @"iPod Touch", // (Original) |
| 28 | + @"iPod2,1" : @"iPod Touch", // (Second Generation) |
| 29 | + @"iPod3,1" : @"iPod Touch", // (Third Generation) |
| 30 | + @"iPod4,1" : @"iPod Touch", // (Fourth Generation) |
| 31 | + @"iPod7,1" : @"iPod Touch", // (6th Generation) |
| 32 | + @"iPhone1,1" : @"iPhone", // (Original) |
| 33 | + @"iPhone1,2" : @"iPhone", // (3G) |
| 34 | + @"iPhone2,1" : @"iPhone", // (3GS) |
| 35 | + @"iPad1,1" : @"iPad", // (Original) |
| 36 | + @"iPad2,1" : @"iPad 2", // |
| 37 | + @"iPad3,1" : @"iPad", // (3rd Generation) |
| 38 | + @"iPhone3,1" : @"iPhone 4", // (GSM) |
| 39 | + @"iPhone3,3" : @"iPhone 4", // (CDMA/Verizon/Sprint) |
| 40 | + @"iPhone4,1" : @"iPhone 4S", // |
| 41 | + @"iPhone5,1" : @"iPhone 5", // (model A1428, AT&T/Canada) |
| 42 | + @"iPhone5,2" : @"iPhone 5", // (model A1429, everything else) |
| 43 | + @"iPad3,4" : @"iPad", // (4th Generation) |
| 44 | + @"iPad2,5" : @"iPad Mini", // (Original) |
| 45 | + @"iPhone5,3" : @"iPhone 5C", // (model A1456, A1532 | GSM) |
| 46 | + @"iPhone5,4" : @"iPhone 5C", // (model A1507, A1516, A1526 (China), A1529 | Global) |
| 47 | + @"iPhone6,1" : @"iPhone 5S", // (model A1433, A1533 | GSM) |
| 48 | + @"iPhone6,2" : @"iPhone 5S", // (model A1457, A1518, A1528 (China), A1530 | Global) |
| 49 | + @"iPhone7,1" : @"iPhone 6 Plus", // |
| 50 | + @"iPhone7,2" : @"iPhone 6", // |
| 51 | + @"iPhone8,1" : @"iPhone 6S", // |
| 52 | + @"iPhone8,2" : @"iPhone 6S Plus", // |
| 53 | + @"iPhone8,4" : @"iPhone SE", // |
| 54 | + @"iPhone9,1" : @"iPhone 7", // |
| 55 | + @"iPhone9,3" : @"iPhone 7", // |
| 56 | + @"iPhone9,2" : @"iPhone 7 Plus", // |
| 57 | + @"iPhone9,4" : @"iPhone 7 Plus", // |
| 58 | + @"iPhone10,1": @"iPhone 8", // CDMA |
| 59 | + @"iPhone10,4": @"iPhone 8", // GSM |
| 60 | + @"iPhone10,2": @"iPhone 8 Plus", // CDMA |
| 61 | + @"iPhone10,5": @"iPhone 8 Plus", // GSM |
| 62 | + @"iPhone10,3": @"iPhone X", // CDMA |
| 63 | + @"iPhone10,6": @"iPhone X", // GSM |
| 64 | + @"iPhone11,2": @"iPhone XS", // |
| 65 | + @"iPhone11,4": @"iPhone XS Max", // |
| 66 | + @"iPhone11,6": @"iPhone XS Max", // China |
| 67 | + @"iPhone11,8": @"iPhone XR", // |
| 68 | + |
| 69 | + @"iPad4,1" : @"iPad Air", // 5th Generation iPad (iPad Air) - Wifi |
| 70 | + @"iPad4,2" : @"iPad Air", // 5th Generation iPad (iPad Air) - Cellular |
| 71 | + @"iPad4,4" : @"iPad Mini", // (2nd Generation iPad Mini - Wifi) |
| 72 | + @"iPad4,5" : @"iPad Mini", // (2nd Generation iPad Mini - Cellular) |
| 73 | + @"iPad4,7" : @"iPad Mini", // (3rd Generation iPad Mini - Wifi (model A1599)) |
| 74 | + @"iPad6,7" : @"iPad Pro (12.9\")", // iPad Pro 12.9 inches - (model A1584) |
| 75 | + @"iPad6,8" : @"iPad Pro (12.9\")", // iPad Pro 12.9 inches - (model A1652) |
| 76 | + @"iPad6,3" : @"iPad Pro (9.7\")", // iPad Pro 9.7 inches - (model A1673) |
| 77 | + @"iPad6,4" : @"iPad Pro (9.7\")" |
| 78 | + }; |
| 79 | + _deviceName = [deviceNamesByCode objectForKey:code]; |
| 80 | + |
| 81 | + if (!_deviceName) { |
| 82 | + if ([code rangeOfString:@"iPod"].location != NSNotFound) { |
| 83 | + _deviceName = @"iPod Touch"; |
| 84 | + } |
| 85 | + else if([code rangeOfString:@"iPad"].location != NSNotFound) { |
| 86 | + _deviceName = @"iPad"; |
| 87 | + } |
| 88 | + else if([code rangeOfString:@"iPhone"].location != NSNotFound){ |
| 89 | + _deviceName = @"iPhone"; |
| 90 | + } |
| 91 | + else { |
| 92 | + _deviceName = @"Unknown"; |
| 93 | + } |
| 94 | + } |
| 95 | + |
| 96 | + if ([_deviceName isEqualToString:@"Simulator"]) { |
| 97 | + if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { |
| 98 | + switch ((int)[[UIScreen mainScreen] nativeBounds].size.height) { |
| 99 | + //iPhone 5 or 5S or 5C |
| 100 | + case 1136: |
| 101 | + _deviceName = @"iPhone 5"; |
| 102 | + break; |
| 103 | + //iPhone 6 or 6S or 7 or 8 |
| 104 | + case 1334: |
| 105 | + _deviceName = @"iPhone 6"; |
| 106 | + break; |
| 107 | + //iPhone 6+ or 6S+ or 7+ or 8+ |
| 108 | + case 1920: |
| 109 | + _deviceName = @"iPhone 6 Plus"; |
| 110 | + break; |
| 111 | + //iPhone 6+ or 6S+ or 7+ or 8+ |
| 112 | + case 2208: |
| 113 | + _deviceName = @"iPhone 6 Plus"; |
| 114 | + break; |
| 115 | + //iPhone X or XS |
| 116 | + case 2436: |
| 117 | + _deviceName = @"iPhone X"; |
| 118 | + break; |
| 119 | + //iPhone XS Max |
| 120 | + case 2688: |
| 121 | + _deviceName = @"iPhone XS Max"; |
| 122 | + break; |
| 123 | + //iPhone XR |
| 124 | + case 1792: |
| 125 | + _deviceName = @"iPhone XR"; |
| 126 | + break; |
| 127 | + default: |
| 128 | + _deviceName = @"Unknown"; |
| 129 | + break; |
| 130 | + } |
| 131 | + } |
| 132 | + } |
| 133 | + |
| 134 | + return _deviceName; |
| 135 | +} |
| 136 | + |
| 137 | ++ (BOOL) NeedScreenDownSample |
| 138 | +{ |
| 139 | + return [[UIWidgetsDevice deviceName] isEqualToString:@"iPhone 6 Plus"] || |
| 140 | + [[UIWidgetsDevice deviceName] isEqualToString:@"iPhone 6S Plus"] || |
| 141 | + [[UIWidgetsDevice deviceName] isEqualToString:@"iPhone 7 Plus"] || |
| 142 | + [[UIWidgetsDevice deviceName] isEqualToString:@"iPhone 8 Plus"]; |
| 143 | +} |
| 144 | + |
| 145 | +@end |
0 commit comments