Error de Xcode en el simulador: MGIsDeviceOneOfType no es compatible con esta plataforma

99

Tengo una aplicación muy simple con una sola vista, que contiene varios UILabels. Al ejecutarse en Simulator, la consola Xcode devuelve el error:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType no es compatible con esta plataforma.

El simulador en sí solo muestra una pantalla en blanco. También intenté ejecutarlo en un dispositivo de desarrollador con la misma pantalla blanca. He buscado documentación pero no puedo encontrar ninguna referencia a MGIsDeviceOneOfType. La aplicación está escrita en Swift en Xcode 10 beta en macOS 10.14. Estoy intentando ejecutarlo en los simuladores de iPhone 7-X, así como en un iPhone 7 de desarrollo, todos ejecutando el software de destino (12.0).

Woodman
fuente
1
Deberías haber mencionado que estás usando XCode 10 Beta. por cierto teniendo el mismo problema
kironet
¿Está intentando utilizar AWS MobileHub?
Victor 'Chris' Cabral
2
Se encontró con este error en la consola de depuración al ejecutar la aplicación de diseño MVC clave de un instructor. Estoy ejecutando Xcode 10 (no beta). No recibí el error al ejecutarlo en el dispositivo real.
Steve Robertson
4
Tener este problema después de la actualización de Xcode 10 (no beta)
MUH Mobile Inc.
1
El problema parece estar relacionado con la plataforma que se ejecuta en el simulador. Creé un proyecto vacío, compilé y ejecuté en iPhone X, XR, XS y XS-Max y no hubo ningún problema. Ejecútelo en cualquier cosa anterior a esto, comenzando con 8 Plus, y se produce el error. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Respuestas:

25

MobileGestalt

El libMobileGestalt.dylib proporciona un repositorio central para todas las propiedades de los IOS. Puede ser análogo a Gestalt de OS X, que es parte de CoreServices. Gestalt de OS X está documentado, por ejemplo, Gestalt Manager y ha quedado obsoleto a partir de la versión 10.8. MobileGestalt está completamente indocumentado por Apple, ya que es una biblioteca privada.

MobileGestalt permite probar las propiedades del sistema que pueden o no ser compatibles en diferentes simuladores.

Un buen número de aplicaciones y procesos del sistema en iOS se basan en MobileGestalt, que se encuentra en /usr/lib/libMobileGestalt.dylib. Es más una biblioteca básica, pero sus API expuestas siguen las convenciones del marco de Apple y usan el MGprefijo de API, por ejemplo MGIsDeviceOneOfType.

Si busca MobileGestalt en el sistema de archivos de iOS, no lo encontrará; como todos los marcos y bibliotecas privados, se ha vinculado previamente a /System/Library/Caches/...etc. Si te gusta la piratería y las pruebas de lápiz, puedes usar herramientas para extraerlo.

MobileGestalt proporciona mucha información (alrededor de 200 consultas) sobre varios aspectos del sistema. A continuación se muestran algunos.

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");

Hay cientos más AirplaneMode, por ejemplo MobileEquipmentIdentifier, etc.

MobileGestalt mantiene una tabla de códigos de selección de OSType. por ejemplo c: 890 en el mensaje: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType no es compatible con esta plataforma. En este caso MGIsDeviceOneOfTypees un método de la biblioteca MobileGestalt .

En lugar de verificar la versión del simulador, hay un selector separado para consultar directamente las capacidades del simulador. Lo más probable es que los mensajes indiquen incompatibilidades entre las versiones del simulador y las versiones de Xcode y / o API no compatibles en el simulador.

Edison
fuente
3
Esta parece una razón lógica para el problema. ¿Qué terminaste haciendo para solucionar el problema?
Brian Sachetta
1
Como sugiere la última oración. Asegúrese de que las versiones de SIM y Xcode sean compatibles o simplemente use un dispositivo real.
Edison
Escribió aproximadamente 200 consultas , pero aparentemente hay 673 claves ofuscadas conocidas . [editar: bueno, tu nombre es "tymac" y el blog es de "timac" ... probablemente no sea una coincidencia]
Cœur
17

Lo eliminé con éxito con la desactivación de la basura del proyecto.

Vaya a < Nombre de su proyecto > -> Esquema -> Editar esquema Luego vaya a Ejecutar (menú en el lado izquierdo) y agregue la siguiente variable de entorno:

