Errore Xcode sul simulatore: MGIsDeviceOneOfType non è supportato su questa piattaforma


99

Ho un'applicazione molto semplice con un'unica vista, contenente diverse etichette UIL. All'esecuzione in Simulator, la console Xcode restituisce l'errore:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType non è supportato su questa piattaforma.

Il simulatore stesso mostra solo uno schermo bianco. Ho anche provato a eseguirlo su un dispositivo sviluppatore con lo stesso schermo bianco. Ho cercato nella documentazione ma non ho trovato alcun riferimento a MGIsDeviceOneOfType. L'applicazione è scritta in Swift in Xcode 10 beta su macOS 10.14. Sto tentando di eseguirlo sui simulatori iPhone 7-X, nonché su un iPhone 7 di sviluppo, tutti con il software di destinazione (12.0).


1
Avresti dovuto menzionare che stai usando XCode 10 Beta. btw avendo lo stesso problema
kironet

Stai tentando di utilizzare AWS MobileHub?
Victor 'Chris' Cabral

2
Ho riscontrato questo errore nella console di debug durante l'esecuzione dell'app di progettazione MVC chiave di un istruttore. Sto eseguendo Xcode 10 (non beta). Non ho ricevuto l'errore durante l'esecuzione sul dispositivo effettivo.
Steve Robertson

4
Avendo questo problema dopo l'aggiornamento di Xcode 10 (non beta)
MUH Mobile Inc.

1
Il problema sembra essere correlato alla piattaforma in esecuzione nel simulatore. Ho creato un progetto vuoto, compilato ed eseguito su iPhone X, XR, XS e XS-Max e non ci sono stati problemi. Eseguilo su qualsiasi cosa prima di questo, a partire da 8 Plus, e si verifica l'errore. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Risposte:


25

MobileGestalt

Il libMobileGestalt.dylib fornisce un repository centrale per tutte le proprietà del iOS. Può essere analogo a Gestalt di OS X, di cui fa parte CoreServices. Gestalt di OS X è documentato ad esempio Gestalt Manager ed è stato deprecato a partire dalla 10.8. MobileGestalt non è completamente documentato da Apple in quanto è una libreria privata.

MobileGestalt consente di testare le proprietà del sistema che possono o non possono essere compatibili su diversi simulatori.

Parecchi processi di sistema e app in iOS si basano su MobileGestalt, che si trova in /usr/lib/libMobileGestalt.dylib. È più una libreria di base, ma le sue API esposte seguono le convenzioni del framework Apple e utilizza, MGad esempio, il prefisso API MGIsDeviceOneOfType.

Se cerchi MobileGestalt sul filesystem iOS non lo troverai - come tutti i framework e le librerie private, è stato pre-collegato a /System/Library/Caches/...etc. Se ti piace l'hacking e il test con la penna, puoi utilizzare gli strumenti per estrarlo.

MobileGestalt fornisce molte informazioni - circa 200 query circa - su vari aspetti del sistema. Eccone alcuni.

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

Ce ne sono altre centinaia AirplaneMode, ad esempio MobileEquipmentIdentifier, ecc.

MobileGestalt mantiene una tabella dei codici del selettore OSType. ad esempio c: 890 nel messaggio: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType non è supportato su questa piattaforma. In questo caso MGIsDeviceOneOfTypeè un metodo della libreria MobileGestalt .

Invece di controllare la versione del simulatore, è disponibile un selettore separato per interrogare direttamente le capacità del simulatore. I messaggi molto probabilmente indicano incompatibilità tra le versioni del simulatore e le versioni di Xcode e / o API non supportate sul simulatore.


3
Questa sembra una ragione logica per il problema. Cosa hai finito per fare per risolvere il problema?
Brian Sachetta

1
Come suggerisce l'ultima frase. Assicurati che le versioni della sim e di Xcode siano compatibili o usa semplicemente un dispositivo reale.
Edison

Hai scritto circa 200 query , ma a quanto pare ci sono 673 chiavi offuscate conosciute . [modifica: vabbè, ti chiami "tymac" e il blog è di "timac" ... probabilmente non è una coincidenza]
Cœur

17

L'ho lasciato cadere con successo disabilitando la spazzatura del progetto.

Vai a < Nome del tuo progetto > -> Schema -> Modifica schema Quindi vai su Esegui (menu a sinistra) e aggiungi la seguente variabile d'ambiente:

