Skip to content

Commit 1527999

Browse files
committed
Add more iPads an a capabilities extension
1 parent 92ed8c6 commit 1527999

File tree

4 files changed

+179
-9
lines changed

4 files changed

+179
-9
lines changed
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
public extension DeviceModel {
2+
static var allDevicesWithRoundedDisplayCorners: [DeviceModel] {
3+
allCases.filter { $0.hasRoundedDisplayCorners }
4+
}
5+
6+
var hasRoundedDisplayCorners: Bool {
7+
switch self {
8+
case .iPhone(.iPhoneXGlobal),
9+
.iPhone(.iPhoneXGSM),
10+
.iPhone(.iPhoneXS),
11+
.iPhone(.iPhoneXSMax),
12+
.iPhone(.iPhoneXR),
13+
.iPhone(.iPhone11),
14+
.iPhone(.iPhone11Pro),
15+
.iPhone(.iPhone11ProMax),
16+
.iPhone(.iPhone12Mini),
17+
.iPhone(.iPhone12),
18+
.iPhone(.iPhone12Pro),
19+
.iPhone(.iPhone12ProMax),
20+
.iPhone(.iPhone13Mini),
21+
.iPhone(.iPhone13),
22+
.iPhone(.iPhone13Pro),
23+
.iPhone(.iPhone13ProMax),
24+
.iPhone(.iPhone14),
25+
.iPhone(.iPhone14Plus),
26+
.iPhone(.iPhone14Pro),
27+
.iPhone(.iPhone14ProMax),
28+
.iPhone(.iPhone15),
29+
.iPhone(.iPhone15Plus),
30+
.iPhone(.iPhone15Pro),
31+
.iPhone(.iPhone15ProMax),
32+
.iPhone(.iPhone16),
33+
.iPhone(.iPhone16Plus),
34+
.iPhone(.iPhone16Pro),
35+
.iPhone(.iPhone16ProMax),
36+
.iPhone(.iPhone16e),
37+
.iPad(.gen10Wifi),
38+
.iPad(.gen10Cellular),
39+
.iPad(.air4Wifi),
40+
.iPad(.air4Cellular),
41+
.iPad(.air5Wifi),
42+
.iPad(.air5Cellular),
43+
.iPad(.air11InchM2Wifi),
44+
.iPad(.air11InchM2Cellular),
45+
.iPad(.air13InchM2Wifi),
46+
.iPad(.air13InchM2Cellular),
47+
.iPad(.mini6Wifi),
48+
.iPad(.mini6Cellular),
49+
.iPad(.mini7Wifi),
50+
.iPad(.mini7Cellular),
51+
.iPad(.pro1_11inchWifi),
52+
.iPad(.pro1_11inchWifiTera),
53+
.iPad(.pro1_11inchCellular),
54+
.iPad(.pro1_11inchCellularTera),
55+
.iPad(.pro2_11inchWifi),
56+
.iPad(.pro2_11inchCellular),
57+
.iPad(.pro3_12d9inchWifi),
58+
.iPad(.pro3_12d9inchWifiTera),
59+
.iPad(.pro3_12d9inchCellular),
60+
.iPad(.pro3_12d9inchCellularTera),
61+
.iPad(.pro4_12d9inchWifi),
62+
.iPad(.pro4_12d9inchCellular),
63+
.iPad(.pro3_11inchWifi),
64+
.iPad(.pro3_11inchWifiTera),
65+
.iPad(.pro3_11inchCellular),
66+
.iPad(.pro5_12d9inchWifi),
67+
.iPad(.pro5_12d9inchCellular),
68+
.iPad(.pro5_12d9inchCellularTera),
69+
.iPad(.pro4_11inchWifi),
70+
.iPad(.pro4_11inchCellular),
71+
.iPad(.pro6_12d9inchWifi),
72+
.iPad(.pro6_12d9inchCellular),
73+
.iPad(.pro_11inchM4Wifi),
74+
.iPad(.pro_11inchM4Cellular),
75+
.iPad(.pro_13inchM4Wifi),
76+
.iPad(.pro_13inchM4Cellular),
77+
.mac(.iMac2PortsM1),
78+
.mac(.iMac4PortsM1),
79+
.mac(.iMac2PortsM3),
80+
.mac(.iMac4PortsM3),
81+
.mac(.iMac2PortsM4),
82+
.mac(.iMac4PortsM4),
83+
.mac(.macBookAir13InchM2),
84+
.mac(.macBookAir15InchM2),
85+
.mac(.macBookAir13InchM3),
86+
.mac(.macBookAir15InchM3),
87+
.mac(.macBookProM3),
88+
.mac(.macBookProM4),
89+
.mac(.macBookPro14InchM1Pro),
90+
.mac(.macBookPro14InchM1Max),
91+
.mac(.macBookPro16InchM1Pro),
92+
.mac(.macBookPro16InchM1Max),
93+
.mac(.macBookPro14InchM2Pro),
94+
.mac(.macBookPro14InchM2Max),
95+
.mac(.macBookPro16InchM2Pro),
96+
.mac(.macBookPro16InchM2Max),
97+
.mac(.macBookPro14InchM3Pro),
98+
.mac(.macBookPro14InchM3Max14Core),
99+
.mac(.macBookPro14InchM3Max16Core),
100+
.mac(.macBookPro16InchM3Pro),
101+
.mac(.macBookPro16InchM3Max14Core),
102+
.mac(.macBookPro16InchM3Max16Core),
103+
.mac(.macBookPro14InchM4Pro),
104+
.mac(.macBookPro14InchM4Max),
105+
.mac(.macBookPro16InchM4Pro),
106+
.mac(.macBookPro16InchM4Max):
107+
return true
108+
109+
case .simulator(let model, _):
110+
return model.hasRoundedDisplayCorners
111+
112+
default:
113+
return false
114+
}
115+
}
116+
117+
var hasDynamicIsland: Bool {
118+
switch self {
119+
case .iPhone(.iPhone14Pro),
120+
.iPhone(.iPhone14ProMax),
121+
.iPhone(.iPhone15),
122+
.iPhone(.iPhone15Plus),
123+
.iPhone(.iPhone15Pro),
124+
.iPhone(.iPhone15ProMax),
125+
.iPhone(.iPhone16),
126+
.iPhone(.iPhone16Plus),
127+
.iPhone(.iPhone16Pro),
128+
.iPhone(.iPhone16ProMax):
129+
return true
130+
131+
case .simulator(let model, _):
132+
return model.hasDynamicIsland
133+
134+
default:
135+
return false
136+
}
137+
}
138+
}

