ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

您应该提到您正在使用 XCode 10 Beta。顺便说一句有同样的问题
您是否尝试使用 AWS MobileHub?
运行讲师的关键 MVC 设计应用程序时,在调试控制台中遇到此错误。我正在运行 Xcode 10(不是测试版)。在实际设备上运行时没有收到错误。
Xcode 10 更新后出现此问题(非测试版)
该问题似乎与模拟器中运行的平台有关。我创建了一个空项目,编译并在 iPhone X、XR、XS 和 XS-Max 上运行,没有任何问题。在此之前的任何东西上运行它,从 8 Plus 开始,就会发生错误。 Mac OS X:10.13.6,Xcode:10.0

E
Edison

移动格式塔

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

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

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

如果您在 iOS 文件系统上查找 MobileGestalt,您将找不到它 - 与所有私有框架和库一样,它已预先链接到 /System/Library/Caches/...等。如果你喜欢黑客和渗透测试,那么你可以使用工具来提取它。

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 is not supported on this platform. 在这种情况下,MGIsDeviceOneOfTypeMobileGestalt 库

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


这似乎是问题的合乎逻辑的原因。你最终做了什么来解决这个问题?
正如最后一句话所暗示的那样。确保 sim 版本和 Xcode 版本兼容或仅使用真实设备。
您编写了 200 个左右的查询,但显然有 673 known obfuscated keys。 [编辑:哦,好吧,你的名字是“tymac”,博客来自“timac”……可能不是巧合]
A
Alessandro Ornano

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

转到 ->Scheme->Edit Scheme 然后转到 Run(左侧菜单)并添加以下环境变量:

名称:OS_ACTIVITY_MODE,值:禁用

https://i.stack.imgur.com/QFuWn.png


是工作搭档任何解释为什么它工作?
这不是答案,但它是相关且重要的:stackoverflow.com/questions/52410471/…
我很遗憾地提到尝试这种方法,我的模拟器没有打开,控制台也没有输出。
这种逗号会删除某些调试消息,它非常有用,并且与模拟器和控制台的正确工作无关:可能您还有另一个与此参数无关的问题。
我遇到的错误是:libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform。为此,当我尝试上述方法时,这不起作用。但是当我退出模拟器并清理我的代码时,它工作正常。
a
ankmara

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


我的不是私人的。
m
mokagio

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


这不是一个可行的答案 IMO,尤其是现在 xcode 10 在野外并且仍然存在这个问题。这个问题在 xcode 9.4.1 上并没有“消失”——它从一开始就不存在。说“不幸的是,这是一个 xcode 10 问题,我们可能需要耐心等待”是一回事。完全忽略它是另一回事。
J
JhonnyTawk

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

模拟器越新越好。

案例:我运行模拟器 iPhone 8 plus 我在调试器中收到了这条消息。

解决方案:我换了一个新的模拟器,在调试器中没有错误信息。


d
de.

在 Xcode 10.0 上从 GitHub 打开一些项目时遇到了这个问题。

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

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


在我的情况下,在 Xcode 10.1 中打开一个旧项目,只需多次点击“继续程序执行”,我就可以在此处找到解决方案的实际问题stackoverflow.com/a/12398777/4221299
B
Bharathram C

在我的例子中,Target 的部署目标是 iOS 8。当我将它推到 iOS 10.3 时,它在模拟器和设备上都运行良好。

https://i.stack.imgur.com/ZZcwI.png


我的设置为 12.2,消息是用 iPhone SE 模拟器打印的,但不是用 iPhone XR 模拟器打印的。所以,至少对我来说,@anorskdev 是对的。
a
anorskdev

我看到了这个问题。使用 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 一起显示。
N
Nuno Ferro

如果您有应用程序提供的字体,则需要添加到 Info.plist 并检查文件是否选择了 Target Membership


S
Strudel

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

通过修复与 MapView 对象相关的“不明确的布局”警告来解决它。现在它工作得很好,错误消失了。


N
Nike Kov

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

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

Xcode 10。


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

对我来说,重点关注模拟器,我选择了 Hardware->Erase all content and settings。

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


现在称为 Device -> Erase All Content and Settings...
H
Harry McGovern

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

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


这不是会吃掉很多内存吗?
R
RaulGM

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

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


你是怎么修的?我也有同样的问题。但这仅在 ionic 中的生产环境中运行时才会发生,之后我就卡在了启动画面加载程序中
G
Gulfam Khan

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

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

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

我建议退出 Xcode 和模拟器并重新启动你的 Mac。


B
Bartosz Kunat

我在导致死锁 (DispatchQueue.main.sync {}) 的主队列上调用 .sync 得到了这个错误。我打算打电话给 .async


R
R. Mohan

当我尝试读取我的项目中的一个 json 文件并返回 nil 时,我收到了这个错误,因为我收到了这个错误。

由于字体名称中的一些拼写错误,我得到了 nil,该 json 文件包含字体名称,在复制粘贴字体名称后,我得到了数据并修复了错误。

我尝试了上面给出的几乎所有解决方案,但没有任何效果,所以耐心调试,你会知道是什么导致了这个错误,并且在某些糟糕的时候 xcode 会在我们的生活中发挥作用:)


S
Sandip Moradiya

我遇到了同样的问题,但我已经成功地通过以下方式放弃了它:

关闭模拟器,关闭 Xcode,重新打开 Xcode 和模拟器

我希望它会有所帮助。