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

时间:2018-06-05 13:27:37

标签: ios swift xcode

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

  

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

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

18 个答案:

答案 0 :(得分:21)

MobileGestalt

libMobileGestalt.dylib 为iOS的所有属性提供了一个中央存储库。它可以类似于OS X的格式塔(Gestalt),它是CoreServices的一部分。例如,Gestalt Manager中记录了OS X的格式塔,自10.8起已弃用。苹果完全没有记录 MobileGestalt ,因为它是一个私有库。

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之间不兼容。

答案 1 :(得分:9)

我刚刚安装了Xcode 10 Beta,并且遇到了同样的问题。跑Xcode 9.4.1,问题就解决了。

答案 2 :(得分:7)

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

答案 3 :(得分:5)

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

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

这不是一个真正的解决方案,但对当时的我来说已经足够了。

答案 4 :(得分:4)

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

基本上看起来很烦人。

答案 5 :(得分:4)

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

模拟器越新越好。

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

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

答案 6 :(得分:4)

在我的情况下,目标的部署目标是在iOS 8上。当我将其升级到iOS 10.3时,它在Simulator和设备上均可正常运行。

Changing the deployment target to fix libMobileGestalt error

答案 7 :(得分:3)

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

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

名称:OS_ACTIVITY_MODE,:禁用

enter image description here

答案 8 :(得分:2)

如果应用提供了字体,则需要添加到Info.plist 并检查文件是否选择了目标成员身份

答案 9 :(得分:1)

我去了XCode-> Preferences-> Components 选中所有模拟器和复选框以自动安装更新,然后单击“立即检查并安装”,并在它们全部更新后消失了几个小时。

现在问题已经解决了-实际上,正如所提到的。带有旧版的新XCode-未更新的模拟器。

答案 10 :(得分:1)

我遇到了同样的问题,但是我成功地将其删除并包含以下内容:

  1. 关机模拟器,
  2. 关闭Xcode,
  3. 重新打开Xcode和模拟器

我希望这会有所帮助。

答案 11 :(得分:0)

发生奇怪错误的常规方法有所帮助:

1)清理项目;
2)关闭模拟器;
3)重新安装吊舱。

Xcode 10。

答案 12 :(得分:0)

我遇到了同样的问题,但是在MapKit中,没有显示MapView,只是白屏和相同的错误,该平台不支持MGIsDeviceOneOfType。

通过修复与MapView对象关联的“歧义布局”警告来解决此问题。现在它可以正常工作,并且错误消失了。

答案 13 :(得分:0)

对我有用的是在general > Deployment Info > Main Interface中将CDVLaunchScreen更改为CDVLaunchScreen,并在general > App Icons and Launch Images > Launch Screen File中将其更改为CDVLaunchScreen。

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

答案 14 :(得分:0)

对于我来说,在关注模拟器的情况下,我选择了“硬件”->“删除所有内容和设置”。

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

答案 15 :(得分:0)

我最近更新为Xcode 10.2,并且当我尝试运行在早期版本中创建的项目时,发生了相同的错误。

问题是模拟器在更新Xcode之前正在运行。

对于我来说,解决方案非常简单,可以退出Simulator并重新启动,以便获得新的更改。我认为模拟器的型号(iPhone SE或iPhone X)并不重要。您只需要重新启动模拟器即可使其生效。

我建议同时退出Xcode和模拟器,然后重新启动Mac。

答案 16 :(得分:0)

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

答案 17 :(得分:0)

当我尝试读取项目内部的json文件时,由于出现了此错误,因此出现了错误。

由于字体名称中的某些拼写错误,我得到了nil,那个json文件中保存着字体名称,在复制粘贴了字体名称后我得到了数据并修复了错误。

我尝试了上面给出的所有解决方案,没有任何效果,所以耐心地进行调试,您将知道是什么导致了此错误,并且在某些不好的时候,xcode会在我们的生活中发挥作用:)