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


99

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

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

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


1
您应该提到您正在使用XCode 10 Beta。btw有同样的问题
kironet

您是否要使用AWS MobileHub?
维克多·克里斯·卡布拉尔

2
运行教师的关键MVC设计应用时,在调试控制台中遇到此错误。我正在运行Xcode 10(不是beta)。在实际设备上运行时未收到错误。
史蒂夫·罗伯逊

4
Xcode 10更新后(非Beta版)出现此问题
MUH Mobile Inc.

1
该问题似乎与模拟器中运行的平台有关。我创建了一个空项目,进行了编译,并在iPhone X,XR,XS和XS-Max上运行,没有问题。从8 Plus开始,在此之前的任何版本上运行它,并发生错误。Mac OS X:10.13.6,Xcode:10.0
wbl2745 '18

Answers:


25

移动格式塔

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

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");

有数百例如AirplaneModeMobileEquipmentIdentifier等等。

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

无需检查模拟器版本,而是有一个单独的选择器可以直接查询模拟器的功能。该消息最有可能表明模拟器版本与Xcode版本和/或模拟器上不受支持的API之间不兼容。


3
这似乎是问题的逻辑原因。您最终做了什么来解决此问题?
Brian Sachetta

1
正如最后一句话所暗示的那样。确保sim版本和Xcode版本兼容或仅使用真实设备。
爱迪生

您编写了200个左右的查询,但显然有673个已知的混淆密钥。[编辑:哦,你的名字是“tymac”和博客是从“TIMAC” ......也许不是巧合]
心教堂

17

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

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

名称:OS_ACTIVITY_MODE,:禁用

在此处输入图片说明


1
是工作伙伴 任何解释为何有效?
Aditya S.

1
这不是答案,但它是相关且重要的:stackoverflow.com/questions/52410471/…–
dlpolanco

我很遗憾地提到尝试这种方法,我的模拟器没有打开并且在控制台上没有输出。
Neeraj Shukla

这种以逗号分隔的方式删除某些调试消息,这非常有用,并且与模拟器和控制台的正确工作无关:可能还有另一个与此参数无关的问题。
亚历山德罗·奥纳诺

我遇到的错误为:libMobileGestalt MobileGestalt.c:890:此平台不支持MGIsDeviceOneOfType。为此,当我尝试上述方法时,此方法无效。但是,当我只是退出模拟器并清理代码时,它就可以正常工作。
Neeraj Shukla

9

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


6
我不是私人的。
ScottyBlades

8

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


10
这不是IMO的可行答案,尤其是在xcode 10泛滥而仍存在此问题的情况下。这个问题在xcode 9.4.1上并没有“解决”-从一开始就不存在。说“不幸的是,这是一个xcode 10问题,我们可能必须耐心等待”。完全忽略它是另一个。
布莱恩·萨切塔

6

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

模拟器越新越好。

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

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


5

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

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

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


以我
为例

5

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

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


1
我的设置为12.2,消息使用iPhone SE模拟器打印,但不使用iPhone XR消息打印。因此,至少对我而言,@ anorskdev是正确的。
Neph

5

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

基本上看起来很烦。


这也是我的原因。我不知道为什么这是一个问题。我的iPad能够运行iOS 12,因此兄弟姐妹模拟器不应被视为不受支持的设备。
修道院杰克逊

同样的事情(屏幕上只有一个InputField和一个按钮)。带有iOS 12项目的Xcode 10:使用iPhone SE模拟器记录此消息,但不会与iPhone XR一起显示。
Neph


1

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

1)清洁工程;
2)关闭模拟器;
3)重新安装吊舱。

Xcode 10。


这也对我有用。非常感谢。使用“ nativescript”平台的iOS用户,您可以执行以下操作:(1)通过删除“ platforms / ios”文件夹清理项目,(2)通过“擦除所有内容和设置”关闭并重置模拟器,以及(3)重新构建通过运行“ tns prepare ios --release”和“ tns build ios --bundle”项目。然后,您可以通过打开.xcworkspace文件在模拟器中运行该应用程序,选择一个模拟器并从那里运行项目。它对我来说非常有效。
Mick Morely

1

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

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


1
现在称为Device->Erase All Content and Settings...
Bruno Bieri

1

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

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


那不是要吃掉很多内存吗?
Euridice01

0

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

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


0

对我general > Deployment Info > Main Interface有用的是在CDVLaunchScreen中进行更改,并对CDVLaunchScreen进行相同的处理general > App Icons and Launch Images > Launch Screen File

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


1
您是如何解决的?我也有同样的问题。但这只会在以离子形式在生产环境中运行时发生,然后我被卡在启动画面加载器中
KnowledgeSeeker

0

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

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

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

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


0

我通过调用.sync导致死锁(DispatchQueue.main.sync {})的主队列来得到此错误。我本打算打电话.async


0

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.