it-swarm.com.ru

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

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

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

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

57
Woodman

MobileGestalt

LibMobileGestalt.dylib предоставляет центральный репозиторий для всех свойств iOS. Это может быть аналогом Gestalt OS X, который является частью CoreServices. Gestalt OS X задокументирован, например, 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-интерфейсами в симуляторе. 

15
tymac

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

9
tjmister

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

6
ankmara

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

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

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

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

3
JhonnyTawk

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

 Changing the deployment target to fix libMobileGestalt error

2
Bharathram C

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

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

2
anorskdev

Столкнулся с этим при открытии какого-то проекта из GitHub на Xcode 10.0. 

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

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

2
de.

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

1
Nuno Ferro

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

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

0
Strudel

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

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

Xcode 10.

0
Nik Kov

Для меня, с симулятором в центре внимания, я выбрал Hardware-> Erase all content и settings.

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

0
PKCLsoft

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

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

0
RaulGM