Błąd Xcode w symulatorze: MGIsDeviceOneOfType nie jest obsługiwany na tej platformie

100

Mam bardzo prostą aplikację z jednym widokiem, zawierającą kilka etykiet UIL. Po uruchomieniu w symulatorze konsola Xcode zwraca błąd:

Biblioteka libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType nie jest obsługiwana na tej platformie.

Sam symulator wyświetla tylko biały ekran. Próbowałem też uruchomić go na urządzeniu deweloperskim z tym samym białym ekranem. Przeszukałem dokumentację, ale nie mogę znaleźć żadnego odniesienia do MGIsDeviceOneOfType. Aplikacja jest napisana w języku Swift w Xcode 10 beta na macOS 10.14. Próbuję go uruchomić na symulatorach iPhone'a 7-X, a także na iPhone'ie deweloperskim 7, wszystkie z oprogramowaniem docelowym (12.0).

Drwal
źródło
1
Powinieneś wspomnieć, że używasz XCode 10 Beta. btw mając ten sam problem
kironet
Czy próbujesz skorzystać z AWS MobileHub?
Victor 'Chris' Cabral
2
Wystąpił ten błąd w konsoli debugowania podczas uruchamiania aplikacji do projektowania MVC klucza instruktora. Używam Xcode 10 (nie beta). Nie otrzymałem błędu podczas uruchamiania na rzeczywistym urządzeniu.
Steve Robertson
4
Problem po aktualizacji Xcode 10 (nie beta)
MUH Mobile Inc.
1
Problem wydaje się być związany z platformą działającą w symulatorze. Stworzyłem pusty projekt, skompilowałem i uruchomiłem na iPhonie X, XR, XS i XS-Max i nie było problemu. Uruchom go na czymkolwiek wcześniejszym, zaczynając od 8 Plus, i wystąpi błąd. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Odpowiedzi:

25

MobileGestalt

LibMobileGestalt.dylib stanowi centralne repozytorium dla wszystkich właściwościach iOS. Może być analogiczny do Gestalt systemu OS X, który jest częścią CoreServices. Gestalt systemu OS X jest udokumentowany, na przykład Gestalt Manager i został wycofany z 10.8. MobileGestalt jest całkowicie nieudokumentowane przez Apple, ponieważ jest prywatną biblioteką.

MobileGestalt umożliwia testowanie właściwości systemu, które mogą, ale nie muszą być kompatybilne z różnymi symulatorami.

Sporo procesów systemowych i aplikacji w iOS opiera się na MobileGestalt, który znajduje się pod adresem /usr/lib/libMobileGestalt.dylib. Jest to bardziej podstawowa biblioteka, ale jej udostępnione interfejsy API są zgodne z konwencjami platformy Apple i MGna przykład używają prefiksu API MGIsDeviceOneOfType.

Jeśli szukasz MobileGestalt w systemie plików iOS, nie znajdziesz go - podobnie jak wszystkie prywatne frameworki i biblioteki, został on wstępnie powiązany z /System/Library/Caches/...etc. Jeśli lubisz hakowanie i testowanie za pomocą pióra, możesz użyć narzędzi do ich wyodrębnienia.

MobileGestalt dostarcza wielu informacji - około 200 zapytań - dotyczących różnych aspektów systemu. Tu jest kilka.

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

Istnieją setki więcej np AirplaneMode, MobileEquipmentIdentifieritp

MobileGestalt utrzymuje tabelę kodów selektorów OSType. na przykład c: 890 w wiadomości: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType nie jest obsługiwane na tej platformie. W tym przypadku MGIsDeviceOneOfTypejest to metoda biblioteki MobileGestalt .

Zamiast sprawdzania wersji symulatora istnieje oddzielny selektor do bezpośredniego sprawdzania możliwości symulatora. Komunikaty najprawdopodobniej wskazują na niezgodności między wersjami symulatora a wersjami Xcode i / lub nieobsługiwanymi interfejsami API w symulatorze.

Edison
źródło
3
Wydaje się, że jest to logiczna przyczyna problemu. Co ostatecznie zrobiłeś, aby rozwiązać problem?
Brian Sachetta
1
Jak sugeruje ostatnie zdanie. Upewnij się, że wersje SIM i wersje Xcode są kompatybilne lub po prostu użyj prawdziwego urządzenia.
Edison
Napisałeś około 200 zapytań , ale najwyraźniej znanych jest 673 zaciemnionych kluczy . [edytuj: no cóż, nazywasz się "tymac", a blog pochodzi z "timac" ... prawdopodobnie nie jest to przypadek]
Cœur
17

Pomyślnie porzuciłem go, wyłączając śmieci projektu.

Idź do < Name of your Project > -> Scheme -> Edit Scheme Następnie przejdź do Run (menu po lewej stronie) i dodaj następującą zmienną środowiskową:

