Skip to content

Commit 59c5141

Browse files
Split all models into separated cases and prepare for build and test (WIP)
1 parent 2d0f1e8 commit 59c5141

21 files changed

+392
-691
lines changed

Sources/DeviceIdentificator/DeviceModel+CaseIterable.swift

Lines changed: 15 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -2,165 +2,20 @@ import Foundation
22

33
public extension DeviceModel {
44
static var allCases: [DeviceModel] {
5-
[
6-
// iPhones
7-
.iPhone1G,
8-
.iPhone3G,
9-
.iPhone3GS,
10-
.iPhone4(.gsm),
11-
.iPhone4(.gsmRevA),
12-
.iPhone4(.cdma),
13-
.iPhone4S,
14-
.iPhone5(.gsm),
15-
.iPhone5(.global),
16-
.iPhone5C(.gsm),
17-
.iPhone5C(.global),
18-
.iPhone5S(.gsm),
19-
.iPhone5S(.global),
20-
.iPhone6,
21-
.iPhone6Plus,
22-
.iPhone6S,
23-
.iPhone6SPlus,
24-
.iPhoneSE,
25-
.iPhone7(.global),
26-
.iPhone7Plus(.global),
27-
.iPhone7(.gsm),
28-
.iPhone7Plus(.gsm),
29-
.iPhone8(.global),
30-
.iPhone8(.gsm),
31-
.iPhone8Plus(.global),
32-
.iPhone8Plus(.gsm),
33-
.iPhoneX(.global),
34-
.iPhoneX(.gsm),
35-
.iPhoneXR,
36-
.iPhoneXS,
37-
.iPhoneXSMax,
38-
.iPhone11,
39-
.iPhone11Pro,
40-
.iPhone11ProMax,
41-
.iPhoneSE2G,
42-
.iPhone12Mini,
43-
.iPhone12,
44-
.iPhone12Pro,
45-
.iPhone12ProMax,
46-
.iPhone13Pro,
47-
.iPhone13ProMax,
48-
.iPhone13Mini,
49-
.iPhone13,
50-
.iPhoneSE3G,
51-
.iPhone14,
52-
.iPhone14Plus,
53-
.iPhone14Pro,
54-
.iPhone14ProMax,
55-
.iPhone15,
56-
.iPhone15Plus,
57-
.iPhone15Pro,
58-
.iPhone15ProMax,
59-
60-
// iPods
61-
.iPodTouch1G,
62-
.iPodTouch2G,
63-
.iPodTouch3G,
64-
.iPodTouch4G,
65-
.iPodTouch5G,
66-
.iPodTouch6G,
67-
.iPodTouch7G,
68-
69-
// iPads
70-
.iPad1G(.wifi),
71-
.iPad1G(.cellular),
72-
.iPad2G(.wifi),
73-
.iPad2G(.gsm),
74-
.iPad2G(.cdma),
75-
.iPad2G(.newRevision),
76-
.iPad3G(.wifi),
77-
.iPad3G(.cdma),
78-
.iPad3G(.gsm),
79-
.iPad4G(.wifi),
80-
.iPad4G(.gsm),
81-
.iPad4G(.cdma),
82-
.iPad5G(.wifi),
83-
.iPad5G(.cellular),
84-
.iPad6G(.wifi),
85-
.iPad6G(.cellular),
86-
.iPad7G(.wifi),
87-
.iPad7G(.cellular),
88-
.iPad8G(.wifi),
89-
.iPad8G(.cellular),
90-
.iPad9G(.wifi),
91-
.iPad9G(.cellular),
92-
.iPad10G(.wifi),
93-
.iPad10G(.cellular),
94-
95-
// iPad Minis
96-
.iPadMini1(.wifi),
97-
.iPadMini1(.gsm),
98-
.iPadMini1(.cdma),
99-
.iPadMini2(.wifi),
100-
.iPadMini2(.gsmCdma),
101-
.iPadMini2(.china),
102-
.iPadMini3(.wifi),
103-
.iPadMini3(.gsmCdma),
104-
.iPadMini3(.china),
105-
.iPadMini4(.wifi),
106-
.iPadMini4(.cellular),
107-
.iPadMini5(.wifi),
108-
.iPadMini5(.cellular),
109-
.iPadMini6(.wifi),
110-
.iPadMini6(.cellular),
111-
112-
// iPad Air
113-
.iPadAir1G(.wifi),
114-
.iPadAir1G(.gsmCdma),
115-
.iPadAir1G(.china),
116-
.iPadAir2G(.wifi),
117-
.iPadAir2G(.cellular),
118-
.iPadAir3G(.wifi),
119-
.iPadAir3G(.cellular),
120-
.iPadAir4G(.wifi),
121-
.iPadAir4G(.cellular),
122-
.iPadAir5G(.wifi),
123-
.iPadAir5G(.cellular),
124-
125-
// iPad Pro
126-
.iPadPro9d7inch1G(.wifi),
127-
.iPadPro9d7inch1G(.cellular),
128-
.iPadPro12d9inch1G(.wifi),
129-
.iPadPro12d9inch1G(.cellular),
130-
.iPadPro10d5inch1G(.wifi),
131-
.iPadPro10d5inch1G(.cellular),
132-
.iPadPro12d9inch2G(.wifi),
133-
.iPadPro12d9inch2G(.cellular),
134-
.iPadPro11inch(.wifi),
135-
.iPadPro11inch(.wifiTera),
136-
.iPadPro11inch(.cellular),
137-
.iPadPro11inch(.cellularTera),
138-
.iPadPro11inch2G(.wifi),
139-
.iPadPro11inch2G(.cellular),
140-
.iPadPro12d9inch3G(.wifi),
141-
.iPadPro12d9inch3G(.wifiTera),
142-
.iPadPro12d9inch3G(.cellular),
143-
.iPadPro12d9inch3G(.cellularTera),
144-
.iPadPro12d9inch4G(.wifi),
145-
.iPadPro12d9inch4G(.cellular),
146-
.iPadPro11inch3G(.wifi),
147-
.iPadPro11inch3G(.wifiTera),
148-
.iPadPro11inch3G(.cellular),
149-
.iPadPro11inch3G(.cellularTera),
150-
.iPadPro12d9inch5G(.wifi),
151-
.iPadPro12d9inch5G(.wifiTera),
152-
.iPadPro12d9inch5G(.cellular),
153-
.iPadPro12d9inch5G(.cellularTera),
154-
.iPadPro11inch4G(.wifi),
155-
.iPadPro11inch4G(.cellular),
156-
.iPadPro12d9inch6G(.wifi),
157-
.iPadPro12d9inch6G(.cellular),
158-
159-
// Apple TV
160-
.appleTV4G,
161-
.appleTV4K,
162-
.appleTV4K2G,
163-
.appleTV4K3G
164-
]
5+
let allRealModels: [DeviceModel] =
6+
IPodModel.allCases.map { .iPod($0) } +
7+
IPhoneModel.allCases.map { .iPhone($0) } +
8+
IPadModel.allCases.map { .iPad($0) } +
9+
AppleWatchModel.allCases.map { .appleWatch($0) } +
10+
AppleTVModel.allCases.map { .appleTV($0) } +
11+
MacModel.allCases.map { .mac($0) }
12+
13+
return
14+
allRealModels +
15+
allRealModels.map { .simulator($0, arch: "arch") } +
16+
[
17+
.macCatalyst,
18+
.macDesignedForIpad
19+
]
16520
}
16621
}

