Skip to content

Commit ae50ef5

Browse files
committed
contract and spec fixes
1 parent a9d1e0f commit ae50ef5

5 files changed

Lines changed: 3310 additions & 2741 deletions

File tree

Lines changed: 348 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,348 @@
1+
//
2+
// DeviceModelNames.swift
3+
// URnetwork
4+
//
5+
// generated by scripts/generate_device_model_names.py — do not edit by hand.
6+
// Maps hardware identifiers (utsname.machine on iOS, sysctl hw.model on
7+
// macOS) to retail device names for the device spec. Source catalogs:
8+
// github.com/kyle-seongwoo-jun/apple-device-identifiers (MIT).
9+
//
10+
11+
import Foundation
12+
13+
enum DeviceModelNames {
14+
15+
/// the retail name for a hardware identifier, e.g.
16+
/// "iPhone17,2" -> "iPhone 16 Pro Max". nil for unknown identifiers
17+
/// (newer devices than this table; the caller falls back to the
18+
/// identifier itself, which still beats the generic model)
19+
static func name(forIdentifier identifier: String) -> String? {
20+
return names[identifier]
21+
}
22+
23+
private static let names: [String: String] = {
24+
var names = [String: String]()
25+
names.reserveCapacity(512)
26+
for line in table.split(separator: "\n") {
27+
if let tab = line.firstIndex(of: "\t") {
28+
names[String(line[..<tab])] = String(line[line.index(after: tab)...])
29+
}
30+
}
31+
return names
32+
}()
33+
34+
private static let table = """
35+
Mac13,1 Mac Studio (2022)
36+
Mac13,2 Mac Studio (2022)
37+
Mac14,10 MacBook Pro (16-inch, 2023)
38+
Mac14,12 Mac mini (2023)
39+
Mac14,13 Mac Studio (2023)
40+
Mac14,14 Mac Studio (2023)
41+
Mac14,15 MacBook Air (15-inch, M2, 2023)
42+
Mac14,2 MacBook Air (M2, 2022)
43+
Mac14,3 Mac mini (2023)
44+
Mac14,5 MacBook Pro (14-inch, 2023)
45+
Mac14,6 MacBook Pro (16-inch, 2023)
46+
Mac14,7 MacBook Pro (13-inch, M2, 2022)
47+
Mac14,8 Mac Pro (2023)
48+
Mac14,9 MacBook Pro (14-inch, 2023)
49+
Mac15,10 MacBook Pro (14-inch, Nov 2023)
50+
Mac15,11 MacBook Pro (16-inch, Nov 2023)
51+
Mac15,12 MacBook Air (13-inch, M3, 2024)
52+
Mac15,13 MacBook Air (15-inch, M3, 2024)
53+
Mac15,14 Mac Studio (2025)
54+
Mac15,3 MacBook Pro (14-inch, Nov 2023)
55+
Mac15,4 iMac (24-inch, 2023, Two ports)
56+
Mac15,5 iMac (24-inch, 2023, Four ports)
57+
Mac15,6 MacBook Pro (14-inch, Nov 2023)
58+
Mac15,7 MacBook Pro (16-inch, Nov 2023)
59+
Mac15,8 MacBook Pro (14-inch, Nov 2023)
60+
Mac15,9 MacBook Pro (16-inch, Nov 2023)
61+
Mac16,1 MacBook Pro (14-inch, 2024)
62+
Mac16,10 Mac mini (2024)
63+
Mac16,11 Mac mini (2024)
64+
Mac16,12 MacBook Air (13-inch, M4, 2025)
65+
Mac16,13 MacBook Air (15-inch, M4, 2025)
66+
Mac16,2 iMac (24-inch, 2024, Two ports)
67+
Mac16,3 iMac (24-inch, 2024, Four ports)
68+
Mac16,5 MacBook Pro (16-inch, 2024)
69+
Mac16,6 MacBook Pro (14-inch, 2024)
70+
Mac16,7 MacBook Pro (16-inch, 2024)
71+
Mac16,8 MacBook Pro (14-inch, 2024)
72+
Mac16,9 Mac Studio (2025)
73+
Mac17,2 MacBook Pro (14-inch, M5)
74+
MacBook10,1 MacBook (Retina, 12-inch, 2017)
75+
MacBook5,2 MacBook (13-inch, Early 2009)
76+
MacBook6,1 MacBook (13-inch, Late 2009)
77+
MacBook7,1 MacBook (13-inch, Mid 2010)
78+
MacBook8,1 MacBook (Retina, 12-inch, Early 2015)
79+
MacBook9,1 MacBook (Retina, 12-inch, Early 2016)
80+
MacBookAir10,1 MacBook Air (M1, 2020)
81+
MacBookAir2,1 MacBook Air (Mid 2009)
82+
MacBookAir3,1 MacBook Air (11-inch, Late 2010)
83+
MacBookAir3,2 MacBook Air (13-inch, Late 2010)
84+
MacBookAir4,1 MacBook Air (11-inch, Mid 2011)
85+
MacBookAir4,2 MacBook Air (13-inch, Mid 2011)
86+
MacBookAir5,1 MacBook Air (11-inch, Mid 2012)
87+
MacBookAir5,2 MacBook Air (13-inch, Mid 2012)
88+
MacBookAir6,1 MacBook Air (11-inch, Early 2014)
89+
MacBookAir6,2 MacBook Air (13-inch, Early 2014)
90+
MacBookAir7,1 MacBook Air (11-inch, Early 2015)
91+
MacBookAir7,2 MacBook Air (13-inch, 2017)
92+
MacBookAir8,1 MacBook Air (Retina, 13-inch, 2018)
93+
MacBookAir8,2 MacBook Air (Retina, 13-inch, 2019)
94+
MacBookAir9,1 MacBook Air (Retina, 13-inch, 2020)
95+
MacBookPro10,1 MacBook Pro (Retina, 15-inch, Early 2013)
96+
MacBookPro10,2 MacBook Pro (Retina, 13-inch, Early 2013)
97+
MacBookPro11,1 MacBook Pro (Retina, 13-inch, Late 2013)
98+
MacBookPro11,2 MacBook Pro (Retina, 15-inch, Late 2013)
99+
MacBookPro11,3 MacBook Pro (Retina, 15-inch, Late 2013)
100+
MacBookPro11,4 MacBook Pro (Retina, 15-inch, Mid 2015)
101+
MacBookPro11,5 MacBook Pro (Retina, 15-inch, Mid 2015)
102+
MacBookPro12,1 MacBook Pro (Retina, 13-inch, Early 2015)
103+
MacBookPro13,1 MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)
104+
MacBookPro13,2 MacBook Pro (13-inch, 2016, Four Thunderbolt 3 ports)
105+
MacBookPro13,3 MacBook Pro (15-inch, 2016)
106+
MacBookPro14,1 MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
107+
MacBookPro14,2 MacBook Pro (13-inch, 2017, Four Thunderbolt 3 ports)
108+
MacBookPro14,3 MacBook Pro (15-inch, 2017)
109+
MacBookPro15,1 MacBook Pro (15-inch, 2018)
110+
MacBookPro15,2 MacBook Pro (13-inch, 2018, Four Thunderbolt 3 ports)
111+
MacBookPro15,3 MacBook Pro (15-inch, 2019)
112+
MacBookPro15,4 MacBook Pro (13-inch, 2019, Two Thunderbolt 3 ports)
113+
MacBookPro16,1 MacBook Pro (16-inch, 2019)
114+
MacBookPro16,2 MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
115+
MacBookPro16,3 MacBook Pro (13-inch, 2020, Two Thunderbolt 3 ports)
116+
MacBookPro16,4 MacBook Pro (16-inch, 2019)
117+
MacBookPro17,1 MacBook Pro (13-inch, M1, 2020)
118+
MacBookPro18,1 MacBook Pro (16-inch, 2021)
119+
MacBookPro18,2 MacBook Pro (16-inch, 2021)
120+
MacBookPro18,3 MacBook Pro (14-inch, 2021)
121+
MacBookPro18,4 MacBook Pro (14-inch, 2021)
122+
MacBookPro4,1 MacBook Pro (15-inch, Early 2008)
123+
MacBookPro5,1 MacBook Pro (15-inch, Late 2008)
124+
MacBookPro5,2 MacBook Pro (17-inch, Early 2009)
125+
MacBookPro5,3 MacBook Pro (15-inch, 2.53GHz, Mid 2009)
126+
MacBookPro5,5 MacBook Pro (13-inch, Mid 2009)
127+
MacBookPro6,1 MacBook Pro (17-inch, Mid 2010)
128+
MacBookPro6,2 MacBook Pro (15-inch, Mid 2010)
129+
MacBookPro7,1 MacBook Pro (13-inch, Mid 2010)
130+
MacBookPro8,1 MacBook Pro (13-inch, Early 2011)
131+
MacBookPro8,2 MacBook Pro (15-inch, Early 2011)
132+
MacBookPro8,3 MacBook Pro (17-inch, Early 2011)
133+
MacBookPro9,1 MacBook Pro (15-inch, Mid 2012)
134+
MacBookPro9,2 MacBook Pro (13-inch, Mid 2012)
135+
MacPro4,1 Mac Pro (Early 2009)
136+
MacPro5,1 Mac Pro (Mid 2010)
137+
MacPro6,1 Mac Pro (Late 2013)
138+
MacPro7,1 Mac Pro (2019)
139+
Macmini3,1 Mac mini (Early 2009)
140+
Macmini4,1 Mac mini (Mid 2010)
141+
Macmini5,1 Mac mini (Mid 2011)
142+
Macmini5,2 Mac mini (Mid 2011)
143+
Macmini6,1 Mac mini (Late 2012)
144+
Macmini6,2 Mac mini (Late 2012)
145+
Macmini7,1 Mac mini (Late 2014)
146+
Macmini8,1 Mac mini (2018)
147+
Macmini9,1 Mac mini (M1, 2020)
148+
arm64 iPhone Simulator
149+
i386 iPhone Simulator
150+
iMac10,1 iMac (21.5-inch, Late 2009)
151+
iMac11,2 iMac (21.5-inch, Mid 2010)
152+
iMac11,3 iMac (27-inch, Mid 2010)
153+
iMac12,1 iMac (21.5-inch, Mid 2011)
154+
iMac12,2 iMac (27-inch, Mid 2011)
155+
iMac13,1 iMac (21.5-inch, Late 2012)
156+
iMac13,2 iMac (27-inch, Late 2012)
157+
iMac14,1 iMac (21.5-inch, Late 2013)
158+
iMac14,2 iMac (27-inch, Late 2013)
159+
iMac14,4 iMac (21.5-inch, Mid 2014)
160+
iMac15,1 iMac (Retina 5K, 27-inch, Late 2014)
161+
iMac16,1 iMac (21.5-inch, Late 2015)
162+
iMac16,2 iMac (Retina 4K, 21.5-inch, Late 2015)
163+
iMac17,1 iMac (Retina 5K, 27-inch, Late 2015)
164+
iMac18,1 iMac (21.5-inch, 2017)
165+
iMac18,2 iMac (Retina 4K, 21.5-inch, 2017)
166+
iMac18,3 iMac (Retina 5K, 27-inch, 2017)
167+
iMac19,1 iMac (Retina 5K, 27-inch, 2019)
168+
iMac19,2 iMac (Retina 4K, 21.5-inch, 2019)
169+
iMac20,1 iMac (Retina 5K, 27-inch, 2020)
170+
iMac20,2 iMac (Retina 5K, 27-inch, 2020)
171+
iMac21,1 iMac (24-inch, M1, 2021)
172+
iMac21,2 iMac (24-inch, M1, 2021)
173+
iMac9,1 iMac (20-inch, Early 2009)
174+
iMacPro1,1 iMac Pro (2017)
175+
iPad1,1 iPad
176+
iPad1,2 iPad
177+
iPad11,1 iPad mini (5th generation)
178+
iPad11,2 iPad mini (5th generation)
179+
iPad11,3 iPad Air (3rd generation)
180+
iPad11,4 iPad Air (3rd generation)
181+
iPad11,6 iPad (8th generation)
182+
iPad11,7 iPad (8th generation)
183+
iPad12,1 iPad (9th generation)
184+
iPad12,2 iPad (9th generation)
185+
iPad13,1 iPad Air (4th generation)
186+
iPad13,10 iPad Pro (12.9-inch) (5th generation)
187+
iPad13,11 iPad Pro (12.9-inch) (5th generation)
188+
iPad13,16 iPad Air (5th generation)
189+
iPad13,17 iPad Air (5th generation)
190+
iPad13,18 iPad (10th generation)
191+
iPad13,19 iPad (10th generation)
192+
iPad13,2 iPad Air (4th generation)
193+
iPad13,4 iPad Pro (11-inch) (3rd generation)
194+
iPad13,5 iPad Pro (11-inch) (3rd generation)
195+
iPad13,6 iPad Pro (11-inch) (3rd generation)
196+
iPad13,7 iPad Pro (11-inch) (3rd generation)
197+
iPad13,8 iPad Pro (12.9-inch) (5th generation)
198+
iPad13,9 iPad Pro (12.9-inch) (5th generation)
199+
iPad14,1 iPad mini (6th generation)
200+
iPad14,10 iPad Air 13-inch (M2)
201+
iPad14,11 iPad Air 13-inch (M2)
202+
iPad14,2 iPad mini (6th generation)
203+
iPad14,3 iPad Pro (11-inch) (4th generation)
204+
iPad14,4 iPad Pro (11-inch) (4th generation)
205+
iPad14,5 iPad Pro (12.9-inch) (6th generation)
206+
iPad14,6 iPad Pro (12.9-inch) (6th generation)
207+
iPad14,8 iPad Air 11-inch (M2)
208+
iPad14,9 iPad Air 11-inch (M2)
209+
iPad15,3 iPad Air 11-inch (M3)
210+
iPad15,4 iPad Air 11-inch (M3)
211+
iPad15,5 iPad Air 13-inch (M3)
212+
iPad15,6 iPad Air 13-inch (M3)
213+
iPad15,7 iPad (A16)
214+
iPad15,8 iPad (A16)
215+
iPad16,1 iPad mini (A17 Pro)
216+
iPad16,2 iPad mini (A17 Pro)
217+
iPad16,3 iPad Pro 11-inch (M4)
218+
iPad16,4 iPad Pro 11-inch (M4)
219+
iPad16,5 iPad Pro 13-inch (M4)
220+
iPad16,6 iPad Pro 13-inch (M4)
221+
iPad17,1 iPad Pro 11-inch (M5)
222+
iPad17,2 iPad Pro 11-inch (M5)
223+
iPad17,3 iPad Pro 13-inch (M5)
224+
iPad17,4 iPad Pro 13-inch (M5)
225+
iPad2,1 iPad 2
226+
iPad2,2 iPad 2
227+
iPad2,3 iPad 2
228+
iPad2,4 iPad 2
229+
iPad2,5 iPad mini
230+
iPad2,6 iPad mini
231+
iPad2,7 iPad mini
232+
iPad3,1 iPad (3rd generation)
233+
iPad3,2 iPad (3rd generation)
234+
iPad3,3 iPad (3rd generation)
235+
iPad3,4 iPad (4th generation)
236+
iPad3,5 iPad (4th generation)
237+
iPad3,6 iPad (4th generation)
238+
iPad4,1 iPad Air
239+
iPad4,2 iPad Air
240+
iPad4,3 iPad Air
241+
iPad4,4 iPad mini 2
242+
iPad4,5 iPad mini 2
243+
iPad4,6 iPad mini 2
244+
iPad4,7 iPad mini 3
245+
iPad4,8 iPad mini 3
246+
iPad4,9 iPad mini 3
247+
iPad5,1 iPad mini 4
248+
iPad5,2 iPad mini 4
249+
iPad5,3 iPad Air 2
250+
iPad5,4 iPad Air 2
251+
iPad6,11 iPad (5th generation)
252+
iPad6,12 iPad (5th generation)
253+
iPad6,3 iPad Pro (9.7-inch)
254+
iPad6,4 iPad Pro (9.7-inch)
255+
iPad6,7 iPad Pro (12.9-inch)
256+
iPad6,8 iPad Pro (12.9-inch)
257+
iPad7,1 iPad Pro (12.9-inch) (2nd generation)
258+
iPad7,11 iPad (7th generation)
259+
iPad7,12 iPad (7th generation)
260+
iPad7,2 iPad Pro (12.9-inch) (2nd generation)
261+
iPad7,3 iPad Pro (10.5-inch)
262+
iPad7,4 iPad Pro (10.5-inch)
263+
iPad7,5 iPad (6th generation)
264+
iPad7,6 iPad (6th generation)
265+
iPad8,1 iPad Pro (11-inch)
266+
iPad8,10 iPad Pro (11-inch) (2nd generation)
267+
iPad8,11 iPad Pro (12.9-inch) (4th generation)
268+
iPad8,12 iPad Pro (12.9-inch) (4th generation)
269+
iPad8,2 iPad Pro (11-inch)
270+
iPad8,3 iPad Pro (11-inch)
271+
iPad8,4 iPad Pro (11-inch)
272+
iPad8,5 iPad Pro (12.9-inch) (3rd generation)
273+
iPad8,6 iPad Pro (12.9-inch) (3rd generation)
274+
iPad8,7 iPad Pro (12.9-inch) (3rd generation)
275+
iPad8,8 iPad Pro (12.9-inch) (3rd generation)
276+
iPad8,9 iPad Pro (11-inch) (2nd generation)
277+
iPhone1,1 iPhone
278+
iPhone1,2 iPhone 3G
279+
iPhone10,1 iPhone 8
280+
iPhone10,2 iPhone 8 Plus
281+
iPhone10,3 iPhone X
282+
iPhone10,4 iPhone 8
283+
iPhone10,5 iPhone 8 Plus
284+
iPhone10,6 iPhone X
285+
iPhone11,2 iPhone XS
286+
iPhone11,4 iPhone XS Max
287+
iPhone11,6 iPhone XS Max
288+
iPhone11,8 iPhone XR
289+
iPhone12,1 iPhone 11
290+
iPhone12,3 iPhone 11 Pro
291+
iPhone12,5 iPhone 11 Pro Max
292+
iPhone12,8 iPhone SE (2nd generation)
293+
iPhone13,1 iPhone 12 mini
294+
iPhone13,2 iPhone 12
295+
iPhone13,3 iPhone 12 Pro
296+
iPhone13,4 iPhone 12 Pro Max
297+
iPhone14,2 iPhone 13 Pro
298+
iPhone14,3 iPhone 13 Pro Max
299+
iPhone14,4 iPhone 13 mini
300+
iPhone14,5 iPhone 13
301+
iPhone14,6 iPhone SE (3rd generation)
302+
iPhone14,7 iPhone 14
303+
iPhone14,8 iPhone 14 Plus
304+
iPhone15,2 iPhone 14 Pro
305+
iPhone15,3 iPhone 14 Pro Max
306+
iPhone15,4 iPhone 15
307+
iPhone15,5 iPhone 15 Plus
308+
iPhone16,1 iPhone 15 Pro
309+
iPhone16,2 iPhone 15 Pro Max
310+
iPhone17,1 iPhone 16 Pro
311+
iPhone17,2 iPhone 16 Pro Max
312+
iPhone17,3 iPhone 16
313+
iPhone17,4 iPhone 16 Plus
314+
iPhone17,5 iPhone 16e
315+
iPhone18,1 iPhone 17 Pro
316+
iPhone18,2 iPhone 17 Pro Max
317+
iPhone18,3 iPhone 17
318+
iPhone18,4 iPhone Air
319+
iPhone2,1 iPhone 3GS
320+
iPhone3,1 iPhone 4
321+
iPhone3,2 iPhone 4
322+
iPhone3,3 iPhone 4
323+
iPhone4,1 iPhone 4s
324+
iPhone5,1 iPhone 5
325+
iPhone5,2 iPhone 5
326+
iPhone5,3 iPhone 5c
327+
iPhone5,4 iPhone 5c
328+
iPhone6,1 iPhone 5s
329+
iPhone6,2 iPhone 5s
330+
iPhone7,1 iPhone 6 Plus
331+
iPhone7,2 iPhone 6
332+
iPhone8,1 iPhone 6s
333+
iPhone8,2 iPhone 6s Plus
334+
iPhone8,4 iPhone SE (1st generation)
335+
iPhone9,1 iPhone 7
336+
iPhone9,2 iPhone 7 Plus
337+
iPhone9,3 iPhone 7
338+
iPhone9,4 iPhone 7 Plus
339+
iPod1,1 iPod touch
340+
iPod2,1 iPod touch (2nd generation)
341+
iPod3,1 iPod touch (3rd generation)
342+
iPod4,1 iPod touch (4th generation)
343+
iPod5,1 iPod touch (5th generation)
344+
iPod7,1 iPod touch (6th generation)
345+
iPod9,1 iPod touch (7th generation)
346+
x86_64 iPhone Simulator
347+
"""
348+
}

0 commit comments

Comments
 (0)