Xcode-Fehler im Simulator: MGIsDeviceOneOfType wird auf dieser Plattform nicht unterstützt

99

Ich habe eine sehr einfache Anwendung mit einer einzigen Ansicht, die mehrere UILabels enthält. Beim Ausführen in Simulator gibt die Xcode-Konsole den folgenden Fehler zurück:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType wird auf dieser Plattform nicht unterstützt.

Der Simulator selbst zeigt nur einen weißen Bildschirm. Ich habe auch versucht, es auf einem Entwicklergerät mit demselben weißen Bildschirm auszuführen. Ich habe die Dokumentation durchsucht, kann aber keinen Verweis darauf finden MGIsDeviceOneOfType. Die Anwendung wurde in Swift in Xcode 10 Beta unter macOS 10.14 geschrieben. Ich versuche, es auf den iPhone 7-X-Simulatoren sowie auf einem Entwicklungs-iPhone 7 auszuführen, auf dem die Zielsoftware (12.0) ausgeführt wird.

Woodman
quelle
1
Sie sollten erwähnt haben, dass Sie XCode 10 Beta verwenden. Übrigens mit dem gleichen Problem
Kironet
Versuchen Sie, AWS MobileHub zu verwenden?
Victor 'Chris' Cabral
2
Dieser Fehler trat in der Debug-Konsole auf, wenn die MVC-Design-App eines Lehrers ausgeführt wurde. Ich verwende Xcode 10 (nicht Beta). Beim Ausführen auf dem tatsächlichen Gerät wurde der Fehler nicht angezeigt.
Steve Robertson
4
Mit diesem Problem nach Xcode 10 Update (nicht Beta)
MUH Mobile Inc.
1
Das Problem scheint mit der im Simulator laufenden Plattform zu zusammenhängen. Ich habe ein leeres Projekt erstellt, kompiliert und auf iPhone X, XR, XS und XS-Max ausgeführt, und es gab kein Problem. Führen Sie es zuvor mit 8 Plus aus, und der Fehler tritt auf. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Antworten:

25

MobileGestalt

Die libMobileGestalt.dylib bietet ein zentrales Repository für alle Eigenschaften von iOS. Es kann analog zu der Gestalt von OS X sein, die Teil von ist CoreServices. Die Gestalt von OS X ist beispielsweise im Gestalt-Manager dokumentiert und ab 10.8 veraltet. MobileGestalt ist von Apple völlig undokumentiert, da es sich um eine private Bibliothek handelt.

MobileGestalt ermöglicht das Testen von Systemeigenschaften, die auf verschiedenen Simulatoren kompatibel sein können oder nicht.

Nicht wenige Systemprozesse und Apps in iOS basieren auf MobileGestalt, das sich unter /usr/lib/libMobileGestalt.dylib befindet. Es ist eher eine Basisbibliothek, aber die verfügbaren APIs folgen den Apple Framework-Konventionen und verwenden beispielsweise das MGAPI-Präfix MGIsDeviceOneOfType.

Wenn Sie im iOS-Dateisystem nach MobileGestalt suchen, werden Sie es nicht finden - wie alle privaten Frameworks und Bibliotheken wurde es in /System/Library/Caches/...etc vorverknüpft. Wenn Sie gerne hacken und Pen-Tests durchführen, können Sie Tools verwenden, um diese zu extrahieren.

MobileGestalt bietet zahlreiche Informationen zu verschiedenen Aspekten des Systems - etwa 200 Abfragen. Hier sind ein paar.

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

Es gibt Hunderte mehr zB AirplaneMode, MobileEquipmentIdentifierusw.

MobileGestalt verwaltet eine Tabelle mit OSType-Auswahlcodes. Beispiel : c: 890 in der Nachricht: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType wird auf dieser Plattform nicht unterstützt. In diesem Fall MGIsDeviceOneOfTypehandelt es sich um eine Methode der MobileGestalt-Bibliothek .

