Kesalahan Xcode pada Simulator: MGIsDeviceOneOfType tidak didukung pada platform ini

100

Saya memiliki aplikasi yang sangat sederhana dengan satu tampilan, berisi beberapa UILabel. Saat berjalan di Simulator, konsol Xcode mengembalikan kesalahan:

libMobileGestalt MobileGestalt.c: 875: MGIsDeviceOneOfType tidak didukung pada platform ini.

Simulator itu sendiri hanya menampilkan layar putih. Saya juga mencoba menjalankannya di perangkat pengembang dengan layar putih yang sama. Saya telah mencari dokumentasi tetapi tidak dapat menemukan referensi apa pun MGIsDeviceOneOfType. Aplikasi ini ditulis dalam Swift di Xcode 10 beta pada macOS 10.14. Saya mencoba menjalankannya di Simulator iPhone 7-X, serta iPhone 7 pengembangan, semua menjalankan perangkat lunak target (12.0).

Penebang
sumber
1
Anda harus menyebutkan bahwa Anda menggunakan XCode 10 Beta. btw mengalami masalah yang sama
kironet
Apakah Anda mencoba menggunakan AWS MobileHub?
Victor 'Chris' Cabral
2
Mengalami kesalahan ini di konsol debug saat menjalankan aplikasi desain MVC kunci instruktur. Saya menjalankan Xcode 10 (bukan beta). Tidak mendapatkan kesalahan saat berjalan di perangkat sebenarnya.
Steve Robertson
4
Mengalami masalah ini setelah pembaruan Xcode 10 (bukan beta)
MUH Mobile Inc.
1
Masalahnya tampaknya terkait dengan platform yang berjalan di simulator. Saya membuat proyek kosong, mengompilasi, dan menjalankan iPhone X, XR, XS, dan XS-Max dan tidak ada masalah. Jalankan apa pun sebelumnya, dimulai dengan 8 Plus, dan kesalahan terjadi. Mac OS X: 10.13.6, Xcode: 10.0
wbl2745

Jawaban:

25

MobileGestalt

The libMobileGestalt.dylib menyediakan sebuah repositori pusat untuk semua properti iOS ini. Ini dapat dianalogikan dengan Gestalt OS X, yang merupakan bagian dari CoreServices. Gestalt OS X didokumentasikan misalnya Gestalt Manager dan sudah tidak digunakan lagi mulai 10.8. MobileGestalt sepenuhnya tidak didokumentasikan oleh Apple karena merupakan perpustakaan pribadi.

MobileGestalt memungkinkan pengujian properti sistem yang mungkin kompatibel atau tidak pada simulator yang berbeda.

Beberapa proses sistem dan aplikasi di iOS mengandalkan MobileGestalt, yang terletak di /usr/lib/libMobileGestalt.dylib. Ini lebih merupakan perpustakaan dasar, tetapi API yang diekspos mengikuti konvensi kerangka kerja Apple dan menggunakan MGawalan API misalnya MGIsDeviceOneOfType.

Jika Anda mencari MobileGestalt di sistem file iOS, Anda tidak akan menemukannya - seperti semua framework dan pustaka pribadi, itu telah ditautkan sebelumnya ke /System/Library/Caches/...etc. Jika Anda suka meretas dan menguji pena maka Anda dapat menggunakan alat untuk mengekstraknya.

MobileGestalt menyediakan banyak informasi - sekitar 200 atau lebih kueri - tentang berbagai aspek sistem. Berikut ini beberapa.

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

Ada ratusan lebih misalnya AirplaneMode, MobileEquipmentIdentifier, dll

MobileGestalt memelihara tabel kode pemilih OSType. misalnya c: 890 di pesan: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType tidak didukung di platform ini. Dalam hal ini MGIsDeviceOneOfTypeadalah metode pustaka MobileGestalt .

Alih-alih memeriksa versi simulator, terdapat pemilih terpisah untuk menanyakan langsung kemampuan simulator. Pesan yang paling mungkin menunjukkan ketidakcocokan antara versi simulator dan versi Xcode dan / atau API yang tidak didukung di simulator.

Edison
sumber
3
Ini sepertinya alasan logis untuk masalah tersebut. Apa yang akhirnya Anda lakukan untuk memperbaiki masalah tersebut?
Brian Sachetta
1
Seperti yang disarankan kalimat terakhir. Pastikan versi sim & versi Xcode kompatibel atau cukup gunakan perangkat asli.
Edison
Anda menulis sekitar 200 kueri , tetapi ternyata ada 673 kunci yang dikaburkan . [edit: oh, baiklah, nama Anda adalah "tymac" dan blognya dari "timac" ... mungkin bukan kebetulan]
Cœur
17

Saya berhasil menjatuhkannya dengan menonaktifkan sampah proyek.

Pergi ke < Name of your Project > -> Scheme -> Edit Scheme Lalu pergi ke Run (menu di sebelah kiri) dan tambahkan variabel lingkungan berikut:

