Erreur Xcode sur le simulateur: MGIsDeviceOneOfType n'est pas pris en charge sur cette plate-forme

99

J'ai une application très simple avec une seule vue, contenant plusieurs UILabels. Lors de l'exécution dans Simulator, la console Xcode renvoie l'erreur:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType n'est pas pris en charge sur cette plate-forme.

Le simulateur lui-même n'affiche qu'un écran blanc. J'ai également essayé de l'exécuter sur un appareil de développement avec le même écran blanc. J'ai cherché dans la documentation mais je ne trouve aucune référence à MGIsDeviceOneOfType. L'application est écrite en Swift dans Xcode 10 beta sur macOS 10.14. J'essaie de l'exécuter sur les simulateurs iPhone 7-X, ainsi que sur un iPhone 7 de développement, tous exécutant le logiciel cible (12.0).

Woodman
la source
1
Vous auriez dû mentionner que vous utilisez XCode 10 Beta. btw ayant le même problème
kironet
Essayez-vous d'utiliser AWS MobileHub?
Victor 'Chris' Cabral le
2
Ran dans cette erreur dans la console de débogage lors de l'exécution de l'application de conception MVC clé d'un instructeur. J'utilise Xcode 10 (pas bêta). N'a pas obtenu l'erreur lors de l'exécution sur un appareil réel.
Steve Robertson
4
Avoir ce problème après la mise à jour de Xcode 10 (pas bêta)
MUH Mobile Inc.
1
Le problème semble être lié à la plate-forme exécutée dans le simulateur. J'ai créé un projet vide, compilé et exécuté sur iPhone X, XR, XS et XS-Max et il n'y a eu aucun problème. Exécutez-le sur n'importe quoi avant cela, en commençant par 8 Plus, et l'erreur se produit. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Réponses:

25

MobileGestalt

La libMobileGestalt.dylib fournit un référentiel central pour toutes les propriétés d'iOS. Cela peut être analogue à Gestalt d'OS X, qui fait partie de CoreServices. La Gestalt d'OS X est documentée par exemple Gestalt Manager et est obsolète à partir de la version 10.8. MobileGestalt est entièrement non documenté par Apple car il s'agit d'une bibliothèque privée.

MobileGestalt permet de tester les propriétés du système qui peuvent ou non être compatibles sur différents simulateurs.

De nombreux processus système et applications sous iOS reposent sur MobileGestalt, qui se trouve dans /usr/lib/libMobileGestalt.dylib. Il s'agit plus d'une bibliothèque de base, mais ses API exposées suivent les conventions du framework Apple et utilisent le MGpréfixe API par exemple MGIsDeviceOneOfType.

Si vous recherchez MobileGestalt sur le système de fichiers iOS, vous ne le trouverez pas - comme tous les frameworks et bibliothèques privés, il a été pré-lié dans /System/Library/Caches/...etc. Si vous aimez le piratage et les tests de stylet, vous pouvez utiliser des outils pour l'extraire.

MobileGestalt fournit de nombreuses informations - environ 200 requêtes - sur divers aspects du système. Voici quelques-uns.

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

Il y a des centaines d' autres , par exemple AirplaneMode, MobileEquipmentIdentifieretc.

MobileGestalt maintient une table des codes de sélecteur OSType. par exemple c: 890 dans le message: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType n'est pas pris en charge sur cette plate-forme. Dans ce cas, il MGIsDeviceOneOfTypes'agit d'une méthode de la bibliothèque MobileGestalt .

Au lieu de vérifier la version du simulateur, il existe un sélecteur séparé pour interroger directement les capacités du simulateur. Les messages indiquent très probablement des incompatibilités entre les versions du simulateur et les versions Xcode et / ou les API non prises en charge sur le simulateur.

Edison
la source
3
Cela semble être une raison logique du problème. Qu'avez-vous fait pour résoudre le problème?
Brian Sachetta
1
Comme le suggère la toute dernière phrase. Assurez-vous que les versions de la carte SIM et les versions Xcode sont compatibles ou utilisez simplement un appareil réel.
Edison
Vous avez écrit environ 200 requêtes , mais apparemment, il existe 673 clés obscurcies connues . [modifier: eh bien, votre nom est "tymac" et le blog est de "timac" ... probablement pas une coïncidence]
Cœur
17

Je l'ai supprimé avec succès avec la désactivation de la poubelle du projet.

Allez dans < Nom de votre projet > -> Schéma -> Modifier le schéma Puis allez dans Exécuter (menu sur le côté gauche) et ajoutez la variable d'environnement suivante:

Nom : OS_ACTIVITY_MODE, valeur : désactiver