Anstatt die Simulatorversion zu überprüfen, gibt es einen separaten Selektor, mit dem die Funktionen des Simulators direkt abgefragt werden können. Die Meldungen weisen höchstwahrscheinlich auf Inkompatibilitäten zwischen Simulatorversionen und Xcode-Versionen und / oder nicht unterstützten APIs auf dem Simulator hin.

Edison
quelle
3
Dies scheint ein logischer Grund für das Problem zu sein. Was haben Sie getan, um das Problem zu beheben?
Brian Sachetta
1
Wie der allerletzte Satz andeutet. Stellen Sie sicher, dass Sim- und Xcode-Versionen kompatibel sind, oder verwenden Sie einfach ein echtes Gerät.
Edison
Sie haben ungefähr 200 Abfragen geschrieben , aber anscheinend sind 673 verschleierte Schlüssel bekannt . [edit: na ja, dein Name ist "tymac" und der Blog ist von "timac" ... wahrscheinlich kein Zufall]
Cœur
17

Ich habe es erfolgreich mit der Deaktivierung des Projektmülls gelöscht.

Gehen Sie zu < Name Ihres Projekts > -> Schema -> Schema bearbeiten. Gehen Sie dann zu Ausführen (Menü auf der linken Seite) und fügen Sie die folgende Umgebungsvariable hinzu:

Name : OS_ACTIVITY_MODE, Wert : disable

Geben Sie hier die Bildbeschreibung ein

Alessandro Ornano
quelle
1
Es ist Arbeitskollege. Irgendeine Erklärung, warum es funktioniert?
Aditya S.
1
Dies ist keine Antwort, aber es ist verwandt und wichtig: stackoverflow.com/questions/52410471/…
dlpolanco
Ich muss leider erwähnen, dass mein Simulator bei diesem Ansatz nicht geöffnet wird und keine Ausgabe an der Konsole erfolgt.
Neeraj Shukla
Diese Art von Kommad löscht bestimmte Debug-Meldungen, ist sehr nützlich und hat nichts mit der korrekten Funktion von Simulator und Konsole zu tun: Wahrscheinlich haben Sie ein anderes Problem, das nicht mit diesem Argument zusammenhängt.
Alessandro Ornano
Ich habe den Fehler festgestellt als: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType wird auf dieser Plattform nicht unterstützt. Als ich den obigen Ansatz ausprobierte, funktionierte dies nicht. Aber als ich einfach den Simulator verließ und meinen Code bereinigte, funktionierte es einwandfrei.
Neeraj Shukla
9

in meinem Fall: Überprüfen Sie Ihren App-Delegaten auf die Methode - didFinishLaunching. Ich hatte privat und bekomme den Fehler. Nach dem Entfernen von "privat" funktioniert alles einwandfrei

ankmara
quelle
6
Meins war nicht privat.
ScottyBlades
8

Ich habe gerade Xcode 10 Beta installiert und hatte das gleiche Problem. Ran Xcode 9.4.1 und das Problem ging weg.

tjmister
quelle
10
Dies ist keine praktikable Antwort IMO, besonders jetzt, wo xcode 10 in der Wildnis ist und immer noch dieses Problem hat. Das Problem ist auf xcode 9.4.1 nicht "verschwunden" - es gab es zunächst nie. Es ist eine Sache zu sagen: "Leider handelt es sich um ein Xcode 10-Problem, und wir müssen möglicherweise etwas Geduld haben." Es ist eine andere Sache, es ganz zu ignorieren.
Brian Sachetta
6

Dieser Fehler tritt nur beim Testen / Debuggen auf Simulatoren auf.

Je neuer der Simulator, desto besser.

Fall: Ich starte den Simulator iPhone 8 und habe diese Meldung im Debugger erhalten.

Lösung: Ich habe auf einen neueren Simulator keine Fehlermeldung im Debugger umgestellt.

JhonnyTawk
quelle
5

Dies ist beim Öffnen eines Projekts von GitHub auf Xcode 10.0 aufgetreten.

