ios - unable - libmobilegestalt mobilegestalt.c:890: mgisdeviceoneoftype is not supported on this platform.




模拟器上的Xcode错误:此平台不支持MGIsDeviceOneOfType (11)

只有在模拟器上进行测试/调试时才会出现此错误。

模拟器越新越好。

案例: 我运行模拟器iPhone 8加上我在调试器中收到此消息。

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

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

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

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


在Xcode 10.0上从GitHub打开一些项目时,请参阅此内容。

实用的解决方案是:多次点击 “继续执行程序” 并可能 禁用您的异常断点 。 显然这个例外是可以恢复的。

这不是一个真正的解决方案,但在那一点上它对我来说已经足够了。


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


奇怪错误发生的常规方式有助于:

1)清洁项目;
2)关闭模拟器;
3)重新安装pods。

Xcode 10。


对我来说有用的是在 general > Deployment Info > Main Interface 更改为CDVLaunchScreen,并在 general > App Icons and Launch Images > Launch Screen File 到CDVLaunchScreen中执行相同的操作。

我来自Ionic, 所以对于那些使用Swift / Objective-C开发的人来说 这可能不是问题。


对我来说,有问题的模拟器,我选择了硬件 - >删除所有内容和设置。

重新启动模拟器后,按预期启动我的应用程序再次工作。


我去了XCode - >首选项 - >组件勾选了所有模拟器和复选框以自动安装更新,然后“检查并立即安装”并在它们全部更新时离开了几个小时。

现在问题已经消失了 - 事实上,正如所提到的那样。 带有旧的新XCode - 未更新的模拟器。


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

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

名称 :OS_ACTIVITY_MODE, :禁用


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

基本上看起来很烦人。


我通过在主队列上调用 .sync 导致死锁( DispatchQueue.main.sync {} )来解决此错误。 我打算打电话给 .async


MobileGestalt

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

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

iOS中有相当多的系统进程和应用程序依赖于MobileGestalt,它位于/usr/lib/libMobileGestalt.dylib。 它更像是一个基本库,但其公开的API遵循Apple框架约定,并使用 MG API前缀,例如 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");

还有数百种,例如 AirplaneModeMobileEquipmentIdentifier 等。

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

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







xcode