Nome : OS_ACTIVITY_MODE, valore : disabilita

inserisci qui la descrizione dell'immagine


1
Funziona amico. Qualche spiegazione sul perché funziona?
Aditya S.

1
Questa non è una risposta, ma è correlato ed importante: stackoverflow.com/questions/52410471/...
dlpolanco

Mi dispiace menzionare che provando questo approccio, il mio simulatore non si apre e nessun output su console.
Neeraj Shukla

Questo tipo di comando rilascia alcuni messaggi di debug, è molto utile e non ha nulla a che fare con il corretto funzionamento del simulatore e della console: probabilmente hai un altro problema che non è correlato a questo argomento.
Alessandro Ornano

Ho riscontrato l'errore come: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType non è supportato su questa piattaforma. Per questo, quando ho provato l'approccio sopra, non ha funzionato. Ma quando ho appena chiuso il simulatore e pulito il mio codice, funzionava bene.
Neeraj Shukla

9

nel mio caso: controlla il tuo delegato dell'app per il metodo - didFinishLaunching. Avevo privato e ottengo l'errore. Dopo aver rimosso "privato" tutto funziona correttamente


6
Il mio non era privato.
ScottyBlades,

8

Ho appena installato Xcode 10 Beta e ho avuto lo stesso problema. Ran Xcode 9.4.1 e il problema è andato via.


10
Questa non è una risposta praticabile IMO, soprattutto ora che xcode 10 è in circolazione e ha ancora questo problema. Il problema non "è andato via" su xcode 9.4.1 - non è mai esistito per cominciare. Una cosa è dire "purtroppo questo è un problema di xcode 10 e potremmo dover essere pazienti". Un altro è ignorarlo del tutto.
Brian Sachetta

6

Questo errore si verificherà solo durante il test / debug sui simulatori.

Più nuovo è il simulatore, meglio è.

Caso: eseguo il simulatore iPhone 8 e ho ricevuto questo messaggio nel debugger.

Soluzione: sono passato a un simulatore più recente, nessun messaggio di errore nel debugger.


5

Mi sono imbattuto in questo quando apri un progetto da GitHub su Xcode 10.0.

La soluzione pragmatica era: basta premere più volte "Continua l'esecuzione del programma" e probabilmente disabilitare il punto di interruzione dell'eccezione . Apparentemente l'eccezione era recuperabile.

Non è una vera soluzione, ma a quel punto era abbastanza buona per me.


Nel mio caso, l'apertura di un vecchio progetto in Xcode 10.1, basta premere 'Continua l'esecuzione del programma' più volte mi ha portato a problema effettivo a portata di mano con la soluzione qui stackoverflow.com/a/12398777/4221299
zeeawan

5

Nel mio caso, l'obiettivo di distribuzione del target era su iOS 8. Quando l'ho trasferito a iOS 10.3, funzionava bene, sia sul simulatore che sul dispositivo.

Modifica della destinazione di distribuzione per correggere l'errore libMobileGestalt


1
Il mio è impostato su 12.2 e il messaggio viene stampato con il simulatore di iPhone SE ma non con quello di iPhone XR. Quindi, almeno per me, @anorskdev ha ragione.
Neph

5

Sto vedendo questo problema. Utilizzando Xcode 10.1. Creato un progetto nuovo di zecca - non fa altro che mostrare uno schermo bianco. Ho scoperto che veniva visualizzato sul simulatore per dispositivi meno recenti. Ad esempio, iPad Pro (12,9 pollici) e iPad Pro (12,9 pollici) (2a generazione) mostrano il problema, ma il problema è scomparso per iPad Pro (12,9 pollici) (3a generazione). Non viene visualizzato per il simulatore di iPhone XR.

Fondamentalmente sembra fastidioso.


Questa è stata anche la causa per me. Non sono sicuro del motivo per cui questo è un problema. Il mio iPad è in grado di eseguire iOS 12, quindi il simulatore di pari livello non dovrebbe essere considerato un dispositivo non supportato.
Abbey Jackson

Stessa cosa qui (lo schermo ha solo un InputField e un pulsante). Xcode 10 con un progetto iOS 12: l'utilizzo del simulatore di iPhone SE registra questo messaggio ma non viene visualizzato con l'iPhone XR.
Neph

2