entrez la description de l'image ici

Alessandro Ornano
la source
1
C'est compagnon de travail. Une explication pourquoi ça marche?
Aditya S.
1
Ce n'est pas une réponse, mais c'est lié et important: stackoverflow.com/questions/52410471/…
dlpolanco
Je regrette de mentionner qu'en essayant cette approche, mon simulateur ne s'ouvre pas et aucune sortie à la console.
Neeraj Shukla
Ce genre de commad supprime certains messages de débogage, c'est très utile et cela n'a rien à voir avec le bon fonctionnement du simulateur et de la console: vous avez probablement un autre problème qui n'est pas lié à cet argument.
Alessandro Ornano
J'ai rencontré l'erreur en tant que: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType n'est pas pris en charge sur cette plate-forme. Pour cela, lorsque j'ai essayé l'approche ci-dessus, cela n'a pas fonctionné. Mais quand je viens de quitter le simulateur et de nettoyer mon code, cela fonctionnait bien.
Neeraj Shukla
9

dans mon cas: vérifiez votre délégué d'application pour la méthode - didFinishLaunching. J'ai eu privé et obtenir l'erreur. Après avoir supprimé "privé", tout fonctionne correctement

Ankmara
la source
6
Le mien n'était pas privé.
ScottyBlades
8

Je viens d'installer Xcode 10 Beta et j'ai eu le même problème. Ran Xcode 9.4.1 et le problème a disparu.

tjmister
la source
10
Ce n'est pas une réponse viable IMO, surtout maintenant que xcode 10 est dans la nature et a toujours ce problème. Le problème n'a pas "disparu" sur xcode 9.4.1 - il n'a jamais existé au départ. C'est une chose de dire "malheureusement, c'est un problème avec xcode 10 et nous devrons peut-être être patients". C'est une autre de l'ignorer complètement.
Brian Sachetta
6

Cette erreur ne se produira que lors des tests / débogages sur des simulateurs.

Plus le simulateur est récent, mieux c'est.

Cas: je lance le simulateur iPhone 8 plus j'ai reçu ce message dans le débogueur.

Solution: je suis passé à un simulateur plus récent sans message d'erreur dans le débogueur.

JhonnyTawk
la source
5

Ran dans cela lors de l'ouverture d'un projet à partir de GitHub sur Xcode 10.0.

La solution pragmatique était: appuyez simplement sur «Continuer l'exécution du programme» plusieurs fois et désactivez probablement votre point d'arrêt d'exception . Apparemment, l'exception était récupérable.

Ce n'est pas une vraie solution mais c'était assez bien pour moi à ce moment-là.

de.
la source
Dans mon cas, ouvrir un ancien projet dans Xcode 10.1,
appuyer
5

Dans mon cas, la cible de déploiement de la cible était à iOS 8. Quand je l'ai poussé jusqu'à iOS 10.3, cela fonctionnait bien, à la fois sur le simulateur et sur l'appareil.

Modification de la cible de déploiement pour corriger l'erreur libMobileGestalt

Bharathram C
la source
1
Le mien est réglé sur 12,2 et le message est imprimé avec le simulateur iPhone SE mais pas avec celui de l'iPhone XR. Donc, au moins pour moi, @anorskdev a raison.
Neph
5

Je vois ce problème. Utilisation de Xcode 10.1. Créé un tout nouveau projet - ne fait rien sauf afficher un écran blanc. J'ai découvert qu'il apparaissait sur le simulateur pour les appareils plus anciens. Par exemple, l'iPad Pro (12,9 pouces) et l'iPad Pro (12,9 pouces) (2e génération) montrent le problème, mais le problème a disparu pour l'iPad Pro (12,9 pouces) (3e génération). Ne s'affiche pas pour le simulateur iPhone XR.

Fondamentalement, cela semble ennuyeux.

anorskdev
la source
C'était aussi la cause pour moi. Je ne sais pas pourquoi c'est un problème. Mon iPad est capable d'exécuter iOS 12, donc le simulateur frère ne doit pas être considéré comme un appareil non pris en charge.
Abbey Jackson
Même chose ici (l'écran n'a qu'un InputField et un bouton). Xcode 10 avec un projet iOS 12: l'utilisation du simulateur iPhone SE enregistre ce message mais il n'apparaît pas avec l'iPhone XR.
Neph
2

Si vous avez des polices fournies par l'application, vous devez ajouter à Info.plist et vérifier si le fichier a l'adhésion cible sélectionnée

Nuno Ferro
la source
1

La manière habituelle lorsque des erreurs étranges se produisent a aidé:

1) projet propre;
2) Arrêtez le simulateur;
3) Réinstaller les pods.