Nazwa : OS_ACTIVITY_MODE, wartość : wyłączone

wprowadź opis obrazu tutaj

Alessandro Ornano
źródło
1
To kolega z pracy. Jakieś wyjaśnienie, dlaczego to działa?
Aditya S.
1
To nie jest odpowiedź, ale jest to powiązane i ważne: stackoverflow.com/questions/52410471/ ...
dlpolanco
Z przykrością wspomniałem, że próbując tego podejścia, mój symulator nie otwiera się i nie ma wyjścia na konsoli.
Neeraj Shukla
Ten rodzaj komendy odrzuca niektóre komunikaty debugowania, jest bardzo przydatny i nie ma nic wspólnego z poprawnym działaniem symulatora i konsoli: prawdopodobnie masz inny problem, który nie jest związany z tym argumentem.
Alessandro Ornano
Napotkałem błąd, ponieważ: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType nie jest obsługiwany na tej platformie. W tym przypadku, gdy wypróbowałem powyższe podejście, to nie zadziałało. Ale kiedy po prostu zamknąłem symulator i wyczyściłem kod, wszystko działało dobrze.
Neeraj Shukla
9

w moim przypadku: sprawdź delegata aplikacji pod kątem metody - didFinishLaunching. Miałem prywatne i otrzymałem błąd. Po usunięciu „prywatnego” wszystko działa dobrze

ankmara
źródło
6
Mój nie był prywatny.
ScottyBlades
8

Właśnie zainstalowałem Xcode 10 Beta i miałem ten sam problem. Uruchomiono Xcode 9.4.1 i problem zniknął.

tjmister
źródło
10
To nie jest realna odpowiedź IMO, zwłaszcza teraz, gdy xcode 10 jest na wolności i nadal ma ten problem. Problem nie „zniknął” w xcode 9.4.1 - od początku nigdy nie istniał. Jedno powiedzieć „niestety jest to problem z Xcode 10 i być może będziemy musieli uzbroić się w cierpliwość”. Innym jest całkowite zignorowanie tego.
Brian Sachetta
6

Ten błąd występuje tylko podczas testowania / debugowania na symulatorach.

Im nowszy symulator, tym lepiej.

Przypadek: Uruchamiam symulator iPhone'a 8 plus mam ten komunikat w debugerze.

Rozwiązanie: Zmieniłem na nowszy symulator, brak komunikatu o błędzie w debugerze.

JhonnyTawk
źródło
5

Wpadłem na to podczas otwierania jakiegoś projektu z GitHub na Xcode 10.0.

Pragmatyczne rozwiązanie brzmiało: po prostu naciśnij wielokrotnie „Kontynuuj wykonywanie programu” i prawdopodobnie wyłącz wyjątkowy punkt przerwania . Najwyraźniej wyjątek można było odzyskać.

To nie jest prawdziwe rozwiązanie, ale w tamtym momencie wystarczyło mi.

de.
źródło
W moim przypadku, po otwarciu starego projektu w Xcode 10.1, po prostu kilkakrotnym
naciśnięciu
5

W moim przypadku celem wdrożenia Targetu był iOS 8. Kiedy przeniosłem go do iOS 10.3, działał dobrze, zarówno na symulatorze, jak i na urządzeniu.

Zmiana celu wdrożenia, aby naprawić błąd libMobileGestalt

Bharathram C
źródło
1
Mój jest ustawiony na 12.2, a wiadomość jest drukowana z symulatorem iPhone'a SE, ale nie z iPhone'em XR. Tak więc, przynajmniej dla mnie, @anorskdev ma rację.
Neph
5

Widzę ten problem. Korzystanie z Xcode 10.1. Stworzyłem zupełnie nowy projekt - nie robi nic poza pokazaniem białego ekranu. Odkryto, że pojawia się na symulatorze dla starszych urządzeń. Na przykład iPad Pro (12,9 cala) i iPad Pro (12,9 cala) (2.generacji) pokazują problem, ale problem zniknął w przypadku iPada Pro (12,9 cala) (3. generacji). Nie pojawia się w symulatorze iPhone'a XR.

Zasadniczo wydaje się denerwujący.

anorskdev
źródło
To był powód również dla mnie. Nie wiem, dlaczego jest to problem. Na moim iPadzie można uruchomić system iOS 12, więc symulator rodzeństwa nie powinien być traktowany jako urządzenie nieobsługiwane.
Abbey Jackson
To samo tutaj (ekran ma tylko InputField i przycisk). Xcode 10 z projektem iOS 12: Korzystanie z symulatora iPhone'a SE rejestruje tę wiadomość, ale nie pojawia się ona w przypadku iPhone'a XR.
Neph
2

Jeśli masz czcionki dostarczone przez aplikację, musisz dodać do Info.plist i sprawdzić, czy plik ma wybrane Członkostwo docelowe