Sources/DeviceIdentificator/Models/IPadModel+Name.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public extension DeviceModel.IPadModel {
4545
case .mini5Cellular: return "iPad Mini 5 (Cellular)"
4646
case .mini6Wifi: return "iPad Mini 6 (Wifi)"
4747
case .mini6Cellular: return "iPad Mini 6 (Cellular)"
48+
case .mini7Wifi: return "iPad Mini 7 (Wifi)"
49+
case .mini7Cellular: return "iPad Mini 7 (Cellular)"
4850

4951
// Airs
5052
case .air1Wifi: return "iPad Air 1 (Wifi)"
@@ -58,7 +60,11 @@ public extension DeviceModel.IPadModel {
5860
case .air4Cellular: return "iPad Air 4 (Cellular)"
5961
case .air5Wifi: return "iPad Air 5 (Wifi)"
6062
case .air5Cellular: return "iPad Air 5 (Cellular)"
61-
63+
case .air11InchM2Wifi: return "iPad Air M2 11\" (Cellular)"
64+
case .air11InchM2Cellular: return "iPad Air M2 11\" (Cellular)"
65+
case .air13InchM2Wifi: return "iPad Air M2 13\" (Cellular)"
66+
case .air13InchM2Cellular: return "iPad Air M2 13\" (Cellular)"
67+
6268
// Pros
6369
case .pro1_9d7inchWifi: return "iPad Pro 1G 9.7\" (Wifi)"
6470
case .pro1_9d7inchCellular: return "iPad Pro 1G 9.7\" (Cellular)"
@@ -92,10 +98,10 @@ public extension DeviceModel.IPadModel {
9298
case .pro4_11inchCellular: return "iPad Pro 4G 11\" (Cellular)"
9399
case .pro6_12d9inchWifi: return "iPad Pro 6G 12.9\" (Wifi)"
94100
case .pro6_12d9inchCellular: return "iPad Pro 6G 12.9\" (Cellular)"
95-
case .pro7_11inchWifi: return "iPad Pro 7G 11\" (Wifi)"
96-
case .pro7_11inchCellular: return "iPad Pro 7G 11\" (Cellular)"
97-
case .pro7_13inchWifi: return "iPad Pro 7G 13\" (Wifi)"
98-
case .pro7_13inchCellular: return "iPad Pro 7G 13\" (Cellular)"
101+
case .pro_11inchM4Wifi: return "iPad Pro 7G 11\" (Wifi)"
102+
case .pro_11inchM4Cellular: return "iPad Pro 7G 11\" (Cellular)"
103+
case .pro_13inchM4Wifi: return "iPad Pro 7G 13\" (Wifi)"
104+
case .pro_13inchM4Cellular: return "iPad Pro 7G 13\" (Cellular)"
99105
}
100106
}
101107
}