Xcode 10.

Nik Kov
la source
Cela a fonctionné pour moi aussi. Merci beaucoup. Utilisateurs d'iOS sur la plate-forme 'nativescript', vous pouvez faire (1) Nettoyer le projet en supprimant le dossier 'platform / ios', (2) Arrêter et réinitialiser le simulateur en "Effacer tout le contenu et les paramètres", et (3) Reconstruire le projet par des runnings 'tns prepare ios --release' puis 'tns build ios --bundle'. Ensuite, vous pouvez exécuter l'application dans le simulateur en ouvrant le fichier .xcworkspace, en choisissant un simulateur et en exécutant le projet à partir de là. Cela a parfaitement fonctionné pour moi.
Mick Morely le
1

Pour moi, avec le simulateur en question au point, j'ai sélectionné Matériel-> Effacer tout le contenu et les paramètres.

Après le redémarrage du simulateur, le lancement de mon application a fonctionné à nouveau, comme prévu.

PKCLsoft
la source
1
Il s'appelle maintenant Device->Erase All Content and Settings...
Bruno Bieri le
1

Je suis allé à XCode -> Préférences -> Composants Cochez tous les simulateurs et la case à cocher pour installer les mises à jour automatiquement, puis "vérifier et installer maintenant" et je suis parti pendant quelques heures pendant qu'ils étaient tous mis à jour.

Maintenant, le problème a disparu - donc en fait, c'est comme mentionné. Nouveau XCode avec l'ancien - simulateurs non mis à jour.

Harry McGovern
la source
Cela ne va-t-il pas manger beaucoup de mémoire?
Euridice01
0

J'ai eu le même problème, mais avec MapKit, où un MapView ne s'affiche pas, juste l'écran blanc et la même erreur, MGIsDeviceOneOfType n'est pas pris en charge sur cette plate-forme.

Résolu le problème en corrigeant les avertissements "Disposition ambiguë" liés à l'objet MapView. Maintenant, cela fonctionne parfaitement bien et les erreurs ont disparu.

Strudel
la source
0

Ce qui a fonctionné pour moi était de changer à l'intérieur general > Deployment Info > Main Interfacede CDVLaunchScreen et de faire la même chose à l'intérieur general > App Icons and Launch Images > Launch Screen Filede CDVLaunchScreen.

Je viens d'Ionic, donc ce n'est peut-être pas un problème pour ceux qui développent en Swift / Objective-C.

RaulGM
la source
1
Comment l'avez-vous résolu? J'avais aussi le même problème. Mais cela ne se produit que lors de son exécution en production en ionique et après cela, je suis resté coincé dans le chargeur d'écran de démarrage
KnowledgeSeeker
0

J'ai récemment mis à jour vers Xcode 10.2et lorsque j'ai essayé d'exécuter un projet créé dans une version antérieure, la même erreur s'est produite.

Le problème était que le simulateur fonctionnait avant la mise à jour de Xcode.

La solution était très simple pour moi de quitter Simulator et de redémarrer afin qu'il puisse obtenir les nouvelles modifications. Je ne pense pas que le modèle du simulateur (iPhone SE ou iPhone X) compte. Il vous suffit de redémarrer votre simulateur pour qu'il prenne effet à la nouvelle mise à jour.

Je recommanderais de quitter à la fois Xcode et le simulateur et de redémarrer votre Mac.

Gulfam Khan
la source
0

J'ai eu cette erreur en appelant .syncla file d'attente principale qui a provoqué un blocage ( DispatchQueue.main.sync {}). Je voulais appeler .async.

Bartosz Kunat
la source
0

J'ai eu cette erreur, en essayant de lire un fichier json qui se trouve dans mon projet et il a renvoyé nul, à cause de cela, j'ai eu cette erreur.

J'ai eu nul à cause d'une faute d'orthographe dans le nom de la police, ce fichier json contenait les noms de police, après avoir copié-collé le nom de la police, j'ai obtenu des données et l'erreur a été corrigée.

J'ai essayé presque toutes les solutions données ci-dessus, rien n'a fonctionné, alors déboguez avec patience, vous saurez ce qui est à l'origine de cette erreur et dans un mauvais moment, xcode jouera dans notre vie :)

R. Mohan
la source
0

J'étais confronté au même problème mais je l'ai laissé tomber avec les choses ci-dessous:

  1. Simulateur d'arrêt,
  2. Arrêter Xcode,
  3. Rouvrir Xcode et simulateur

J'espère que cela aidera.

Sandip Moradiya
la source