Pertanyaan Menambahkan peta google sebagai subview membuat crash aplikasi iOS dengan exc_bad


Saya memiliki kode yang berfungsi dengan baik sampai sekitar 3 hari yang lalu. Saya telah mencoba kembali ke komitmen yang jauh lebih tua yang bekerja 100% dan masih sekarang crash dengan exc_bad. Kecelakaan hanya terjadi ketika menjalankan aplikasi di perangkat, Jika saya menjalankan aplikasi di simulator atau menggunakan instrumen untuk menjalankan aplikasi pada perangkat, itu berjalan baik-baik saja. Ketika saya mengubah kunci api google saya, itu berkata, "Anda mungkin tidak memiliki izin untuk menggunakan kunci api ini" tetapi tidak lagi jatuh.

Aplikasi hanya mogok ketika menjalankan aplikasi di perangkat melalui xcode. Ketika kemudian menjalankan versi yang sama pada perangkat tanpa terhubung ke xcode, itu berfungsi dengan baik.

Saya tidak yakin informasi apa yang dapat saya tambahkan di sini untuk membantu mendebug masalah. Saya baru saja memperbarui xcode ke 6.4 dan memperbarui OSX dengan pembaruan terbaru.

Saya menggunakan google versi sdk 1.10.1, diinstal menggunakan CocoaPods

Kode yang saya gunakan untuk menambahkan peta:

self.mapView = [GMSMapView mapWithFrame:self.view.bounds camera:camera];

self.mapView.myLocationEnabled = YES;
self.mapView.settings.myLocationButton = YES;
self.mapView.delegate = self;

[self.mapView addObserver:self
               forKeyPath:@"myLocation"
                  options:NSKeyValueObservingOptionNew
                  context:NULL];

[self.view insertSubview:self.mapView atIndex:1];

Kesalahan itu sendiri bervariasi antara kode = 1, kode = 2, dan kode = 257. Saya telah mencoba menambahkan GMSMapView dengan storyboard alih-alih kode. Saya telah mencoba menginstal versi xcode yang lebih lama dan menjalankan kembali tetapi tidak mengubah apa pun.

Jika saya mengomentari menyisipkan subview line, aplikasi itu tidak crash. Saya telah mencoba menjalankan alat instrumen zombie tetapi ketika saya menjalankan menggunakan instrumen, aplikasi berfungsi dengan baik.

#0  0x0000000100c5dc34 in EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned long, id<EAGLDrawable>) ()
#1  0x00000001002404c0 in gmscore::renderer::ios::GLRenderTarget::CreateFramebuffer() ()
#2  0x00000001002403cc in gmscore::renderer::ios::GLRenderTarget::FrameStart() ()
#3  0x00000001002e7af4 in gmscore::renderer::EntityRenderer::Draw(bool) ()
#4  0x00000001002516f4 in -[GMSPhoenixRenderer drawIfNeeded] ()
#5  0x00000001002329a0 in -[GMSEntityRendererView draw] ()
#6  0x000000010028dc74 in -[GMSDisplayLink displayLinkFired:] ()
#7  0x0000000100c5ca9c in -[DYDisplayLinkInterposer forwardDisplayLinkCallback:] ()
#8  0x00000001887f629c in CA::Display::DisplayLinkItem::dispatch() ()
#9  0x00000001887f6134 in CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) ()
#10 0x00000001855d1470 in IODispatchCalloutFromCFMessage ()
#11 0x00000001843c2dc4 in __CFMachPortPerform ()
#12 0x00000001843d7a54 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#13 0x00000001843d79b4 in __CFRunLoopDoSource1 ()
#14 0x00000001843d5934 in __CFRunLoopRun ()
#15 0x00000001843012d4 in CFRunLoopRunSpecific ()
#16 0x000000018db1f6fc in GSEventRunModal ()
#17 0x0000000188ec6fac in UIApplicationMain ()
#18 0x000000010002d794 in main at /Users/yoavschwartz/Documents/donkey_republic_ios/DonkeyRepublic/DonkeyRepublic/main.m:14
#19 0x0000000196272a08 in start ()

Masalah ini tampaknya telah terpecahkan dengan sendirinya saat memulai ulang komputer / perangkat dan sekarang muncul lagi. Aku benar-benar tidak mengerti apa yang sedang terjadi.


39
2017-07-07 09:19


asal


Jawaban:


EDIT: Saya telah menemukan akar masalahnya dan memiliki solusi:

Masalahnya tampaknya dipicu oleh OpenGL ES Frame Capture di XCode; Saya menduga masalah ini dimulai ketika Apple menambahkan Metal ke dalam campuran pada XCode 6.4 / iOS 8.3, mungkin entah bagaimana mempengaruhi keseluruhan sistem debugging frame capture.

Solusi:

  1. Di XCode, buka Produk> Skema> Edit Skema ...
  2. Pilih Tab "Run" di sebelah kiri.
  3. Pilih sub-tab "Opsi" di bagian atas.
  4. Ubah "GPU Frame Capture" dari "Automatically Enabled" atau "OpenGL ES" menjadi "Metal" atau "Disabled".

Ini menonaktifkan pengambilan bingkai ES OpenGL, yang tidak bagus, tetapi memungkinkan Anda untuk terus melakukan debug pada build Anda.

Tidak yakin apakah masalah ini milik Apple atau Google, tetapi saya akan memposting laporan bug untuk keduanya. Selamat coding!

-

posting sebelumnya:

Beberapa info lebih lanjut (akan membuat komentar ini tetapi belum memiliki reputasi) karena saya juga mengalami hal ini; sebaik yang bisa saya katakan:

  • Masalahnya jelas dalam XCode 6.4 serta XCode 7 beta 3
  • Ini hadir dalam mode debug saja, tidak berjalan di luar Xcode.
  • Tidak termanifestasi pada iOS 8.1.2 tetapi pada iOS 8.3.
  • Ini terjadi dengan Google Maps 1.9.X (diimpor sebagai file Kerangka) serta 1.10.X (diimpor sebagai CocoaPod, termasuk yang terbaru)
  • Saya belum bisa memverifikasi ini sepenuhnya tetapi belum muncul di XCode 6.3.2 untuk saya; ini mungkin karena saya tidak dapat mengkompilasi 8.3 dalam versi itu.

Saya mungkin akan melewatkan tenggat waktu untuk hadiah swag, tetapi saya menghabiskan sepanjang hari besok untuk menggali lebih dalam dan akan melaporkan kembali.


105
2017-07-16 05:19



Ini terjadi juga saat saya menggunakan Google Maps SDK. Saya mengajukan laporan bug setelah me-restart Xcode dan menghapus proyek dan menginstal ulang, itu bekerja baik-baik saja.

Ini bukan masalah Anda, tetapi hanya bug. Jika Anda memasang build melalui uji coba penerbangan atau App Store, itu akan berfungsi seperti pesona.

Untuk debugging, terus jalankan Xcode dan jika memungkinkan coba jalankan melalui Xcode 7. Ada kemungkinan mereka memperbaiki bug ini.

Semoga itu membantu, Julian


1
2017-07-15 13:41



Yoav Schwartz, sudahkah Anda mencoba menetapkan mapView.delegate hanya setelah insertSubview dari mapView ke dalam hierarki tampilan Anda?

Saya mengalami hal serupa dan saya menduga ini adalah bug dengan Xcode 6.4 ketika Julian menyinggung di atas.

James Pereira / @ marinehero


1
2017-07-15 14:22