Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xcode Error on Simulator: MGIsDeviceOneOfType is not supported on this platform

Tags:

xcode

ios

swift

I have a very simple application with a single view, containing several UILabels. Upon running in Simulator, the Xcode console returns the error:

libMobileGestalt MobileGestalt.c:875: MGIsDeviceOneOfType is not supported on this platform.

The Simulator itself just shows a white screen. I've also tried running it on a developer device with the same white screen. I've searched documentation but can't find any reference to MGIsDeviceOneOfType. The application is written in Swift in Xcode 10 beta on macOS 10.14. I am attempting to run it on the iPhone 7-X Simulators, as well as a development iPhone 7, all running the target software (12.0).

like image 691
Woodman Avatar asked Jun 05 '18 13:06

Woodman


1 Answers

MobileGestalt

The libMobileGestalt.dylib provides a central repository for all of the iOS's properties. It can be analogous to OS X's Gestalt, which is part of CoreServices. OS X's Gestalt is documented for example Gestalt Manager and has been deprecated as of 10.8. MobileGestalt is entirely undocumented by Apple as it is a private library.

MobileGestalt allows for the testing of system properties that may or may not be compatible on different simulators.

Quite a few system processes and apps in iOS rely on MobileGestalt, which is located at /usr/lib/libMobileGestalt.dylib. It's more of a basic library, but its exposed APIs follow the Apple framework conventions and uses the MG API prefix for example MGIsDeviceOneOfType.

If you look for MobileGestalt on the iOS filesystem you won't find it - like all private frameworks and libraries, it has been prelinked into the /System/Library/Caches/...etc. If you like hacking and pen-testing then you can use tools to extract it.

MobileGestalt provides plenty of information - around 200 or so queries - on various aspects of the system. Here are a few.

libMobileGestalt.dylib //Answers to MG queries  MGCopyAnswer(@"5MSZn7w3nnJp22VbpqaxLQ"); MGCopyAnswer(@"7mV26K/1a+wTtqiunvHMUQ"); MGCopyAnswer(@"BasebandAPTimeSync"); MGCopyAnswer(@"BasebandPostponementStatus"); MGCopyAnswer(@"BasebandPostponementStatusBlob"); MGCopyAnswer(@"BasebandSecurityInfoBlob"); MGCopyAnswer(@"BasebandStatus"); MGCopyAnswer(@"BuildVersion"); MGCopyAnswer(@"CoreRoutineCapability"); MGCopyAnswer(@"DeviceClass"); MGCopyAnswer(@"DeviceClassNumber"); MGCopyAnswer(@"DeviceName"); MGCopyAnswer(@"DeviceSupports1080p"); MGCopyAnswer(@"DeviceSupports720p"); MGCopyAnswer(@"DiskUsage"); MGCopyAnswer(@"GSDeviceName"); MGCopyAnswer(@"HWModelStr"); MGCopyAnswer(@"HasBaseband"); MGCopyAnswer(@"InternalBuild"); MGCopyAnswer(@"InverseDeviceID"); MGCopyAnswer(@"IsSimulator"); MGCopyAnswer(@"MLBSerialNumber"); MGCopyAnswer(@"MaxH264PlaybackLevel"); MGCopyAnswer(@"MinimumSupportediTunesVersion"); MGCopyAnswer(@"PasswordConfigured"); MGCopyAnswer(@"PasswordProtected"); MGCopyAnswer(@"ProductType"); MGCopyAnswer(@"ProductVersion"); MGCopyAnswer(@"RegionCode"); MGCopyAnswer(@"RegionalBehaviorNTSC"); MGCopyAnswer(@"RegionalBehaviorNoPasscodeLocationTiles"); MGCopyAnswer(@"ReleaseType"); MGCopyAnswer(@"SIMStatus"); 

There are hundreds more e.g. AirplaneMode, MobileEquipmentIdentifier, etc.

MobileGestalt maintains a table of OSType selector codes. for example c:890 in the message: libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform. In this case MGIsDeviceOneOfType is a method/property of the MobileGestalt library.

Instead of checking the simulator version there is a separate selector for directly querying the capabilities of the simulator. The messages most likely indicate incompatibilities between simulator versions and Xcode versions and/or unsupported APIs on the simulator.

like image 152
Edison Avatar answered Oct 06 '22 00:10

Edison