Nombre : OS_ACTIVITY_MODE, Valor : deshabilitar

ingrese la descripción de la imagen aquí

Alessandro Ornano
fuente
1
Es compañero de trabajo. ¿Alguna explicación de por qué está funcionando?
Aditya S.
1
Esta no es una respuesta, pero está relacionada y es importante: stackoverflow.com/questions/52410471/…
dlpolanco
Lamento mencionar que al intentar este enfoque, mi simulador no se abre y no hay salida en la consola.
Neeraj Shukla
Este tipo de comando suelta ciertos mensajes de depuración, es muy útil y no tiene nada que ver con el funcionamiento correcto del simulador y la consola: probablemente tengas otro problema que no esté relacionado con este argumento.
Alessandro Ornano
Encontré el error como: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType no es compatible con esta plataforma. Por esto, cuando probé el enfoque anterior, esto no funcionó. Pero cuando salí del simulador y limpié mi código, estaba funcionando bien.
Neeraj Shukla
9

en mi caso: verifique el método del delegado de su aplicación - didFinishLaunching. Tenía privado y aparece el error. Después de eliminar "privado", todo funciona bien

ankmara
fuente
6
El mío no era privado.
ScottyBlades
8

Acabo de instalar Xcode 10 Beta y tuve el mismo problema. Ejecutó Xcode 9.4.1 y el problema desapareció.

tjmister
fuente
10
En mi opinión, esta no es una respuesta viable, especialmente ahora que xcode 10 está en la naturaleza y todavía tiene este problema. El problema no "desapareció" en xcode 9.4.1; para empezar, nunca existió. Una cosa es decir "desafortunadamente, este es un problema de xcode 10 y es posible que tengamos que ser pacientes". Otra es ignorarlo por completo.
Brian Sachetta
6

Este error solo ocurrirá al probar / depurar en simuladores.

Cuanto más nuevo sea el simulador, mejor.

Caso: ejecuto el simulador de iPhone 8 y recibí este mensaje en el depurador.

Solución: Cambié a un simulador más nuevo sin mensaje de error en el depurador.

JhonnyTawk
fuente
5

Me encontré con esto al abrir algún proyecto de GitHub en Xcode 10.0.

La solución pragmática fue: simplemente presione 'Continuar ejecución del programa' varias veces y probablemente deshabilite su punto de interrupción de excepción . Aparentemente, la excepción fue recuperable.

No es una solución real, pero fue lo suficientemente buena para mí en ese momento.

Delaware.
fuente
En mi caso, al abrir un proyecto antiguo en Xcode 10.1, simplemente presionar 'Continuar ejecución del programa' varias veces me llevó al problema real con la solución aquí stackoverflow.com/a/12398777/4221299
zeeawan
5

En mi caso, el objetivo de implementación de Target estaba en iOS 8. Cuando lo subí a iOS 10.3, funcionó bien, tanto en el simulador como en el dispositivo.

Cambiar el destino de la implementación para corregir el error libMobileGestalt

Bharathram C
fuente
1
El mío está configurado en 12.2 y el mensaje se imprime con el simulador de iPhone SE pero no con el iPhone XR. Entonces, al menos para mí, @anorskdev tiene razón.
Neph
5

Estoy viendo este problema. Usando Xcode 10.1. Creó un proyecto nuevo, no hace nada más que mostrar una pantalla en blanco. Descubrí que aparecía en el simulador de dispositivos más antiguos. Por ejemplo, iPad Pro (12,9 pulgadas) y iPad Pro (12,9 pulgadas) (segunda generación) muestran el problema, pero el problema ha desaparecido para el iPad Pro (12,9 pulgadas) (tercera generación). No aparece para el simulador de iPhone XR.

Básicamente parece molesto.

anorskdev
fuente
Esta fue la causa para mí también. No estoy seguro de por qué esto es un problema. Mi iPad puede ejecutar iOS 12, por lo que el simulador de hermanos no debe considerarse un dispositivo no compatible.
Abbey Jackson
Lo mismo aquí (la pantalla solo tiene un InputField y un botón). Xcode 10 con un proyecto de iOS 12: el uso del simulador de iPhone SE registra este mensaje pero no aparece con el iPhone XR.
Neph
2

Si tiene fuentes proporcionadas por la aplicación, debe agregarlas a Info.plist y verificar si el archivo tiene la Membresía de destino seleccionada