Nama : OS_ACTIVITY_MODE, Nilai : nonaktifkan

masukkan deskripsi gambar di sini

Alessandro Ornano
sumber
1
Ini teman kerja. Ada penjelasan mengapa ini berhasil?
Aditya S.
1
Ini bukan jawaban, tetapi ini terkait dan penting: stackoverflow.com/questions/52410471/…
dlpolanco
Saya menyesal menyebutkan bahwa mencoba pendekatan ini, simulator saya tidak dapat dibuka dan tidak ada keluaran di konsol.
Neeraj Shukla
Commad semacam ini menjatuhkan pesan debug tertentu, ini sangat berguna dan tidak ada hubungannya dengan simulator dan konsol yang berfungsi dengan benar: mungkin Anda memiliki masalah lain yang tidak terkait dengan argumen ini.
Alessandro Ornano
Saya mengalami kesalahan karena: libMobileGestalt MobileGestalt.c: 890: MGIsDeviceOneOfType tidak didukung pada platform ini. Untuk ini ketika saya mencoba pendekatan di atas, ini tidak berhasil. Tetapi ketika saya baru saja keluar dari simulator dan membersihkan kode saya, maka itu berfungsi dengan baik.
Neeraj Shukla
9

dalam kasus saya: periksa delegasi aplikasi Anda untuk metode - didFinishLaunching. Saya memiliki pribadi dan mendapatkan kesalahan. Setelah menghapus "pribadi" semuanya bekerja dengan baik

ankmara
sumber
6
Punyaku tidak pribadi.
ScottyBlades
8

Saya baru saja menginstal Xcode 10 Beta dan mengalami masalah yang sama. Menjalankan Xcode 9.4.1 dan masalahnya hilang.

tjmister
sumber
10
Ini bukan jawaban IMO yang layak, terutama sekarang karena xcode 10 ada di alam liar dan masih memiliki masalah ini. Masalahnya tidak "hilang" di xcode 9.4.1 - tidak pernah ada sejak awal. Mengatakan "sayangnya ini adalah masalah xcode 10 dan kami mungkin harus bersabar." Mengabaikannya sama sekali adalah hal lain.
Brian Sachetta
6

Kesalahan ini hanya akan terjadi saat pengujian / debugging pada simulator.

Semakin baru simulator semakin baik.

Kasus: Saya menjalankan simulator iPhone 8 plus Saya mendapat pesan ini di debugger.

Solusi: Saya mengubah ke simulator yang lebih baru tidak ada pesan kesalahan di debugger.

JhonnyTawk
sumber
5

Mengalami ini saat membuka beberapa proyek dari GitHub di Xcode 10.0.

Solusi pragmatisnya adalah: cukup tekan 'Lanjutkan eksekusi program' beberapa kali dan mungkin nonaktifkan breakpoint pengecualian Anda . Rupanya pengecualian itu dapat dipulihkan.

Ini bukan solusi nyata tetapi cukup baik bagi saya pada saat itu.

de.
sumber
Dalam kasus saya, membuka proyek lama di Xcode 10.1, cukup tekan 'Lanjutkan eksekusi program' beberapa kali membawa saya ke masalah aktual yang dihadapi dengan solusi di sini stackoverflow.com/a/12398777/4221299
zeeawan
5

Dalam kasus saya, Target Penyebaran Target ada di iOS 8. Ketika saya mendorongnya ke iOS 10.3, itu berjalan dengan baik, baik di Simulator dan perangkat.

Mengubah target penerapan untuk memperbaiki kesalahan libMobileGestalt

Bharathram C.
sumber
1
Milik saya disetel ke 12.2 dan pesan dicetak dengan simulator iPhone SE tetapi tidak dengan iPhone XR. Jadi, setidaknya bagi saya, @anorskdev benar.
Neph
5

Saya melihat masalah ini. Menggunakan Xcode 10.1. Membuat proyek baru - tidak melakukan apa pun kecuali menampilkan layar putih. Menemukan itu muncul di simulator untuk perangkat yang lebih lama. Misalnya, iPad Pro (12,9 inci) dan iPad Pro (12,9 inci) (generasi ke-2) menunjukkan masalah, tetapi masalah hilang untuk iPad Pro (12,9 inci) (generasi ke-3). Tidak muncul untuk simulator iPhone XR.

Pada dasarnya tampak menyebalkan.

anorskdev
sumber
Ini juga penyebabnya bagi saya. Saya tidak yakin mengapa ini menjadi masalah. IPad saya dapat menjalankan iOS 12 sehingga simulator saudara tidak dianggap sebagai perangkat yang tidak didukung.
Abbey Jackson
Hal yang sama di sini (layar hanya mendapat InputField dan tombol). Xcode 10 dengan proyek iOS 12: Menggunakan simulator iPhone SE mencatat pesan ini tetapi tidak muncul dengan iPhone XR.
Neph
2

Jika Anda memiliki font yang disediakan oleh aplikasi, Anda perlu menambahkan ke Info.plist Dan memeriksa apakah file tersebut telah memilih Keanggotaan Target

