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


100

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

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

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


1
Вы должны были упомянуть, что используете XCode 10 Beta. кстати, с той же проблемой
kironet 08

Вы пытаетесь использовать AWS MobileHub?
Виктор 'Крис' Кабрал

2
Попытайтесь столкнуться с этой ошибкой в ​​консоли отладки при запуске ключевого приложения MVC для преподавателя. Я использую Xcode 10 (не бета-версия). Ошибка при запуске на реальном устройстве.
Стив Робертсон

4
Эта проблема возникает после обновления Xcode 10 (не бета-версии)
MUH Mobile Inc.

1
Проблема, похоже, связана с платформой, работающей в симуляторе. Я создал пустой проект, скомпилировал и запустил его на iPhone X, XR, XS и XS-Max, и никаких проблем не возникло. Запустите его на чем-нибудь до этого, начиная с 8 Plus, и возникает ошибка. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Ответы:


25

MobileGestalt

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

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

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


3
Это кажется логичной причиной проблемы. Что вы сделали, чтобы решить проблему?
Брайан Сачетта

1
Как следует из самого последнего предложения. Убедитесь, что версии sim и версии Xcode совместимы, или просто используйте реальное устройство.
Эдисон

Вы написали около 200 запросов , но, по-видимому, известно 673 запутанных ключа . [edit: ну ладно, вас зовут "tymac", а блог ведется от "timac" ... вероятно, это не совпадение]
Cœur

17

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

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

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

введите описание изображения здесь


1
Это рабочий товарищ. Любое объяснение, почему это работает?
Адитья С.

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 plus У меня в отладчике появилось это сообщение.

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


5

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

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

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


В моем случае, открывая старый проект в Xcode 10.1, просто нажимая «Продолжить выполнение программы» несколько раз, я перешел к актуальной проблеме с решением здесь stackoverflow.com/a/12398777/4221299
zeeawan

5

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

Изменение цели развертывания для исправления ошибки libMobileGestalt


1
У меня установлено значение 12,2, и сообщение печатается с помощью симулятора iPhone SE, но не с помощью iPhone XR. Так что, по крайней мере, для меня @anorskdev прав.
Неф

5

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

В основном это раздражает.


Это было причиной и для меня. Я не уверен, почему это проблема. Мой iPad может работать под управлением iOS 12, поэтому симулятор родного брата не следует рассматривать как неподдерживаемое устройство.
Эбби Джексон

То же самое и здесь (на экране есть только InputField и кнопка). Xcode 10 с проектом iOS 12: использование симулятора iPhone SE регистрирует это сообщение, но оно не отображается на iPhone XR.
Неф

2

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


2

Помог штатный способ при возникновении странных ошибок:

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

Xcode 10.


Это сработало и для меня. Большое спасибо. Пользователи iOS на платформе «nativescript» могут: (1) очистить проект, удалив папку «platform / ios», (2) выключить и сбросить симулятор, «Стереть все содержимое и настройки», и (3) перестроить project, запустив tns prepare ios --release и затем tns build ios --bundle. Затем вы можете запустить приложение в симуляторе, открыв файл .xcworkspace, выбрать симулятор и запустить проект оттуда. У меня это сработало отлично.
Мик Морли,

1

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

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


1
Теперь он называется Device->Erase All Content and Settings...
Бруно Бьери

1

Я пошел в XCode -> Настройки -> Компоненты. Отметил все симуляторы и флажок для автоматической установки обновлений, а затем «Проверить и установить сейчас» и ушел на несколько часов, пока все они обновлялись.

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


Разве это не съест много памяти?
Euridice01

0

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

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


0

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

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


1
Как ты это исправил? У меня тоже была такая же проблема. Но это происходит только при запуске его на продакшене в ionic, и после этого я застрял в загрузчике заставки
KnowledgeSeeker

0

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

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

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

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


0

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


0

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

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

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


0

У меня была такая же проблема, но я успешно сбросил ее с помощью следующих вещей:

  1. Симулятор выключения,
  2. Завершение работы Xcode,
  3. Повторно откройте Xcode и симулятор

Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.