@@ -4,12 +4,26 @@ import UIKit
44import CoreTelephony
55
66extension DeviceInfo {
7+
8+ /// Returns the specific model name of the current device.
9+ ///
10+ /// `UIDevice.model` only provides a generic model name (e.g., "iPhone"). This method, on the other hand,
11+ /// utilizes `sysctlbyname` to retrieve the detailed hardware identifier (e.g., "iPhone10,3" for iPhone X).
12+ /// If `sysctlbyname` fails, the function returns `nil`.
13+ var detailedModelName : String ? {
14+ var size : Int = 0
15+ guard sysctlbyname ( " hw.machine " , nil , & size, nil , 0 ) == 0 else { return nil }
16+ var machine = [ CChar] ( repeating: 0 , count: size)
17+ guard sysctlbyname ( " hw.machine " , & machine, & size, nil , 0 ) == 0 else { return nil }
18+ return String ( cString: machine)
19+ }
20+
721 static func current( with settings: FieldSettings , includeCarrier: Bool ) -> DeviceInfo {
822 let device = UIDevice . current
923 var deviceInfo = DeviceInfo ( )
1024 deviceInfo. type = getDeviceType ( device)
1125 deviceInfo. platform = getPlatform ( device)
12- deviceInfo. model = getMacModel ( ) ?? device. model
26+ deviceInfo. model = getMacModel ( ) ?? deviceInfo . detailedModelName ?? device. model
1327 if includeCarrier,
1428 let carrier = getCarrier ( ) {
1529 deviceInfo. carrier = carrier
0 commit comments