Sources/DeviceIdentificator/DeviceModel+Helpers.swift

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,46 @@ import Foundation
33
public extension DeviceModel {
44
var isSimulator: Bool {
55
switch self {
6-
case .iPadSimulator, .iPhoneSimulator, .appleTVSimulator, .watchSimulator:
6+
case .simulator:
77
return true
88
default:
99
return false
1010
}
1111
}
1212

1313
var isAppleTV: Bool {
14-
return name.contains("Apple TV")
14+
switch self {
15+
case .appleTV, .simulator(.appleTV, _):
16+
return true
17+
default:
18+
return false
19+
}
1520
}
1621

1722
var isIpad: Bool {
18-
return name.contains("iPad")
23+
switch self {
24+
case .iPad, .simulator(.iPad, _):
25+
return true
26+
default:
27+
return false
28+
}
1929
}
2030

2131
var isIphone: Bool {
22-
return name.contains("iPhone")
32+
switch self {
33+
case .iPhone, .simulator(.iPhone, _):
34+
return true
35+
default:
36+
return false
37+
}
2338
}
2439

2540
var isWatch: Bool {
26-
return name.contains("Watch")
41+
switch self {
42+
case .appleWatch, .simulator(.appleWatch, _):
43+
return true
44+
default:
45+
return false
46+
}
2747
}
2848
}

Sources/DeviceIdentificator/DeviceModel+Name.swift

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,29 @@ import Foundation
33
public extension DeviceModel {
44
var name: String {
55
switch self {
6+
case .iPod(let model):
7+
return model.name
8+
case .iPhone(let model):
9+
return model.name
10+
case .iPad(let model):
11+
return model.name
12+
case .appleWatch(let model):
13+
return model.name
14+
case .appleTV(let model):
15+
return model.name
16+
case .mac(let model):
17+
return model.name
18+
case .macCatalyst:
19+
return "Mac Catalyst"
20+
case .macDesignedForIpad:
21+
return "Mac Designed for iPad"
22+
case .unknown(model: let model):
23+
return model
24+
case .simulator(let model, _):
25+
return model.name
26+
}
27+
/*
28+
switch self {
629

730
// iPhones
831
case .iPhone1G: return "iPhone 1G"
@@ -147,10 +170,8 @@ public extension DeviceModel {
147170
case .macCatalyst: return "Mac Catalyst"
148171
case .macDesignedForIpad: return "Mac Designed for iPad"
149172
case .mac(let variant): return "Mac \(variant.name)"
150-
}
151-
}
152173

153-
func hash(into hasher: inout Hasher) {
154-
hasher.combine(name)
174+
}
175+
*/
155176
}
156177
}

0 commit comments

Comments
 (0)