Помилка Xcode на симуляторі: MGIsDeviceOneOfType не підтримується на цій платформі


99

У мене дуже простий додаток з одним видом, що містить кілька міток UIL. Після запуску в Simulator консоль Xcode повертає помилку:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType не підтримується на цій платформі.

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


1
Ви повинні були згадати, що використовуєте XCode 10 Beta. btw з тим самим випуском
kironet

Ви намагаєтесь використовувати 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 задокументований, наприклад, Менеджер гештальт-програм, і його застаріло станом на 10.8. MobileGestalt повністю недокументована Apple, оскільки це приватна бібліотека.

MobileGestalt дозволяє проводити тестування властивостей системи, які можуть бути або не бути сумісними на різних тренажерах.

Досить багато системних процесів та програм в iOS покладаються на MobileGestalt, який знаходиться за адресою /usr/lib/libMobileGestalt.dylib. Це більше базової бібліотеки, але відкриті API-інтерфейси відповідають рамковим умовам Apple і, наприклад, використовують 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 затуманених ключів . [редагувати: ну ну, вас звуть "tymac", а блог - від "timac" ... мабуть, не випадково]
Cœur

17

Я успішно скинув його, вимкнувши сміття проекту.

Перейдіть до < Назва проекту > -> Схема -> Редагувати схему Потім перейдіть до пункту Виконати (меню ліворуч) і додайте таку змінну середовища:

Ім'я : OS_ACTIVITY_MODE, значення : вимкнути

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


1
Це працює товариш. Будь-яке пояснення, чому це працює?
С.

1
Це не відповідь, але це пов'язано і головне: stackoverflow.com/questions/52410471 / ...
dlpolanco

Я шкодую, що зазначив, що, намагаючись застосувати такий підхід, мій тренажер не відкривається і не виводиться на консоль.
Neeraj

Цей тип комаду видаляє певні повідомлення про налагодження, це дуже корисно, і це не має нічого спільного з коректною роботою симулятора та консолі: можливо, у вас є ще одна проблема, яка не пов'язана з цим аргументом.
Алессандро

Я виявив помилку, оскільки: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType не підтримується на цій платформі. Для цього, коли я спробував описаний вище підхід, це не спрацювало. Але коли я просто вийшов із симулятора і очистив свій код, він працював нормально.
Neeraj

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 плюс отримав це повідомлення в налагоджувачі.

Рішення: Я перейшов на новіший симулятор, у налагоджувачі не з’явилося повідомлення про помилку.


5

Натрапив на це, відкриваючи якийсь проект із GitHub на Xcode 10.0.

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

Це не реальне рішення, але на той момент воно для мене було досить хорошим.


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

5

У моєму випадку цільова ціль розгортання була на iOS 8. Коли я підніс її до iOS 10.3, вона працювала нормально як на симуляторі, так і на пристрої.

Зміна цілі розгортання для виправлення помилки libMobileGestalt


1
Для Mine встановлено 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 І перевірити, чи вибрано для файлу цільове членство


1

Допоміг звичайний спосіб, коли трапляються дивні помилки:

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

Xcode 10.


Це спрацювало і на мене. Дуже дякую. Користувачам iOS на платформі 'nativescript' ви можете зробити (1) очистити проект, видаливши папку 'platform / ios', (2) вимкнути та скинути симулятор, "Стерти весь вміст та налаштування", та (3) відновити проекту шляхом запуску 'tns priprema 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
Як ви це виправили? У мене теж була та сама проблема. Але це трапляється лише під час запуску у виробництві в іонній системі, і після цього я застряг у заставці заставки
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.