Se hai caratteri forniti dall'app, devi aggiungerli a Info.plist e controllare se il file ha selezionato l'appartenenza di destinazione


1

Il modo normale in cui si verificano strani errori ha aiutato:

1) Progetto pulito;
2) Arresta il simulatore;
3) Reinstallare i pod.

Xcode 10.


Questo ha funzionato anche per me. Molte grazie. Gli utenti di iOS su piattaforma "nativescript" possono eseguire (1) pulire il progetto eliminando la cartella "piattaforme / ios", (2) spegnere e ripristinare il simulatore con "Cancella tutto il contenuto e le impostazioni" e (3) ricostruire il project by runnings 'tns prepare ios --release' e poi 'tns build ios --bundle'. Quindi, puoi eseguire l'app nel simulatore aprendo il file .xcworkspace, scegliere un simulatore ed eseguire il progetto da lì. Ha funzionato perfettamente per me.
Mick Morely,

1

Per me, con il simulatore in questione a fuoco, ho selezionato Hardware-> Cancella tutto il contenuto e le impostazioni.

Dopo il riavvio del simulatore, l'avvio della mia app ha funzionato di nuovo, come previsto.


1
Ora si chiama Device->Erase All Content and Settings...
Bruno Bieri il

1

Sono andato a XCode -> Preferenze -> Componenti Spunta tutti i simulatori e la casella di controllo per installare gli aggiornamenti automaticamente, quindi "controlla e installa ora" e sono andato via per alcune ore mentre si aggiornavano tutti.

Ora il problema è scomparso, quindi in effetti è come accennato. Nuovo XCode con vecchi simulatori non aggiornati.


Non consumerà molta memoria?
Euridice01

0

Ho avuto lo stesso problema, ma con MapKit, dove non veniva visualizzato un MapView, solo lo schermo bianco e lo stesso errore, MGIsDeviceOneOfType non è supportato su questa piattaforma.

Risolto correggendo gli avvisi "Layout ambiguo" legati all'oggetto MapView. Ora funziona perfettamente e gli errori sono scomparsi.


0

Quello che ha funzionato per me è stato cambiare all'interno general > Deployment Info > Main Interfacedi CDVLaunchScreen e fare lo stesso anche all'interno general > App Icons and Launch Images > Launch Screen Filedi CDVLaunchScreen.

Vengo da Ionic, quindi questo potrebbe non essere un problema per coloro che sviluppano in Swift / Objective-C.


1
Come l'hai risolto? Anch'io avevo lo stesso problema. Ma questo accade solo quando lo eseguo in produzione in ionic e dopo sono rimasto bloccato nel caricatore della schermata iniziale
KnowledgeSeeker

0

Ho recentemente aggiornato a Xcode 10.2e quando ho provato a eseguire un progetto creato in una versione precedente, si è verificato lo stesso errore.

Il problema era che il simulatore era in esecuzione prima di aggiornare Xcode.

La soluzione è stata molto semplice per me chiudere Simulator e riavviare in modo che possa ottenere le nuove modifiche. Non credo che il modello del simulatore (iPhone SE o iPhone X) sia importante. Hai solo bisogno di riavviare il tuo simulatore per rendere effettivo il nuovo aggiornamento.

Consiglierei di chiudere sia Xcode che il simulatore e riavviare il tuo Mac.


0

Ho ricevuto questo errore chiamando .syncla coda principale che ha causato un deadlock ( DispatchQueue.main.sync {}). Volevo chiamare .async.


0

Ho ricevuto questo errore, durante il tentativo di leggere un file json che si trova all'interno del mio progetto e non ha restituito nulla, a causa di questo ho ricevuto questo errore.

Ho ottenuto zero a causa di un errore di ortografia nel nome del carattere, quel file json conteneva i nomi dei caratteri, dopo aver copiato e incollato il nome del carattere ho ottenuto i dati e l'errore risolto.

Ho provato quasi tutte le soluzioni fornite sopra, niente ha funzionato, quindi esegui il debug con pazienza, scoprirai quale causa questo errore e in un momento difficile xcode giocherà nella nostra vita :)


0

Stavo affrontando lo stesso problema ma l'ho lasciato cadere con successo con le cose seguenti:

  1. Simulatore di spegnimento,
  2. Arresta Xcode,
  3. Riapri Xcode e il simulatore

Spero che sarà di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.