Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit 83a90d6

Browse files
authored
Merge pull request #233 from UnityTech/iphone10bugfix
add ios device helper
2 parents fe61321 + 9bb5e76 commit 83a90d6

File tree

5 files changed

+230
-2
lines changed

5 files changed

+230
-2
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// UIWidgetsDevice.h
3+
// Unity-iPhone
4+
//
5+
// Created by Xingwei Zhu on 2019/6/24.
6+
//
7+
8+
#ifndef UIWidgetsDevice_h
9+
#define UIWidgetsDevice_h
10+
11+
@interface UIWidgetsDevice : NSObject
12+
13+
+(NSString *) deviceName;
14+
15+
+(BOOL) NeedScreenDownSample;
16+
17+
@end
18+
19+
#endif /* UIWidgetsDevice_h */

Runtime/Plugins/platform/ios/UIWidgetsDevice.h.meta

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
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

Runtime/Plugins/platform/ios/UIWidgetsDevice.mm.meta

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Plugins/platform/ios/UIWidgetsViewController.mm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "UIWidgetsViewController.h"
22
#include "UIWidgetsMessageManager.h"
3+
#include "UIWidgetsDevice.h"
34
#include <Foundation/Foundation.h>
45
#include <UIKit/UIKit.h>
56

@@ -95,8 +96,7 @@ viewMetrics IOSGetViewportPadding()
9596
viewPadding insets = [[UIWidgetsViewController sharedInstance] viewInsets];
9697
viewPadding padding = [[UIWidgetsViewController sharedInstance] padding];
9798

98-
CGFloat scale = [UIScreen mainScreen].scale;
99-
BOOL needDownsample = scale == 3;
99+
BOOL needDownsample = [UIWidgetsDevice NeedScreenDownSample];
100100

101101
metrics.insets_bottom = needDownsample ? insets.bottom * 0.8696 : insets.bottom;
102102
metrics.insets_top = needDownsample ? insets.top * 0.8696 : insets.top;

0 commit comments

Comments
 (0)