web-dev-qa-db-fra.com

Erreur Xcode sur la simulation: MGIsDeviceOneOfType n'est pas pris en charge sur cette plateforme.

J'ai une application très simple avec une seule vue, contenant plusieurs UILabels. Lors de l'exécution d'une simulation, 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 montre juste un écran blanc. J'ai également essayé de l'exécuter sur un périphérique de développement avec le même écran blanc. J'ai effectué une recherche 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. Je tente de l'exécuter sur les simulateurs iPhone 7-X, ainsi que sur un développement iPhone 7, tous exécutant le logiciel cible (12.0).

57
Woodman

MobileGestalt

Le libMobileGestalt.dylib fournit un référentiel central pour toutes les propriétés de l'iOS. Cela peut être analogue à la Gestalt d'OS X, qui fait partie de CoreServices. Gestalt d'OS X est documenté par exemple Gestalt Manager et est obsolète depuis le 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 compatibles ou non sur différents simulateurs.

De nombreux processus système et applications dans iOS s'appuient 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 respectent les conventions du framework Apple et utilisent le préfixe MG, 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é lié au fichier/System/Library/Caches/...etc. Si vous aimez le piratage et les tests au stylo, vous pouvez utiliser des outils pour les extraire.

MobileGestalt fournit de nombreuses informations - environ 200 requêtes - sur différents 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, MobileEquipmentIdentifier, etc. 

MobileGestalt gère une table de 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, MGIsDeviceOneOfType est une méthode de la bibliothèque MobileGestalt.

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

15
tymac

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

9
tjmister

Je l'ai laissé tomber avec la désactivation de la poubelle de projet.

Allez à < Nom de votre projet > -> Scheme -> Éditer le schéma Ensuite, allez à Exécuter (menu à gauche) et ajoutez la variable d'environnement suivante:

Nom : OS_ACTIVITY_MODE, Valeur : désactiver

enter image description here

7
Alessandro Ornano

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

6
ankmara

Cette erreur ne se produira que lors du test/débogage sur des simulateurs.

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

Cas: Je lance le simulateur iPhone 8 plus j'ai eu ce message dans le débogueur.

Solution: J'ai changé pour un simulateur plus récent, pas de message d'erreur dans le débogueur.

3
JhonnyTawk

Dans mon cas, la cible de déploiement de la cible était iOS 8. Lorsque je l'ai poussé jusqu'à iOS 10.3, tout s'est bien déroulé, à la fois sur le simulateur et sur le périphérique.

 Changing the deployment target to fix libMobileGestalt error

2
Bharathram C

Je vois ce problème. Utiliser Xcode 10.1. Créé un nouveau projet - ne fait rien sauf montrer un écran blanc. Découvert qu'il apparaissait sur simulateur pour les appareils plus anciens. Par exemple, iPad Pro (12,9 pouces) et iPad Pro (12,9 pouces) (2ème génération) montrent le problème, mais le problème est parti pour iPad Pro (12,9 pouces) (3ème génération). Ne s'affiche pas pour le simulateur iPhone XR.

Fondamentalement, ça semble agaçant. 

2
anorskdev

A couru dans ceci en ouvrant un projet de GitHub sur Xcode 10.0. 

La solution pragmatique était la suivante: appuyez simplement sur 'Continuer l'exécution du programme' plusieurs fois et probablement désactivez 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 bon pour moi à ce moment-là. 

2
de.

Si vous avez des polices fournies par l'application, vous devez ajouter à Info.plist

1
Nuno Ferro

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 suis parti pendant quelques heures pendant qu'ils étaient tous mis à jour.

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

1
Harry McGovern

J'ai récemment mis à jour Xcode 10.2 et 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 était en cours d'exécution avant la mise à jour de Xcode.

La solution était très simple pour moi de quitter Simulator et de le redémarrer afin qu’il puisse obtenir les nouvelles modifications. Je ne pense pas que le modèle de 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 Xcode et le simulateur et de redémarrer votre Mac.

0
Gulfam Khan

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

0
Bartosz Kunat

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

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

0
Strudel

La manière habituelle quand d’étranges erreurs se produisent a aidé: 

1) projet propre;
2) Arrêter le simulateur;
3) Réinstallez les modules.

Xcode 10.

0
Nik Kov

Pour moi, avec le simulateur en question, 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.

0
PKCLsoft

Ce qui a fonctionné pour moi a été de changer dans general > Deployment Info > Main Interface en CDVLaunchScreen et de faire de même dans general > App Icons and Launch Images > Launch Screen File en CDVLaunchScreen.

Je viens d'Ionic, donc cela pourrait ne pas être un problème pour ceux qui se développent dans Swift/Objective-C.

0
RaulGM