我有一个非常简单的应用程序,只有一个视图,包含几个 UILabel。在模拟器中运行时,Xcode 控制台返回错误:
libMobileGestalt MobileGestalt.c:875:此平台不支持 MGIsDeviceOneOfType。
模拟器本身只是显示一个白屏。我还尝试在具有相同白屏的开发人员设备上运行它。我搜索了文档,但找不到对 MGIsDeviceOneOfType
的任何引用。该应用程序是在 macOS 10.14 上的 Xcode 10 beta 中用 Swift 编写的。我正在尝试在 iPhone 7-X Simulators 以及开发 iPhone 7 上运行它,所有这些都运行目标软件 (12.0)。
移动格式塔
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");
还有数百个,例如 AirplaneMode
、MobileEquipmentIdentifier
等。
MobileGestalt 维护一个 OSType 选择器代码表。例如消息中的 c:890:libMobileGestalt MobileGestalt.c:890: MGIsDeviceOneOfType is not supported on this platform. 在这种情况下,MGIsDeviceOneOfType
是MobileGestalt 库。
无需检查模拟器版本,而是使用单独的选择器直接查询模拟器的功能。这些消息很可能表明模拟器版本和 Xcode 版本之间不兼容和/或模拟器上不支持的 API。
我已经通过禁用项目垃圾成功删除了它。
转到
名称:OS_ACTIVITY_MODE,值:禁用
https://i.stack.imgur.com/QFuWn.png
在我的情况下:检查您的应用程序委托的方法 - didFinishLaunching。我有私人并得到错误。删除“私人”后一切正常
我刚刚安装了 Xcode 10 Beta 并遇到了同样的问题。 Ran Xcode 9.4.1 并且问题消失了。
只有在模拟器上进行测试/调试时才会出现此错误。
模拟器越新越好。
案例:我运行模拟器 iPhone 8 plus 我在调试器中收到了这条消息。
解决方案:我换了一个新的模拟器,在调试器中没有错误信息。
在 Xcode 10.0 上从 GitHub 打开一些项目时遇到了这个问题。
务实的解决方案是:只需多次点击“继续程序执行”,并可能禁用您的异常断点。显然异常是可以恢复的。
这不是一个真正的解决方案,但当时对我来说已经足够好了。
在我的例子中,Target 的部署目标是 iOS 8。当我将它推到 iOS 10.3 时,它在模拟器和设备上都运行良好。
https://i.stack.imgur.com/ZZcwI.png
我看到了这个问题。使用 Xcode 10.1。创建了一个全新的项目 - 除了显示白屏之外什么都不做。发现它出现在旧设备的模拟器上。例如,iPad Pro(12.9 英寸)和 iPad Pro(12.9 英寸)(第 2 代)显示问题,但 iPad Pro(12.9 英寸)(第 3 代)问题已解决。不显示 iPhone XR 模拟器。
基本上看起来很烦人。
如果您有应用程序提供的字体,则需要添加到 Info.plist 并检查文件是否选择了 Target Membership
我遇到了同样的问题,但是使用 MapKit,没有显示 MapView,只有白屏和相同的错误,此平台不支持 MGIsDeviceOneOfType。
通过修复与 MapView 对象相关的“不明确的布局”警告来解决它。现在它工作得很好,错误消失了。
发生奇怪错误时的常规方法有帮助:
1)清洁项目; 2)关闭模拟器; 3) 重新安装吊舱。
Xcode 10。
对我来说,重点关注模拟器,我选择了 Hardware->Erase all content and settings。
模拟器重新启动后,按预期再次启动我的应用程序。
Device
-> Erase All Content and Settings...
我去了 XCode -> Preferences -> Components 勾选了所有模拟器和复选框以自动安装更新,然后“立即检查并安装”并在它们全部更新时离开了几个小时。
现在问题已经消失了——事实上,正如前面提到的那样。带有旧版的新 XCode - 未更新的模拟器。
对我有用的是在 general > Deployment Info > Main Interface
内更改为 CDVLaunchScreen 并在 general > App Icons and Launch Images > Launch Screen File
内对 CDVLaunchScreen 执行相同操作。
我来自 Ionic,所以这对于那些使用 Swift / Objective-C 开发的人来说可能不是问题。
我最近更新到 Xcode 10.2
,当我尝试运行在早期版本中创建的项目时,发生了同样的错误。
问题是模拟器在更新 Xcode 之前正在运行。
解决方案对我来说非常简单,退出模拟器并重新启动,以便它可以获得新的更改。我认为模拟器的型号(iPhone SE 或 iPhone X)并不重要。您只需要重新启动您的模拟器,它就可以使新的更新生效。
我建议退出 Xcode 和模拟器并重新启动你的 Mac。
我在导致死锁 (DispatchQueue.main.sync {}
) 的主队列上调用 .sync
得到了这个错误。我打算打电话给 .async
。
当我尝试读取我的项目中的一个 json 文件并返回 nil 时,我收到了这个错误,因为我收到了这个错误。
由于字体名称中的一些拼写错误,我得到了 nil,该 json 文件包含字体名称,在复制粘贴字体名称后,我得到了数据并修复了错误。
我尝试了上面给出的几乎所有解决方案,但没有任何效果,所以耐心调试,你会知道是什么导致了这个错误,并且在某些糟糕的时候 xcode 会在我们的生活中发挥作用:)
我遇到了同样的问题,但我已经成功地通过以下方式放弃了它:
关闭模拟器,关闭 Xcode,重新打开 Xcode 和模拟器
我希望它会有所帮助。
不定期副业成功案例分享