From 9f147880c5a3b3d1bb122cd7a1a72291232ee0bb Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:36:56 +0800 Subject: [PATCH 1/9] Add models from Oct 2024 - Mar 2025 --- Sources/DeviceModel.swift | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Sources/DeviceModel.swift b/Sources/DeviceModel.swift index 264bff4..dd80bdc 100644 --- a/Sources/DeviceModel.swift +++ b/Sources/DeviceModel.swift @@ -46,14 +46,18 @@ public enum DeviceModel: CaseIterable { case iPhone15Pro, iPhone15ProMax case iPhone16, iPhone16Plus case iPhone16Pro, iPhone16ProMax + case iPhone16e case iPadFirstGen, iPadSecondGen, iPadThirdGen, iPadFourthGen, iPadFifthGen, iPadSixthGen, iPadSeventhGen, iPadEighthGen, iPadNinthGen, iPadTenthGen + case iPadA16 case iPadAir, iPadAir2, iPadAir3, iPadAir4, iPadAir5 case iPadAir11InchM2, iPadAir13InchM2 + case iPadAir11InchM3, iPadAir13InchM3 case iPadMini, iPadMini2, iPadMini3, iPadMini4, iPadMini5, iPadMini6 + case iPadMiniA17Pro case iPadPro9_7Inch, iPadPro10_5Inch, iPadPro12_9Inch, iPadPro12_9Inch_SecondGen @@ -184,6 +188,8 @@ extension DeviceModel { case (17, 2): return .iPhone16ProMax case (17, 3): return .iPhone16 case (17, 4): return .iPhone16Plus + + case (17, 5): return .iPhone16e default: return .unknown } @@ -212,21 +218,26 @@ extension DeviceModel { case (11, 6), (11, 7): return .iPadEighthGen case (12, 1), (12, 2): return .iPadNinthGen case (13, 18), (13, 19): return .iPadTenthGen + case (15, 7), (15, 8): return .iPadA16 + case (4, 1), (4, 2), (4, 3): return .iPadAir case (5, 3), (5, 4): return .iPadAir2 case (11, 3), (11, 4): return .iPadAir3 case (13, 1), (13, 2): return .iPadAir4 case (13, 16), (13, 17): return .iPadAir5 - case (14, 8), (14, 9): - return .iPadAir11InchM2 - case (14, 10), (14, 11): - return .iPadAir13InchM2 + case (14, 8), (14, 9): return .iPadAir11InchM2 + case (14, 10), (14, 11): return .iPadAir13InchM2 + case (15, 3), (15, 4): return .iPadAir11InchM3 + case (15, 5), (15, 6): return .iPadAir13InchM3 + case (2, 5), (2, 6), (2, 7): return .iPadMini case (4, 4), (4, 5), (4, 6): return .iPadMini2 case (4, 7), (4, 8), (4, 9): return .iPadMini3 case (5, 1), (5, 2): return .iPadMini4 case (11, 1), (11, 2): return .iPadMini5 case (14, 1), (14, 2): return .iPadMini6 + case (16, 1), (16, 2): return .iPadMiniA17Pro + case (6, 3), (6, 4): return .iPadPro9_7Inch case (7, 3), (7, 4): return .iPadPro10_5Inch case (8, 1), (8, 2), (8, 3), (8, 4): return .iPadPro11Inch @@ -314,7 +325,6 @@ extension DeviceModel { extension DeviceModel { public var hasNotch: Bool { switch self { - case .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR: return true case .iPhone11, .iPhone11Pro, .iPhone11ProMax: @@ -325,7 +335,8 @@ extension DeviceModel { return true case .iPhone14, .iPhone14Plus: return true - + case .iPhone16e: + return true default: return false } From e0268382c080ab074ecc8222996720c00120559d Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:38:24 +0800 Subject: [PATCH 2/9] update test for iPhone 16e --- Tests/DeviceModelTests.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tests/DeviceModelTests.swift b/Tests/DeviceModelTests.swift index a171a7c..911518d 100644 --- a/Tests/DeviceModelTests.swift +++ b/Tests/DeviceModelTests.swift @@ -262,6 +262,11 @@ class DeviceModelTests: XCTestCase { XCTAssert(deviceModel == .iPhone16ProMax, "DeviceModel - .iPhone16ProMax is failing") } + func testDeviceModelIPhone16e() { + let deviceModel = DeviceModel(identifier: Identifier("iPhone17,5")) + XCTAssert(deviceModel == .iPhone16e, "DeviceModel - .iPhone16e is failing") + } + // MARK: - iPad Device Model tests func testDeviceModelIPadFirstGen() { @@ -531,7 +536,8 @@ class DeviceModelTests: XCTestCase { .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPhone12, .iPhone12Pro, .iPhone12ProMax, .iPhone12mini, .iPhone13, .iPhone13mini, .iPhone13Pro, .iPhone13ProMax, - .iPhone14, .iPhone14Plus] + .iPhone14, .iPhone14Plus, + .iPhone16e] let noNotchModels: [DeviceModel] = DeviceModel.allCases.filter( { !notchModels.contains($0) }) From a9b3095a585299b8d3f16bff14063f3c82b7adcb Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:39:42 +0800 Subject: [PATCH 3/9] Add iPhone 16e to Identifier --- Sources/Identifier.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/Identifier.swift b/Sources/Identifier.swift index 7c624b6..098e849 100644 --- a/Sources/Identifier.swift +++ b/Sources/Identifier.swift @@ -198,7 +198,9 @@ extension Identifier: CustomStringConvertible { return "iPhone 16 Pro" case (17, 2): return "iPhone 16 Pro Max" - + + case (17, 5): + return "iPhone 16e" default: return "unknown" From 7d7d340178429428fe80d3cfae961830ca336db8 Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:46:20 +0800 Subject: [PATCH 4/9] Add iPads (mini,Air,_) --- Sources/Identifier.swift | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Sources/Identifier.swift b/Sources/Identifier.swift index 098e849..3744daa 100644 --- a/Sources/Identifier.swift +++ b/Sources/Identifier.swift @@ -419,6 +419,27 @@ extension Identifier: CustomStringConvertible { case (16, 6): return "iPad Pro M4 (13 inch, Wi-Fi+5G)" + case (16, 1): + return "iPad mini (A17 Pro, Wi-Fi)" + case (16, 2): + return "iPad mini (A17 Pro, Wi-Fi+5G)" + + case (15, 7): + return "iPad (A16, Wi-Fi)" + case (15, 8): + return "iPad (A16, Wi-Fi+5G)" + + case (15, 3): + return "iPad Air M3 (11 inch, Wi-Fi)" + case (15, 4): + return "iPad Air M3 (11 inch, Wi-Fi+5G)" + case (15, 6): + return "iPad Air M3 (13 inch, Wi-Fi)" + case (15, 7): + return "iPad Air M3 (13 inch, Wi-Fi+5G)" + + + default: return "unknown" } From 5de0413d22cd32ebe47e84a7093eef4d84aaec8c Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Tue, 23 Sep 2025 23:59:15 +0800 Subject: [PATCH 5/9] Add watch models --- Sources/DeviceModel.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Sources/DeviceModel.swift b/Sources/DeviceModel.swift index dd80bdc..4d133c8 100644 --- a/Sources/DeviceModel.swift +++ b/Sources/DeviceModel.swift @@ -90,6 +90,9 @@ public enum DeviceModel: CaseIterable { case series9 case ultra2 case series10 + case series11 + case ultra3 + case se3 #endif case unknown @@ -313,6 +316,9 @@ extension DeviceModel { case (7, 1), (7, 2), (7, 3), (7, 4): return .series9 case (7, 5): return .ultra2 case (7, 8), (7, 9), (7, 10), (7, 11): return .series10 + case (7, 17), (7, 18), (7, 19), (7, 20): return .series11 + case (7, 12): return .ultra3 + case (7, 13), (7, 14), (7, 15), (7, 16): return .se3 default: return .unknown } } From 2d1e5b84b377fccce5f2fb65bbe87e51bf766d48 Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Wed, 24 Sep 2025 00:03:19 +0800 Subject: [PATCH 6/9] Add iPhone 17 models + Air --- Sources/DeviceModel.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Sources/DeviceModel.swift b/Sources/DeviceModel.swift index 4d133c8..df8ff61 100644 --- a/Sources/DeviceModel.swift +++ b/Sources/DeviceModel.swift @@ -47,6 +47,9 @@ public enum DeviceModel: CaseIterable { case iPhone16, iPhone16Plus case iPhone16Pro, iPhone16ProMax case iPhone16e + case iPhoneAir + case iPhone17 + case iPhone17Pro, iPhone17ProMax case iPadFirstGen, iPadSecondGen, iPadThirdGen, iPadFourthGen, iPadFifthGen, iPadSixthGen, iPadSeventhGen, iPadEighthGen, iPadNinthGen, iPadTenthGen case iPadA16 @@ -194,6 +197,11 @@ extension DeviceModel { case (17, 5): return .iPhone16e + case (18, 1): return .iPhone17Pro + case (18, 2): return .iPhone17ProMax + case (18, 3): return .iPhone17 + case (18, 4): return .iPhoneAir + default: return .unknown } } @@ -356,6 +364,8 @@ extension DeviceModel { return true case .iPhone16, .iPhone16Plus, .iPhone16Pro, .iPhone16ProMax: return true + case .iPhone17, .iPhoneAir, .iPhone17Pro, .iPhone17ProMax: + return true default: return false } From 6385c7bbea08d1eed194cb87bf6bc287fecc8c02 Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Wed, 24 Sep 2025 00:09:23 +0800 Subject: [PATCH 7/9] Add watches to Identifier --- Sources/Identifier.swift | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Sources/Identifier.swift b/Sources/Identifier.swift index 3744daa..a50e55d 100644 --- a/Sources/Identifier.swift +++ b/Sources/Identifier.swift @@ -543,6 +543,24 @@ extension Identifier: CustomStringConvertible { return "Apple Watch Series 10, 42mm case (GPS + Cellular)" case (7, 11): return "Apple Watch Series 10, 46mm case (GPS + Cellular)" + case (7, 12): + return "Apple Watch Ultra 3" + case (7, 13): + return "Apple Watch SE 3, 40mm case (GPS)" + case (7, 14): + return "Apple Watch SE 3, 44mm case (GPS)" + case (7, 15): + return "Apple Watch SE 3, 40mm case (GPS + Cellular)" + case (7, 16): + return "Apple Watch SE 3, 44mm case (GPS + Cellular)" + case (7, 17): + return "Apple Watch Series 11, 42mm case (GPS)" + case (7, 18): + return "Apple Watch Series 11, 46mm case (GPS)" + case (7, 19): + return "Apple Watch Series 11, 42mm case (GPS + Cellular)" + case (7, 20): + return "Apple Watch Series 11, 46mm case (GPS + Cellular)" default: return "unknown" } From 84e7675cd2267cad67002047629104dc59165582 Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Wed, 24 Sep 2025 00:10:13 +0800 Subject: [PATCH 8/9] Add iPhones to Identifier --- Sources/Identifier.swift | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Sources/Identifier.swift b/Sources/Identifier.swift index a50e55d..d0c8fcc 100644 --- a/Sources/Identifier.swift +++ b/Sources/Identifier.swift @@ -201,6 +201,15 @@ extension Identifier: CustomStringConvertible { case (17, 5): return "iPhone 16e" + + case (18, 3): + return "iPhone 17" + case (18, 4): + return "iPhone Air" + case (18, 1): + return "iPhone 17 Pro" + case (18, 2): + return "iPhone 17 Pro Max" default: return "unknown" From 87e7fe7e587cf88557869bd05d17dfa1c4706211 Mon Sep 17 00:00:00 2001 From: Vincent Neo <23420208+vincentneo@users.noreply.github.com> Date: Wed, 24 Sep 2025 00:12:03 +0800 Subject: [PATCH 9/9] watch sizes updated --- Sources/Screen.swift | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/Screen.swift b/Sources/Screen.swift index 8dc0a55..44b0915 100644 --- a/Sources/Screen.swift +++ b/Sources/Screen.swift @@ -128,19 +128,21 @@ extension Screen { case (1, 2), (2, 4), (2, 7), (3, 2), (3, 4): return .medium(mm: 42) case (4, 1), (4, 3), (5, 1), (5, 3), (5, 9), - (5, 11), (6, 1), (6, 3), (6, 10), (6, 12): return .small(mm: 40) + (5, 11), (6, 1), (6, 3), (6, 10), (6, 12), + (7, 13), (7, 15): return .small(mm: 40) case (4, 2), (4, 4), (5, 2), (5, 4), (5, 10), - (5, 12), (6, 2), (6, 4), (6, 11), (6, 13): return .medium(mm: 44) + (5, 12), (6, 2), (6, 4), (6, 11), (6, 13), + (7, 14), (7, 16): return .medium(mm: 44) case (6, 6), (6, 8), (6, 14), (6, 16), (7, 1), (7, 3): return .small(mm: 41) case (6, 7), (6, 9), (6, 15), (6, 17), (7, 2), (7, 4): return .medium(mm: 45) - case (6, 18), (7, 5): return .ultra(mm: 49) + case (6, 18), (7, 5), (7, 12): return .ultra(mm: 49) - case (7, 8), (7, 10): return .small(mm: 42) - case (7, 9), (7, 11): return .medium(mm: 46) + case (7, 8), (7, 10), (7, 17), (7, 19): return .small(mm: 42) + case (7, 9), (7, 11), (7, 18), (7, 20): return .medium(mm: 46) default: return nil }