Die pragmatische Lösung war: Klicken Sie einfach mehrmals auf "Programmausführung fortsetzen" und deaktivieren Sie wahrscheinlich Ihren Ausnahme-Haltepunkt . Anscheinend war die Ausnahme wiederherstellbar.

Es ist keine echte Lösung, aber zu diesem Zeitpunkt war es gut genug für mich.

de.
quelle
In meinem Fall, als ich ein altes Projekt in Xcode 10.1 öffnete und mehrmals auf "Programmausführung fortsetzen" drückte,
zeeawan
5

In meinem Fall war das Bereitstellungsziel des Ziels iOS 8. Als ich es auf iOS 10.3 hochgestuft habe, lief es sowohl auf dem Simulator als auch auf dem Gerät einwandfrei.

Ändern des Bereitstellungsziels zur Behebung des libMobileGestalt-Fehlers

Bharathram C.
quelle
1
Mine ist auf 12.2 eingestellt und die Nachricht wird mit dem iPhone SE-Simulator gedruckt, nicht jedoch mit dem iPhone XR. Zumindest für mich ist @anorskdev also richtig.
Neph
5

Ich sehe dieses Problem. Verwenden von Xcode 10.1. Erstellt ein brandneues Projekt - macht nichts anderes als einen weißen Bildschirm anzuzeigen. Es wurde festgestellt, dass es im Simulator für ältere Geräte angezeigt wurde. Zum Beispiel zeigen iPad Pro (12,9 Zoll) und iPad Pro (12,9 Zoll) (2. Generation) das Problem, aber das Problem ist für iPad Pro (12,9 Zoll) (3. Generation) weg. Wird für den iPhone XR-Simulator nicht angezeigt.

Grundsätzlich scheint nervig.

anorskdev
quelle
Dies war auch die Ursache für mich. Ich bin mir nicht sicher, warum dies ein Problem ist. Mein iPad kann iOS 12 ausführen, daher sollte der Geschwistersimulator nicht als nicht unterstütztes Gerät betrachtet werden.
Abbey Jackson
Gleiches hier (Bildschirm hat nur ein InputField und eine Schaltfläche). Xcode 10 mit einem iOS 12-Projekt: Bei Verwendung des iPhone SE-Simulators wird diese Meldung protokolliert, beim iPhone XR jedoch nicht angezeigt.
Neph
2

Wenn Sie von der App bereitgestellte Schriftarten haben, müssen Sie diese zu Info.plist hinzufügen und prüfen, ob für die Datei die Zielmitgliedschaft ausgewählt ist

Nuno Ferro
quelle
1

Der normale Weg, wenn seltsame Fehler auftreten, hat geholfen:

1) Projekt reinigen;
2) Simulator herunterfahren;
3) Bringen Sie die Pods wieder an.

Xcode 10.

Nik Kov
quelle
Das hat auch bei mir funktioniert. Vielen Dank. Benutzer von iOS über die 'nativescript'-Plattform können Folgendes tun: (1) Bereinigen Sie das Projekt, indem Sie den Ordner' platform / ios 'löschen. (2) Fahren Sie den Simulator herunter und setzen Sie ihn zurück, indem Sie "Alle Inhalte und Einstellungen löschen". (3) Erstellen Sie den Ordner neu Projekt durch Ausführen von 'tns prepare ios --release' und dann 'tns build ios --bundle'. Anschließend können Sie die App im Simulator ausführen, indem Sie die .xcworkspace-Datei öffnen, einen Simulator auswählen und das Projekt von dort aus ausführen. Es hat perfekt für mich funktioniert.
Mick Morely
1

Für mich habe ich mit dem betreffenden Simulator Hardware-> Alle Inhalte und Einstellungen löschen ausgewählt.

Nach dem Neustart des Simulators funktionierte das Starten meiner App wie erwartet erneut.

PKCLsoft
quelle
1
Es heißt jetzt Device->Erase All Content and Settings...
Bruno Bieri
1

