仿真上的Xcode错误:此平台不支持MGIsDeviceOneOfType

Woo*_*man 93 xcode ios swift

我有一个非常简单的应用程序,只有一个视图,包含几个UILabel.在运行模拟时,Xcode控制台返回错误:

"libMobileGestalt MobileGestalt.c:875:此平台不支持MGIsDeviceOneOfType."

模拟器本身只显示一个白色屏幕.我也尝试在具有相同白屏的开发者设备上运行它.我搜索过文档,但找不到任何对'MGIsDeviceOneOfType'的引用.该应用程序是在Mac OS 10.14上的Xcode 10 beta版中用Swift编写的.我试图在iPhone 7-X模拟器以及开发iPhone 7上运行它,所有这些都运行目标软件(12.0).

tym*_*mac 24

MobileGestalt

libMobileGestalt.dylib为所有iOS的属性的中央存储库.它可以类似于OS X的Gestalt,它是其中的一部分CoreServices.OS X的格式塔被记录为例如格式塔管理器,并且自10.8起已被弃用.MobileGestalt完全没有被Apple记录,因为它是一个私人图书馆.

MobileGestalt允许测试在不同模拟器上可能兼容或不兼容的系统属性.

iOS中有相当多的系统进程和应用程序依赖于MobileGestalt,它位于/usr/lib/libMobileGestalt.dylib.它更像是一个基本库,但其公开的API遵循Apple框架约定并使用MGAPI前缀MGIsDeviceOneOfType.

如果您在iOS文件系统上查找MobileGestalt,您将无法找到它 - 就像所有私有框架和库一样,它已预先链接到/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");
Run Code Online (Sandbox Code Playgroud)

有数百例如AirplaneMode,MobileEquipmentIdentifier等等.

MobileGestalt维护一个OSType选择器代码表.例如:消息中的c:890:libMobileGestalt MobileGestalt.c:890:此平台不支持MGIsDeviceOneOfType.在这种情况下MGIsDeviceOneOfType,MobileGestalt库的方法.

不是检查模拟器版本,而是有一个单独的选择器,用于直接查询模拟器的功能.这些消息很可能表明模拟器版本与Xcode版本和/或模拟器上不支持的API之间不兼容.

  • 这似乎是问题的逻辑原因。您最终做了什么来解决此问题? (3认同)

Ale*_*ano 11

我已通过禁用项目垃圾成功删除了它。

转到< 项目名称 > ->方案 -> 编辑方案,然后转到“运行”(左侧菜单)并添加以下环境变量:

名称:OS_ACTIVITY_MODE,:禁用

在此处输入图片说明


ank*_*ara 8

在我的情况下:检查您的应用程序委托方法 - didFinishLaunching.我私有并得到了错误.删除"私人"后一切正常

  • 我不是私人的. (5认同)

小智 7

我刚刚安装了Xcode 10 Beta并遇到了同样的问题.跑Xcode 9.4.1,问题就消失了.

  • 这不是一个可行的答案IMO,特别是现在xcode 10在野外仍然存在这个问题.这个问题并没有在xcode 9.4.1上"消失" - 它从未存在过.这是一回事"不幸的是,这是一个xcode 10问题,我们可能需要耐心等待." 完全忽略它是另一回事. (10认同)

Jho*_*awk 6

仅在模拟器上测试/调试时才会发生此错误。

模拟器越新越好。

案例:我运行模拟器iPhone 8,并且在调试器中收到了此消息。

解决方案:我改用较新的模拟器,调试器中没有错误消息。


de.*_*de. 5

在Xcode 10.0上从GitHub打开某些项目时,请执行此操作。

务实的解决方案是:只需多次单击“继续执行程序”,并可能禁用异常断点。显然,异常是可以恢复的。

这不是一个真正的解决方案,但是对我而言已经足够了。


Bha*_*m C 5

就我而言,目标的部署目标是在iOS 8上。当我将其升级到iOS 10.3时,它在Simulator和设备上都运行良好。

更改部署目标以修复libMobileGestalt错误


ano*_*dev 5

正在看到这个问题。使用Xcode 10.1 创建了一个全新的项目-除了显示白屏外什么都不做。发现它正在针对较旧设备的模拟器上显示。例如,iPad Pro(12.9英寸)和iPad Pro(12.9英寸)(第2代)显示了问题,但iPad Pro(12.9英寸)(第3代)没有出现问题。对于iPhone XR模拟器不显示。

基本上看起来很烦。