Ошибка XCode на симуляторе: MGIsDeviceOneOfType не поддерживается на этой платформе

У меня очень простое приложение с одним представлением, содержащее несколько UILabels. После запуска в симуляторе консоль Xcode возвращает ошибку:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType не поддерживается на этой платформе.

Сам симулятор просто показывает белый экран. Я также попытался запустить его на устройстве разработчика с тем же белым экраном. Я искал документацию, но не могу найти ссылку на MGIsDeviceOneOfType. Приложение написано на Swift в бета-версии Xcode 10 на macOS 10.14. Я пытаюсь запустить его на симуляторах iPhone 7-X, а также на iPhone 7 для разработки, на котором запущено целевое программное обеспечение (12.0).

Ответы

Ответ 1

MobileGestalt

LibMobileGestalt.dylib предоставляет центральный репозиторий для всех свойств iOS. Он может быть аналогом OS X Gestalt, который является частью CoreServices. OS X Gestalt документирована, например, Gestalt Manager и устарела по состоянию на 10.8. MobileGestalt полностью недокументирован Apple, так как является частной библиотекой.

MobileGestalt позволяет тестировать свойства системы, которые могут или не могут быть совместимы на разных симуляторах.

Многие системные процессы и приложения в iOS используют MobileGestalt, который находится по адресу /usr/lib/libMobileGestalt.dylib. Это скорее базовая библиотека, но ее открытые API-интерфейсы соответствуют рамочным соглашениям Apple и используют префикс API MG, например MGIsDeviceOneOfType.

Если вы ищете MobileGestalt в файловой системе iOS, вы не найдете его - как и все частные фреймворки и библиотеки, он был предварительно связан с /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");

Есть еще сотни, например. AirplaneMode, MobileEquipmentIdentifier и т.д.

MobileGestalt поддерживает таблицу кодов селектора OSType. например, c: 890 в сообщении: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType не поддерживается на этой платформе. В этом случае MGIsDeviceOneOfType является методом Библиотека MobileGestalt.

Вместо проверки версии симулятора есть отдельный селектор для непосредственного запроса возможностей симулятора. Сообщения, скорее всего, указывают на несовместимость между версиями симулятора и версиями XCode и/или неподдерживаемыми API-интерфейсами на симуляторе.

Ответ 2

Я успешно удалил его с отключением мусора проекта.

Перейдите к & lt;названию своего проекта>-> Схема ->Изменить схему, а затем перейдите к Выполнить (меню слева). ) и добавьте следующую переменную среды:

Имя: OS_ACTIVITY_MODE, значение: отключить

enter image description here

Ответ 3

в моем случае: проверьте делегат приложения для метода - didFinishLaunching. У меня была приватная и ошибка. После удаления "частного" все работает отлично

Ответ 4

Я только что установил Xcode 10 Beta и имел ту же проблему. Ran Xcode 9.4.1 и проблема исчезла.

Ответ 5

Эта ошибка возникает только при тестировании/отладке на симуляторах.

Чем новее симулятор, тем лучше.

Дело: я запускаю симулятор iPhone 8 плюс я получил это сообщение в отладчике.

Решение: я перешел на новый симулятор без сообщения об ошибке в отладчике.

Ответ 6

Исправлено это при открытии какого-либо проекта из GitHub на Xcode 10.0.

Прагматичным решением было: просто нажмите "Продолжить выполнение программы" несколько раз и, вероятно, отключите свою контрольную точку исключения. По-видимому, исключение можно было восстановить.

Это не настоящее решение, но для меня это было достаточно хорошо.

Ответ 7

В моем случае Target Deployment Target был на iOS 8. Когда я поднял его до iOS 10.3, он отлично работал как на симуляторе, так и на устройстве.

Changing the deployment target to fix libMobileGestalt error

Ответ 8

Увижу эту проблему. Использование Xcode 10.1. Создан новый проект - ничего не делать, кроме показа белого экрана. Обнаружено, что он обнаруживается на симуляторе для старых устройств. Например, iPad Pro (12,9 дюйма) и iPad Pro (12,9 дюйма) (2-го поколения) показывают проблему, но проблема исчезла для iPad Pro (12,9 дюйма) (3-го поколения). Не отображается для iPhone XR симулятор.

В основном кажется раздражающим.

Ответ 9

Если у вас есть шрифты, предоставленные приложением, вам нужно добавить в Info.plist. И проверьте, выбран ли файл целевого членства

Ответ 10

Для меня, когда симулятор в фокусе, я выбрал Hardware-> Стереть весь контент и настройки.

После перезапуска симулятора запуск моего приложения снова сработал, как и ожидалось.

Ответ 11

Я перешел в XCode → "Настройки" → "Компоненты", отметив все симуляторы и флажок для автоматической установки обновлений, а затем "проверить и установить сейчас" и ушел на несколько часов, пока все они обновлялись.

Теперь проблема ушла - так на самом деле, как уже упоминалось. Новый XCode with Old - необновленные симуляторы.

Ответ 12

У меня была та же проблема, но с MapKit, где MapView не отображался, только белый экран и та же ошибка, MGIsDeviceOneOfType не поддерживается на этой платформе.

Решил его, установив предупреждения "Неоднозначные макеты", привязанные к объекту MapView. Теперь он работает отлично, и ошибки ушли.

Ответ 13

Помог обычный способ, когда происходят странные ошибки:

1) Чистый проект;
2) выключить симулятор;
3) Переустановите стручки.

Xcode 10.

Ответ 14

Что для меня работало, так это изменить в general > Deployment Info > Main Interface на CDVLaunchScreen и сделать то же самое в general > App Icons and Launch Images > Launch Screen File на CDVLaunchScreen.

Я из Ionic, так что это может не быть проблемой для тех, кто развивается в Swift/Objective-C.

Ответ 15

Я недавно обновился до Xcode 10.2 и когда я попытался запустить проект, созданный в более ранней версии, произошла та же ошибка.

Проблема была в том, что симулятор работал до обновления Xcode.

Для меня было очень просто выйти из Симулятора и перезапустить, чтобы он смог получить новые изменения. Я не думаю, что модель симулятора (iPhone SE или iPhone X) имеет значение. Вам просто нужно перезапустить симулятор, чтобы он вступил в силу нового обновления.

Я бы порекомендовал выйти из Xcode и симулятора и перезагрузить Mac.

Ответ 16

Я получил эту ошибку, вызвав .sync в главной очереди, что вызвало взаимоблокировку (DispatchQueue.main.sync {}). Я хотел позвонить .async.

Ответ 17

Я получил эту ошибку при попытке прочитать файл JSON, который находится внутри моего проекта, и он вернул ноль, из-за этого я получил эту ошибку.

Я получил ноль из-за какой-то орфографической ошибки в имени шрифта, этот файл json содержал имена шрифтов, после копирования вставил имя шрифта, получил данные и исправил ошибку.

Я перепробовал почти все решения, приведенные выше, ничего не получилось, поэтому отладьте с терпением, вы узнаете, что является причиной этой ошибки, и в какой-то момент xcode сыграет в нашу жизнь :)

Ответ 19

У меня была точно такая же проблема с Xcode 10.1 и симулятором на iOS 12.1. Оказывается, это было вызвано рекурсией, вызывающей бесконечный цикл.

Ответ 20

Прагматичный ответ: попробуйте другой симулятор. Чем новее модель iPhone, тем лучше.