Nuno Ferro
fuente
1

La forma habitual cuando ocurren errores extraños ayudó:

1) Proyecto limpio;
2) Apagar el simulador;
3) Vuelva a instalar las cápsulas.

Xcode 10.

Nik Kov
fuente
Eso funcionó para mí también. Muchas gracias. Los usuarios de iOS sobre la plataforma 'nativescript', pueden hacer (1) Limpiar el proyecto eliminando la carpeta 'plataformas / ios', (2) Apagar y restablecer el simulador mediante "Borrar todo el contenido y la configuración", y (3) Reconstruir el project by runnings 'tns prepare ios --release' y luego 'tns build ios --bundle'. Luego, puede ejecutar la aplicación en el simulador abriendo el archivo .xcworkspace, elegir un simulador y ejecutar el proyecto desde allí. Funcionó perfectamente para mí.
Mick Morely
1

Para mí, con el simulador en cuestión enfocado, seleccioné Hardware-> Borrar todo el contenido y la configuración.

Después de reiniciar el simulador, el inicio de mi aplicación funcionó nuevamente, como se esperaba.

PKCLsoft
fuente
1
Ahora se llama Device->Erase All Content and Settings...
Bruno Bieri
1

Fui a XCode -> Preferencias -> Componentes Marqué todos los simuladores y la casilla de verificación para instalar actualizaciones automáticamente, y luego "verificar e instalar ahora" y me fui por unas horas mientras todos se actualizaban.

Ahora el problema se ha ido, de hecho, es como se mencionó. Nuevo XCode con viejos simuladores no actualizados.

Harry McGovern
fuente
¿No va a consumir mucha memoria?
Euridice01
0

Tuve el mismo problema, pero con MapKit, donde no aparecía MapView, solo la pantalla blanca y el mismo error, MGIsDeviceOneOfType no es compatible con esta plataforma.

Lo resolvió arreglando las advertencias de "Diseño ambiguo" vinculadas al objeto MapView. Ahora está funcionando perfectamente bien y los errores desaparecieron.

Strudel
fuente
0

Lo que funcionó para mí fue cambiar dentro general > Deployment Info > Main Interfacea CDVLaunchScreen y hacer lo mismo dentrogeneral > App Icons and Launch Images > Launch Screen File de CDVLaunchScreen también.

Vengo de Ionic, por lo que esto podría no ser un problema para aquellos que se desarrollan en Swift / Objective-C.

RaulGM
fuente
1
¿Cómo lo arreglaste? Yo también estaba teniendo el mismo problema. Pero esto solo sucede cuando se ejecuta en producción en iónico y después de eso me quedé atascado en el cargador de pantalla de inicio
KnowledgeSeeker
0

Recientemente actualicé a Xcode 10.2y cuando intenté ejecutar un proyecto creado en una versión anterior, se produjo el mismo error.

El problema era que el simulador se estaba ejecutando antes de actualizar Xcode.

La solución fue muy simple para mí, salir del Simulador y reiniciarlo para que pueda obtener los nuevos cambios. No creo que el modelo del simulador (iPhone SE o iPhone X) importe. Solo necesita reiniciar su simulador para que surta efecto con la nueva actualización.

Recomendaría salir tanto de Xcode como del simulador y reiniciar su Mac.

Gulfam Khan
fuente
0

Recibí este error al llamar .synca la cola principal que causó un interbloqueo ( DispatchQueue.main.sync {}). Quise llamar .async.

Bartosz Kunat
fuente
0

Recibí este error, al intentar leer un archivo json que está dentro de mi proyecto y devolvió nulo, debido a eso recibí este error.

Obtuve nulo debido a un error de ortografía en el nombre de la fuente, ese archivo json contenía los nombres de las fuentes, después de copiar y pegar el nombre de la fuente, obtuve datos y el error se solucionó.

Probé casi todas las soluciones dadas anteriormente, nada funcionó, así que depure con paciencia, sabrá cuál está causando este error y en algún momento malo xcode jugará en nuestra vida :)

R. Mohan
fuente
0

Estaba enfrentando el mismo problema, pero lo eliminé con éxito con las siguientes cosas:

  1. Simulador de apagado,
  2. Apagar Xcode,
  3. Vuelva a abrir Xcode y el simulador

Espero que te ayude.

Sandip Moradiya
fuente