Nuno Ferro
sumber
1

Cara biasa ketika terjadi kesalahan aneh membantu:

1) Proyek bersih;
2) Matikan simulator;
3) Pasang kembali pod.

Xcode 10.

Nik Kov
sumber
Itu juga berhasil untuk saya. Terima kasih banyak. Pengguna iOS melalui platform 'nativescript', Anda dapat melakukan (1) Bersihkan proyek dengan menghapus folder 'platforms / ios', (2) Matikan dan setel ulang simulator dengan "Hapus semua konten dan pengaturan", dan (3) Rebuilt the proyek dengan menjalankan 'tns mempersiapkan ios --release' dan kemudian 'tns build ios --bundle'. Kemudian, Anda dapat menjalankan aplikasi di simulator dengan membuka file .xcworkspace, memilih simulator, dan menjalankan proyek dari sana. Ini bekerja dengan sempurna untuk saya.
Mick Morely
1

Bagi saya, dengan simulator yang dimaksud dalam fokus, saya memilih Perangkat Keras-> Hapus semua konten dan pengaturan.

Setelah simulator dimulai ulang, peluncuran aplikasi saya berfungsi kembali, seperti yang diharapkan.

PKCLsoft
sumber
1
Sekarang disebut Device->Erase All Content and Settings...
Bruno Bieri
1

Saya pergi ke XCode -> Preferensi -> Komponen Centang semua simulator dan kotak centang untuk menginstal pembaruan secara otomatis, dan kemudian "periksa dan Instal sekarang" dan pergi selama beberapa jam sementara semuanya diperbarui.

Sekarang masalahnya hilang - jadi sebenarnya, seperti yang disebutkan. XCode Baru dengan Lama - simulator tidak diperbarui.

Harry McGovern
sumber
Bukankah itu akan memakan banyak memori?
Euridice01
0

Saya mengalami masalah yang sama, tetapi dengan MapKit, di mana MapView tidak muncul, hanya layar putih dan kesalahan yang sama, MGIsDeviceOneOfType tidak didukung pada platform ini.

Mengatasinya dengan memperbaiki peringatan "Tata letak ambigu" yang terkait dengan objek MapView. Sekarang berfungsi dengan baik, dan kesalahannya hilang.

Strudel
sumber
0

Apa yang berhasil bagi saya adalah mengubah ke dalam general > Deployment Info > Main InterfaceCDVLaunchScreen dan melakukan hal yang sama general > App Icons and Launch Images > Launch Screen Fileke dalam CDVLaunchScreen juga.

Saya berasal dari Ionic, jadi ini mungkin tidak menjadi masalah bagi mereka yang mengembangkan di Swift / Objective-C.

RaulGM
sumber
1
Bagaimana Anda memperbaikinya? Saya juga mengalami masalah yang sama. Tetapi ini hanya terjadi ketika menjalankannya pada produksi dalam ionik dan setelah itu saya terjebak di splash screen loader
KnowledgeSeeker
0

Saya baru saja memperbarui ke Xcode 10.2dan ketika saya mencoba menjalankan proyek yang dibuat di versi sebelumnya, terjadi kesalahan yang sama.

Masalahnya adalah simulator berjalan sebelum memperbarui Xcode.

Solusi sangat sederhana bagi saya untuk keluar dari Simulator dan memulai ulang sehingga bisa mendapatkan perubahan baru. Saya rasa model simulator (iPhone SE atau iPhone X) tidak penting. Anda hanya perlu memulai ulang simulator Anda agar pembaruan baru dapat diterapkan.

Saya akan merekomendasikan untuk keluar dari Xcode dan simulator dan restart Mac Anda.

Gulfam Khan
sumber
0

Saya mendapat kesalahan ini dengan memanggil .syncantrian utama yang menyebabkan kebuntuan ( DispatchQueue.main.sync {}). Aku bermaksud menelepon .async.

Bartosz Kunat
sumber
0

Saya mendapat kesalahan ini, ketika mencoba membaca file json yang ada di dalam proyek saya dan hasilnya nihil, karena itu saya mendapat kesalahan ini.

Saya mendapat nihil karena beberapa kesalahan ejaan pada nama font, file json itu menahan nama font, setelah menyalin menempel nama font saya mendapat data dan kesalahan diperbaiki.

Saya mencoba semua hampir semua solusi yang diberikan di atas, tidak ada yang berhasil, Jadi debug dengan sabar, Anda akan mengetahui mana yang menyebabkan kesalahan ini dan dalam beberapa waktu yang buruk xcode akan bermain dalam hidup kita :)

R. Mohan
sumber
0

Saya menghadapi masalah yang sama tetapi saya berhasil menjatuhkannya dengan hal-hal di bawah ini:

  1. Simulator shutdown,
  2. Matikan Xcode,
  3. Buka kembali Xcode dan simulator

Saya harap ini akan membantu.

Sandip Moradiya
sumber