我有一个非常简单的应用程序,具有一个 View ,其中包含多个UILabel。在Simulator中运行时,Xcode控制台返回错误:



模拟器本身仅显示白屏。我也尝试过在具有相同白屏的开发人员设备上运行它。我已经搜索了文档,但是找不到对MGIsDeviceOneOfType的任何引用。
该应用程序是在MacOS 10.14上的Xcode 10 beta中用Swift编写的。我正在尝试在运行目标软件(12.0)的iPhone 7-X Simulator和开发版iPhone 7上运行它。

最佳答案

MobileGestalt
libMobileGestalt.dylib为iOS的所有属性提供了一个中央存储库。它可以类似于OS X的格式塔(Gestalt),后者是CoreServices的一部分。 OS X的格式塔(Gestalt)例如Gestalt Manager被记录下来,从10.8开始不推荐使用。 Apple完全没有记录MobileGestalt ,因为它是一个私有(private)库。
MobileGestalt允许测试在不同模拟器上可能兼容或不兼容的系统属性。
iOS中有很多系统进程和应用程序都依赖于MobileGestalt,该文件位于/usr/lib/libMobileGestalt.dylib。它更像是一个基本库,但是其公开的API遵循Apple框架约定,并使用MG API前缀(例如MGIsDeviceOneOfType)。
如果您在iOS文件系统上寻找MobileGestalt,则找不到它-像所有私有(private)框架和库一样,它已经预链接到/System/Library/Caches/...etc。如果您喜欢黑客和笔测试,则可以使用工具将其提取。
MobileGestalt可提供有关系统各个方面的大量信息-大约200个查询。这里有一些。

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");
还有数百个AirplaneModeMobileEquipmentIdentifier等。
MobileGestalt维护一个OSType选择器代码表。
例如,消息中的 c:890 : libMobileGestalt MobileGestalt.c:890:此平台不支持MGIsDeviceOneOfType。 在这种情况下,MGIsDeviceOneOfType MobileGestalt库的方法/属性。
无需检查模拟器版本,而是有一个单独的选择器可以直接查询模拟器的功能。该消息很可能表明模拟器版本与Xcode版本和/或模拟器上不受支持的API之间不兼容。

10-06 09:05