Ich ging zu XCode -> Einstellungen -> Komponenten. Aktivierte alle Simulatoren und das Kontrollkästchen, um Updates automatisch zu installieren, und dann "Jetzt prüfen und installieren" und ging für ein paar Stunden weg, während sie alle aktualisiert wurden.

Jetzt ist das Problem weg - also ist es tatsächlich wie erwähnt. Neuer XCode mit alten - nicht aktualisierten Simulatoren.

Harry McGovern
quelle
Wird das nicht viel Gedächtnis verschlingen?
Euridice01
0

Ich hatte das gleiche Problem, aber mit MapKit, wo eine MapView nicht angezeigt wurde, nur der weiße Bildschirm und der gleiche Fehler, wird MGIsDeviceOneOfType auf dieser Plattform nicht unterstützt.

Es wurde behoben, indem "Mehrdeutige Layout" -Warnungen behoben wurden, die an das MapView-Objekt gebunden waren. Jetzt funktioniert es einwandfrei und die Fehler sind verschwunden.

Strudel
quelle
0

Was für mich funktioniert hat, war, innerhalb general > Deployment Info > Main Interfacevon CDVLaunchScreen zu wechseln und dasselbe auch innerhalb general > App Icons and Launch Images > Launch Screen Filevon CDVLaunchScreen zu tun.

Ich komme aus Ionic, daher ist dies möglicherweise kein Problem für diejenigen, die sich in Swift / Objective-C entwickeln.

RaulGM
quelle
1
Wie hast du das behoben? Ich hatte auch das gleiche Problem. Aber das passiert nur, wenn es in der Produktion in ionic läuft und danach steckte ich im Splash Screen Loader
KnowledgeSeeker
0

Ich habe kürzlich auf Xcode aktualisiert 10.2und als ich versuchte, ein in einer früheren Version erstelltes Projekt auszuführen, ist der gleiche Fehler aufgetreten.

Das Problem war, dass der Simulator vor dem Aktualisieren von Xcode ausgeführt wurde.

Die Lösung war für mich sehr einfach, Simulator zu beenden und neu zu starten, damit die neuen Änderungen abgerufen werden können. Ich denke nicht, dass das Modell des Simulators (iPhone SE oder iPhone X) wichtig ist. Sie müssen lediglich Ihren Simulator neu starten, damit das neue Update wirksam wird.

Ich würde empfehlen, sowohl Xcode als auch Simulator zu beenden und Ihren Mac neu zu starten.

Gulfam Khan
quelle
0

Ich habe diesen Fehler erhalten, indem ich .syncdie Hauptwarteschlange aufgerufen habe, die einen Deadlock ( DispatchQueue.main.sync {}) verursacht hat. Ich wollte anrufen .async.

Bartosz Kunat
quelle
0

Ich habe diesen Fehler erhalten, als ich versucht habe, eine JSON-Datei zu lesen, die sich in meinem Projekt befindet, und sie hat null zurückgegeben. Aus diesem Grund habe ich diesen Fehler erhalten.

Ich habe wegen eines Rechtschreibfehlers im Schriftnamen keine erhalten. Diese JSON-Datei enthielt die Schriftnamen. Nach dem Einfügen des Schriftnamens habe ich Daten erhalten und den Fehler behoben.

Ich habe fast alle oben genannten Lösungen ausprobiert, nichts hat funktioniert. Debuggen Sie also mit Geduld, Sie werden erfahren, was diesen Fehler verursacht, und in einer schlechten Zeit wird xcode in unserem Leben spielen :)

R. Mohan
quelle
0

Ich hatte das gleiche Problem, aber ich habe es erfolgreich mit den folgenden Dingen fallen gelassen:

  1. Abschaltsimulator,
  2. Xcode herunterfahren,
  3. Öffnen Sie Xcode und Simulator erneut

Ich hoffe es wird helfen.

Sandip Moradiya
quelle