Sources/DeviceIdentificator/Models/IPadModel.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public extension DeviceModel {
4444
case mini5Cellular = "iPad11,2"
4545
case mini6Wifi = "iPad14,1"
4646
case mini6Cellular = "iPad14,2"
47+
case mini7Wifi = "iPad16,1"
48+
case mini7Cellular = "iPad16,2"
4749

4850
// Airs
4951
case air1Wifi = "iPad4,1"
@@ -57,6 +59,10 @@ public extension DeviceModel {
5759
case air4Cellular = "iPad13,2"
5860
case air5Wifi = "iPad13,16"
5961
case air5Cellular = "iPad13,17"
62+
case air11InchM2Wifi = "iPad14,8"
63+
case air11InchM2Cellular = "iPad14,9"
64+
case air13InchM2Wifi = "iPad14,10"
65+
case air13InchM2Cellular = "iPad14,11"
6066

6167
// Pros
6268
case pro1_9d7inchWifi = "iPad6,3"
@@ -91,9 +97,9 @@ public extension DeviceModel {
9197
case pro4_11inchCellular = "iPad14,4"
9298
case pro6_12d9inchWifi = "iPad14,5"
9399
case pro6_12d9inchCellular = "iPad14,6"
94-
case pro7_11inchWifi = "iPad16,3"
95-
case pro7_11inchCellular = "iPad16,4"
96-
case pro7_13inchWifi = "iPad16,5"
97-
case pro7_13inchCellular = "iPad16,6"
100+
case pro_11inchM4Wifi = "iPad16,3"
101+
case pro_11inchM4Cellular = "iPad16,4"
102+
case pro_13inchM4Wifi = "iPad16,5"
103+
case pro_13inchM4Cellular = "iPad16,6"
98104
}
99105
}

Tests/DeviceIdentificatorTests/DeviceModelTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,24 @@ public class DeviceModelTests: XCTestCase {
8585
XCTAssertFalse(iPadSimulator.isAppleTV)
8686
XCTAssertTrue(iPadSimulator.isWatch)
8787
}
88+
89+
public func test_iPhoneX_has_rounded_display_corners() {
90+
let iPhoneX = DeviceModel.iPhone(.iPhoneXGlobal)
91+
92+
XCTAssertTrue(iPhoneX.hasRoundedDisplayCorners)
93+
94+
let iPhoneXSimulator = DeviceModel.simulator(iPhoneX, arch: "arm64")
95+
96+
XCTAssertTrue(iPhoneXSimulator.hasRoundedDisplayCorners)
97+
}
98+
99+
public func test_iPhone15_has_dynamic_island() {
100+
let iPhone15 = DeviceModel.iPhone(.iPhone15)
101+
102+
XCTAssertTrue(iPhone15.hasDynamicIsland)
103+
104+
let iPhone15Simulator = DeviceModel.simulator(iPhone15, arch: "arm64")
105+
106+
XCTAssertTrue(iPhone15Simulator.hasDynamicIsland)
107+
}
88108
}

0 commit comments

Comments
 (0)