@@ -652,13 +652,14 @@ struct DeviceManager {
652
652
let boardID = getIORegInfo ( serviceTarget: " board-id " ) ?? " Unknown "
653
653
let bridgeID = getBridgeModelID ( )
654
654
let hardwareModelID = getIORegInfo ( serviceTarget: " target-sub-type " ) ?? " Unknown "
655
+ let gestaltModelStringID = getKeyResultFromGestalt ( " HWModelStr " )
655
656
656
657
LogManager . debug ( " Hardware Board ID: \( boardID) " , logger: utilsLog)
657
658
LogManager . debug ( " Hardware Bridge ID: \( bridgeID) " , logger: utilsLog)
658
659
LogManager . debug ( " Hardware Model ID: \( hardwareModelID) " , logger: utilsLog)
660
+ LogManager . debug ( " Gestalt Hardware Model ID: \( gestaltModelStringID) " , logger: utilsLog)
659
661
660
-
661
- return [ boardID. trimmingCharacters ( in: . whitespacesAndNewlines) , bridgeID. trimmingCharacters ( in: . whitespacesAndNewlines) , hardwareModelID. trimmingCharacters ( in: . whitespacesAndNewlines) ]
662
+ return [ boardID. trimmingCharacters ( in: . whitespacesAndNewlines) , bridgeID. trimmingCharacters ( in: . whitespacesAndNewlines) , hardwareModelID. trimmingCharacters ( in: . whitespacesAndNewlines) , gestaltModelStringID. trimmingCharacters ( in: . whitespacesAndNewlines) ]
662
663
}
663
664
664
665
func getHardwareUUID( ) -> String {
@@ -706,6 +707,29 @@ struct DeviceManager {
706
707
}
707
708
}
708
709
710
+ func getKeyResultFromGestalt( _ keyname: String ) -> String {
711
+ let handle = dlopen ( " /usr/lib/libMobileGestalt.dylib " , RTLD_NOW)
712
+ guard handle != nil else {
713
+ return " Unknown "
714
+ }
715
+ defer {
716
+ dlclose ( handle)
717
+ }
718
+
719
+ let symbol = dlsym ( handle, " MGGetStringAnswer " )
720
+ guard symbol != nil else {
721
+ return " Unknown "
722
+ }
723
+
724
+ let function = unsafeBitCast ( symbol, to: ( @convention( c) ( String) - > String? ) . self)
725
+
726
+ guard let result = function ( keyname) else {
727
+ return " Unknown "
728
+ }
729
+
730
+ return result
731
+ }
732
+
709
733
func getPatchOSVersion( ) -> Int {
710
734
let PatchOSVersion = ProcessInfo ( ) . operatingSystemVersion. patchVersion
711
735
LogManager . info ( " Patch OS Version: \( PatchOSVersion) " , logger: utilsLog)
0 commit comments