Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions Sources/DeviceIdentificator/DeviceModel+Capabilities.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ public extension DeviceModel {
.iPad(.air13InchM2Cellular),
.iPad(.mini6Wifi),
.iPad(.mini6Cellular),
.iPad(.mini7Wifi),
.iPad(.mini7Cellular),
.iPad(.pro1_11inchWifi),
.iPad(.pro1_11inchWifiTera),
.iPad(.pro1_11inchCellular),
Expand Down Expand Up @@ -135,4 +133,4 @@ public extension DeviceModel {
return false
}
}
}
}
9 changes: 9 additions & 0 deletions Sources/DeviceIdentificator/Models/AppleWatchModel+Name.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,15 @@ public extension DeviceModel.AppleWatchModel {
case .SE2_44mmCellular: return "Apple Watch SE2 44mm"
case .ultra: return "Apple Watch Ultra 1"
case .ultra2: return "Apple Watch Ultra 2"
case .series10_42mmGPS: return "Apple Watch Series 10 42mm"
case .series10_46mmGPS: return "Apple Watch Series 10 46mm"
case .series10_42mmCellular: return "Apple Watch Series 10 42mm"
case .series10_46mmCellular: return "Apple Watch Series 10 46mm"
case .ultra3: return "Apple Watch Ultra 3"
case .series11_42mmGPS: return "Apple Watch Series 11 42mm"
case .series11_46mmGPS: return "Apple Watch Series 11 46mm"
case .series11_42mmCellular: return "Apple Watch Series 11 42mm"
case .series11_46mmCellular: return "Apple Watch Series 11 46mm"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ public extension DeviceModel.AppleWatchModel {
case .series9_41mmCellular: return .appleS9
case .series9_45mmGPS: return .appleS9
case .series9_45mmCellular: return .appleS9
case .series10_42mmGPS: return .appleS10
case .series10_42mmCellular: return .appleS10
case .series10_46mmGPS: return .appleS10
case .series10_46mmCellular: return .appleS10
case .series11_42mmGPS: return .appleS10
case .series11_42mmCellular: return .appleS10
case .series11_46mmGPS: return .appleS10
case .series11_46mmCellular: return .appleS10
case .SE_40mmGPS: return .appleS5
case .SE_40mmCellular: return .appleS5
case .SE_44mmGPS: return .appleS5
Expand All @@ -47,6 +55,7 @@ public extension DeviceModel.AppleWatchModel {
case .SE2_44mmCellular: return .appleS8
case .ultra: return .appleS8
case .ultra2: return .appleS9
case .ultra3: return .appleS10
}
}
}
9 changes: 9 additions & 0 deletions Sources/DeviceIdentificator/Models/AppleWatchModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,14 @@ public extension DeviceModel {
case series9_41mmCellular = "Watch7,3"
case series9_45mmCellular = "Watch7,4"
case ultra2 = "Watch7,5"
case series10_42mmGPS = "Watch7,8"
case series10_46mmGPS = "Watch7,9"
case series10_42mmCellular = "Watch7,10"
case series10_46mmCellular = "Watch7,11"
case ultra3 = "Watch7,12"
case series11_42mmGPS = "Watch7,17"
case series11_46mmGPS = "Watch7,18"
case series11_42mmCellular = "Watch7,19"
case series11_46mmCellular = "Watch7,20"
}
}
12 changes: 9 additions & 3 deletions Sources/DeviceIdentificator/Models/IPadModel+Name.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public extension DeviceModel.IPadModel {
case .gen9Cellular: return "iPad 9G (Cellular)"
case .gen10Wifi: return "iPad 10G (Wifi)"
case .gen10Cellular: return "iPad 10G (Cellular)"
case .gen11Wifi: return "iPad 11G (Wifi)"
case .gen11Cellular: return "iPad 11G (Cellular)"

// Minis
case .mini1Wifi: return "iPad Mini 1 (Wifi)"
Expand All @@ -45,8 +47,8 @@ public extension DeviceModel.IPadModel {
case .mini5Cellular: return "iPad Mini 5 (Cellular)"
case .mini6Wifi: return "iPad Mini 6 (Wifi)"
case .mini6Cellular: return "iPad Mini 6 (Cellular)"
case .mini7Wifi: return "iPad Mini 7 (Wifi)"
case .mini7Cellular: return "iPad Mini 7 (Cellular)"
case .miniA17ProWifi: return "iPad Mini A17 Pro (Wifi)"
case .miniA17ProCellular: return "iPad Mini A17 Pro (Cellular)"

// Airs
case .air1Wifi: return "iPad Air 1 (Wifi)"
Expand All @@ -62,8 +64,12 @@ public extension DeviceModel.IPadModel {
case .air5Cellular: return "iPad Air 5 (Cellular)"
case .air11InchM2Wifi: return "iPad Air M2 11\" (Cellular)"
case .air11InchM2Cellular: return "iPad Air M2 11\" (Cellular)"
case .air13InchM2Wifi: return "iPad Air M2 13\" (Cellular)"
case .air13InchM2Wifi: return "iPad Air M2 13\" (Wifi)"
case .air13InchM2Cellular: return "iPad Air M2 13\" (Cellular)"
case .air11InchM3Wifi: return "iPad Air M3 11\" (Wifi)"
case .air11InchM3Cellular: return "iPad Air M3 11\" (Cellular)"
case .air13InchM3Wifi: return "iPad Air M3 13\" (Wifi)"
case .air13InchM3Cellular: return "iPad Air M3 13\" (Cellular)"

// Pros
case .pro1_9d7inchWifi: return "iPad Pro 1G 9.7\" (Wifi)"
Expand Down
50 changes: 48 additions & 2 deletions Sources/DeviceIdentificator/Models/IPadModel+Processor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,54 @@ import Foundation
public extension DeviceModel.IPadModel {
var processor: DeviceModel.Processor {
switch self {
default:
return .appleA10XFusion
// iPads
case .gen1Wifi, .gen1Cellular: return .appleA4
case .gen2Wifi, .gen2GSM, .gen2CDMA, .gen2NewRev: return .appleA5
case .gen3Wifi, .gen3CDMA, .gen3GSM: return .appleA5X
case .gen4Wifi, .gen4GSM, .gen4CDMA: return .appleA6X
case .gen5Wifi, .gen5Cellular: return .appleA9
case .gen6Wifi, .gen6Cellular: return .appleA10Fusion
case .gen7Wifi, .gen7Cellular: return .appleA10Fusion
case .gen8Wifi, .gen8Cellular: return .appleA12Bionic
case .gen9Wifi, .gen9Cellular: return .appleA13Bionic
case .gen10Wifi, .gen10Cellular: return .appleA14Bionic
case .gen11Wifi, .gen11Cellular: return .appleA14Bionic // Assumed, based on iPad 10

// Minis
case .mini1Wifi, .mini1GSM, .mini1CDMA: return .appleA5
case .mini2Wifi, .mini2GSMCDMA, .mini2China: return .appleA7
case .mini3Wifi, .mini3GSMCDMA, .mini3China: return .appleA7
case .mini4Wifi, .mini4Cellular: return .appleA8
case .mini5Wifi, .mini5Cellular: return .appleA12Bionic
case .mini6Wifi, .mini6Cellular: return .appleA15Bionic
case .miniA17ProWifi, .miniA17ProCellular: return .appleA17Pro

// Airs
case .air1Wifi, .air1GSMCDMA, .air1China: return .appleA7
case .air2Wifi, .air2Cellular: return .appleA8X
case .air3Wifi, .air3Cellular: return .appleA12Bionic
case .air4Wifi, .air4Cellular: return .appleA14Bionic
case .air5Wifi, .air5Cellular: return .appleM1
case .air11InchM2Wifi, .air11InchM2Cellular,
.air13InchM2Wifi, .air13InchM2Cellular: return .appleM2
case .air11InchM3Wifi, .air11InchM3Cellular,
.air13InchM3Wifi, .air13InchM3Cellular: return .appleM3

// Pros
case .pro1_9d7inchWifi, .pro1_9d7inchCellular,
.pro1_12d9inchWifi, .pro1_12d9inchCellular: return .appleA9X
case .pro1_10d5inchWifi, .pro1_10d5inchCellular,
.pro2_12d9inchWifi, .pro2_12d9inchCellular: return .appleA10XFusion
case .pro1_11inchWifi, .pro1_11inchWifiTera, .pro1_11inchCellular, .pro1_11inchCellularTera,
.pro3_12d9inchWifi, .pro3_12d9inchWifiTera, .pro3_12d9inchCellular, .pro3_12d9inchCellularTera: return .appleA12XBionic
case .pro2_11inchWifi, .pro2_11inchCellular,
.pro4_12d9inchWifi, .pro4_12d9inchCellular: return .appleA12ZBionic
case .pro3_11inchWifi, .pro3_11inchWifiTera, .pro3_11inchCellular, .pro3_11inchCellularTera,
.pro5_12d9inchWifi, .pro5_12d9inchWifiTera, .pro5_12d9inchCellular, .pro5_12d9inchCellularTera: return .appleM1
case .pro4_11inchWifi, .pro4_11inchCellular,
.pro6_12d9inchWifi, .pro6_12d9inchCellular: return .appleM2
case .pro_11inchM4Wifi, .pro_11inchM4Cellular,
.pro_13inchM4Wifi, .pro_13inchM4Cellular: return .appleM4
}
}
}
10 changes: 8 additions & 2 deletions Sources/DeviceIdentificator/Models/IPadModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public extension DeviceModel {
case gen9Cellular = "iPad12,2"
case gen10Wifi = "iPad13,18"
case gen10Cellular = "iPad13,19"
case gen11Wifi = "iPad15,7"
case gen11Cellular = "iPad15,8"

// Minis
case mini1Wifi = "iPad2,5"
Expand All @@ -44,8 +46,8 @@ public extension DeviceModel {
case mini5Cellular = "iPad11,2"
case mini6Wifi = "iPad14,1"
case mini6Cellular = "iPad14,2"
case mini7Wifi = "iPad16,1"
case mini7Cellular = "iPad16,2"
case miniA17ProWifi = "iPad16,1"
case miniA17ProCellular = "iPad16,2"

// Airs
case air1Wifi = "iPad4,1"
Expand All @@ -63,6 +65,10 @@ public extension DeviceModel {
case air11InchM2Cellular = "iPad14,9"
case air13InchM2Wifi = "iPad14,10"
case air13InchM2Cellular = "iPad14,11"
case air11InchM3Wifi = "iPad15,3"
case air11InchM3Cellular = "iPad15,4"
case air13InchM3Wifi = "iPad15,5"
case air13InchM3Cellular = "iPad15,6"

// Pros
case pro1_9d7inchWifi = "iPad6,3"
Expand Down
4 changes: 4 additions & 0 deletions Sources/DeviceIdentificator/Models/IPhoneModel+Name.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ public extension DeviceModel.IPhoneModel {
case .iPhone16Pro: return "iPhone 16 Pro"
case .iPhone16ProMax: return "iPhone 16 Pro Max"
case .iPhone16e: return "iPhone 16e"
case .iPhone17: return "iPhone 17"
case .iPhone17Pro: return "iPhone 17 Pro"
case .iPhone17ProMax: return "iPhone 17 Pro Max"
case .iPhoneAir: return "iPhone Air"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ public extension DeviceModel.IPhoneModel {
case .iPhone16Pro: return .appleA18Pro
case .iPhone16ProMax: return .appleA18Pro
case .iPhone16e: return .appleA18
case .iPhone17: return .appleA19
case .iPhone17Pro: return .appleA19Pro
case .iPhone17ProMax: return .appleA19Pro
case .iPhoneAir: return .appleA19
}
}
}
4 changes: 4 additions & 0 deletions Sources/DeviceIdentificator/Models/IPhoneModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,9 @@ public extension DeviceModel {
case iPhone16Pro = "iPhone17,1"
case iPhone16ProMax = "iPhone17,2"
case iPhone16e = "iPhone17,5"
case iPhone17 = "iPhone18,3"
case iPhone17Pro = "iPhone18,1"
case iPhone17ProMax = "iPhone18,2"
case iPhoneAir = "iPhone18,4"
}
}
117 changes: 112 additions & 5 deletions Sources/DeviceIdentificator/Processor+Specs.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,122 @@ import Foundation
public extension DeviceModel.Processor {
var architecture: String {
switch self {
default:
return "arm64" // Not really, check: https://apple.fandom.com/wiki/List_of_Apple_processors
// Early 32-bit ARMv7 processors
case .APL0278, .APL0298, .APL2298,
.appleA4, .appleA5, .appleA5X:
return "armv7"

// Custom 32-bit ARMv7s architecture by Apple
case .appleA6, .appleA6X:
return "armv7s"

// First generation of 64-bit ARMv8-A processors
case .appleA7, .appleA8, .appleA8X, .appleA9, .appleA9X,
.appleA10Fusion, .appleA10XFusion, .appleA11Bionic:
return "arm64"

// Processors with ARMv8.3-A (Pointer Authentication - arm64e) and newer
case .appleA12Bionic, .appleA12XBionic, .appleA12ZBionic,
.appleA13Bionic, .appleA14Bionic, .appleA15Bionic,
.appleA16Bionic, .appleA17Pro:
return "arm64e"

// Future processors (estimated to be arm64e or a successor)
case .appleA18, .appleA18Pro, .appleA19, .appleA19Pro:
return "arm64e" // Estimation

// Apple Silicon for Mac/iPad
case .appleM1, .appleM1Pro, .appleM1Max, .appleM1Ultra,
.appleM2, .appleM2Pro, .appleM2Max, .appleM2Ultra,
.appleM3, .appleM3Pro, .appleM3Max,
.appleM4, .appleM4Pro, .appleM4Max:
return "arm64e"

// Vision Pro Co-processor
case .appleR1:
return "arm64" // Specific architecture not public, but it's an ARM-based co-processor.

// Apple Watch processors
case .appleS1, .appleS1P, .appleS2:
return "armv7k" // 32-bit architecture for WatchOS
case .appleS3:
return "armv8-a" // 64-bit (32-bit compatibility mode)
case .appleS4, .appleS5,
.appleS6, .appleS7, .appleS8,
.appleS9, .appleS10:
return "arm64e" // 64-bit with Pointer Authentication

// Very early 32-bit ARMv6 processor
case .APL0098:
return "armv6"
}
}


/// The year the processor was introduced.
var introducedYear: Int? {
switch self {
default:
return nil //Check the same list
// Initial Samsung processors
case .APL0098: return 2007
case .APL0278: return 2008
case .APL0298: return 2009
case .APL2298: return 2010

// A-series
case .appleA4: return 2010
case .appleA5: return 2011
case .appleA5X: return 2012
case .appleA6: return 2012
case .appleA6X: return 2012
case .appleA7: return 2013
case .appleA8: return 2014
case .appleA8X: return 2014
case .appleA9: return 2015
case .appleA9X: return 2015
case .appleA10Fusion: return 2016
case .appleA10XFusion: return 2017
case .appleA11Bionic: return 2017
case .appleA12Bionic: return 2018
case .appleA12XBionic: return 2018
case .appleA12ZBionic: return 2020
case .appleA13Bionic: return 2019
case .appleA14Bionic: return 2020
case .appleA15Bionic: return 2021
case .appleA16Bionic: return 2022
case .appleA17Pro: return 2023
case .appleA18, .appleA18Pro: return 2024 // Estimated
case .appleA19, .appleA19Pro: return 2025 // Estimated

// M-series
case .appleM1: return 2020
case .appleM1Pro: return 2021
case .appleM1Max: return 2021
case .appleM1Ultra: return 2022
case .appleM2: return 2022
case .appleM2Pro: return 2023
case .appleM2Max: return 2023
case .appleM2Ultra: return 2023
case .appleM3: return 2023
case .appleM3Pro: return 2023
case .appleM3Max: return 2023
case .appleM4: return 2024
case .appleM4Pro: return 2024 // Estimated
case .appleM4Max: return 2024 // Estimated

// R-series
case .appleR1: return 2024

// S-series
case .appleS1: return 2015
case .appleS1P: return 2016
case .appleS2: return 2016
case .appleS3: return 2017
case .appleS4: return 2018
case .appleS5: return 2019
case .appleS6: return 2020
case .appleS7: return 2021
case .appleS8: return 2022
case .appleS9: return 2023
case .appleS10: return 2024 // Estimated
}
}
}
3 changes: 3 additions & 0 deletions Sources/DeviceIdentificator/Processor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ public extension DeviceModel {
case appleA17Pro
case appleA18
case appleA18Pro
case appleA19
case appleA19Pro

// Vision PRO:
case appleR1
Expand All @@ -65,6 +67,7 @@ public extension DeviceModel {
case appleS7
case appleS8
case appleS9
case appleS10
}
}

Loading