Nuno Ferro
źródło
1

Regularny sposób, w jaki zdarzają się dziwne błędy, pomógł:

1) Czysty projekt;
2) Wyłącz symulator;
3) Zainstaluj ponownie strąki.

Xcode 10.

Nik Kov
źródło
U mnie też to zadziałało. Wielkie dzięki. Użytkownicy systemu iOS na platformie „nativescript” mogą (1) wyczyścić projekt, usuwając folder „platformy / ios”, (2) zamknąć i zresetować symulator za pomocą opcji „Usuń całą zawartość i ustawienia” oraz (3) odbudować project przez runnings 'tns przygotowują ios --release', a następnie 'tns build ios --bundle'. Następnie możesz uruchomić aplikację w symulatorze, otwierając plik .xcworkspace, wybierając symulator i stamtąd uruchomić projekt. U mnie zadziałało idealnie.
Mick Morely
1

Dla mnie, mając fokus na omawianym symulatorze, wybrałem Sprzęt-> Usuń całą zawartość i ustawienia.

Po ponownym uruchomieniu symulatora uruchomienie mojej aplikacji działało zgodnie z oczekiwaniami.

PKCLsoft
źródło
1
Teraz nazywa się Device->Erase All Content and Settings...
Bruno Bieri
1

Poszedłem do XCode -> Preferencje -> Komponenty Zaznaczono wszystkie symulatory i pole wyboru, aby zainstalować aktualizacje automatycznie, a następnie „sprawdź i zainstaluj teraz” i wyszedłem na kilka godzin, podczas gdy wszystkie były aktualizowane.

Teraz problem zniknął - więc w rzeczywistości jest tak, jak wspomniano. Nowy XCode ze starymi - niezaktualizowanymi symulatorami.

Harry McGovern
źródło
Czy to nie pochłonie dużo pamięci?
Euridice 01
0

Miałem ten sam problem, ale z MapKit, gdzie MapView się nie pojawił, tylko biały ekran i ten sam błąd, MGIsDeviceOneOfType nie jest obsługiwany na tej platformie.

Rozwiązanie tego problemu polega na naprawieniu ostrzeżeń „Niejednoznaczny układ” związanych z obiektem MapView. Teraz działa doskonale, a błędy zniknęły.

Strudel
źródło
0

general > Deployment Info > Main InterfacePomogło mi przejście na CDVLaunchScreen i zrobienie tego samego w ramachgeneral > App Icons and Launch Images > Launch Screen File CDVLaunchScreen.

Pochodzę z Ionic, więc może to nie stanowić problemu dla tych, którzy rozwijają się w Swift / Objective-C.

RaulGM
źródło
1
Jak to naprawiłeś? Ja też miałem ten sam problem. Ale dzieje się tak tylko wtedy, gdy uruchamiam go na produkcji w trybie jonowym, a potem utknąłem w programie ładującym ekran powitalny
KnowledgeSeeker
0

Niedawno zaktualizowałem do Xcode 10.2 i kiedy próbowałem uruchomić projekt utworzony we wcześniejszej wersji, wystąpił ten sam błąd.

Problem polegał na tym, że symulator działał przed aktualizacją Xcode.

Rozwiązanie było dla mnie bardzo proste, aby wyjść z Symulatora i zrestartować, aby mógł uzyskać nowe zmiany. Nie sądzę, żeby model symulatora (iPhone SE lub iPhone X) miał znaczenie. Wystarczy ponownie uruchomić symulator, aby nowa aktualizacja zaczęła obowiązywać.

Poleciłbym zamknąć Xcode i symulator i ponownie uruchomić komputer Mac.

Gulfam Khan
źródło
0

Otrzymałem ten błąd, wywołując .syncgłówną kolejkę, która spowodowała zakleszczenie ( DispatchQueue.main.sync {}). Chciałem zadzwonić .async.

Bartosz Kunat
źródło
0

Otrzymałem ten błąd, gdy próbowałem odczytać plik json, który jest w moim projekcie i zwrócił zero, w związku z tym otrzymałem ten błąd.

Otrzymałem zero z powodu błędu w pisowni w nazwie czcionki, ten plik json przechował nazwy czcionek, po skopiowaniu wklejania nazwy czcionki otrzymałem dane i naprawiono błąd.

Wypróbowałem prawie wszystkie powyższe rozwiązania, nic nie działało, więc cierpliwie debuguj, dowiesz się, co powoduje ten błąd iw jakimś złym czasie xcode zagra w naszym życiu :)

R. Mohan
źródło
0

Miałem ten sam problem, ale z powodzeniem porzuciłem go z poniższymi rzeczami:

  1. Symulator wyłączania,
  2. Zamknij Xcode,
  3. Otwórz ponownie Xcode i symulator

Mam nadzieję, że to pomoże.

Sandip Moradiya
źródło