Подтвердить что ты не робот

Добавление карт google в качестве подзадачи приводит к сбою приложения iOS с exc_bad

У меня есть код, который отлично работал до 3 дней назад. Я попытался вернуться к гораздо более старой фиксации, которая работала на 100%, и теперь она сбой с exc_bad. Сбой происходит только при запуске приложения на устройстве. Если я запускаю приложение на симуляторе или использую инструменты для запуска приложения на устройстве, он работает отлично. Когда я изменил свой ключ api google, он сказал: "У вас может не быть разрешения на использование этого ключа api", но больше не разбился.

Приложение запускается только при запуске приложения на устройстве с помощью xcode. При последующем запуске той же версии на устройстве, не подключенной к xcode, она работает нормально.

Я не уверен, какую информацию я могу добавить здесь, чтобы помочь отладить проблему. Недавно я обновил xcode до 6.4 и обновил OSX с последним обновлением.

Я использую версию google 1.10.1 sdk, установленную с использованием CocoaPods

Код, который я использую для добавления карты:

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];

Сама ошибка изменяется между кодом = 1, кодом = 2 и кодом = 257. Я попытался добавить GMSMapView с раскадрой вместо кода. Я попытался установить более старую версию xcode и снова запустить, но ничего не меняет.

Если я прокомментирую строку вставки вставки, это приложение не сработает. Я попытался запустить инструмент инструмента для зомби, но когда я запускаю инструменты, приложение работает нормально.

#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 ()

Эта проблема, казалось, решила себя при перезапуске компьютера/устройства и теперь снова выскочила. Я действительно не понимаю, что происходит.

4b9b3361

Ответ 1

РЕДАКТИРОВАТЬ: Я нашел корень проблемы и обход проблемы:

Кажется, что проблема вызвана OpenGL ES Frame Capture в XCode; Я предполагаю, что эта проблема началась, когда Apple добавила Metal в микс от XCode 6.4/iOS 8.3, возможно, каким-то образом негативно повлияв на всю систему отладки захвата кадров.

Обходной путь:

  • В XCode перейдите в Product > Scheme > Edit Scheme...
  • Выберите вкладку "Запуск" слева.
  • Выберите вкладку "Параметры" вверху.
  • Измените "Захват кадра графического процессора" с "Автоматически включен" или "OpenGL ES" на "Металл" или "Отключено".

Это отключает захват кадров OpenGL ES, что не очень удобно, но позволяет продолжить отладку ваших сборников.

Не уверен, что эта проблема - Apple или Google, но я отправлю отчеты об ошибках обоим. Счастливое кодирование!

-

предыдущая статья:

Некоторая дополнительная информация (сделайте это замечание, но пока у меня еще нет репутации), поскольку я тоже испытываю это; как я могу сказать:

  • Проблема очевидна в XCode 6.4, а также в XCode 7 beta 3
  • Он отображается только в режиме отладки, но не работает вне XCode.
  • Он не отображается в iOS 8.1.2, но он работает на iOS 8.3.
  • Это происходит как с Google Maps 1.9.X(импортируется как файл Framework), так и с 1.10.X(импортируется как CocoaPod, включая последние)
  • Я не могу проверить это полностью, но он не появился в XCode 6.3.2 для меня; это может быть потому, что я не могу скомпилировать для 8.3 в этой версии.

Я, скорее всего, пропущу крайний срок для награды swag, но я провожу весь день завтра, копая глубже и отчитаюсь.

Ответ 2

Это также случилось, когда я использовал SDK Google Maps. Я подал отчет об ошибке, после перезапуска Xcode и удаления проекта и его переустановки он работал отлично.

Это не ваша проблема, а просто ошибка. Если вы установите сборку через тестовый полет или в App Store, это будет работать как шарм.

Для отладки просто продолжайте перезапуск Xcode и, если возможно, попробуйте запустить его через Xcode 7. Там есть шанс, что они исправили эту ошибку.

Надеюсь, что это поможет, Джулиан

Ответ 3

Yoav Schwartz, вы пробовали присваивать mapView.delegate только после insertSubview mapView в вашей иерархии представлений?

Я испытываю нечто подобное, и я подозреваю, что это ошибка с Xcode 6.4, когда Джулиан ссылается на выше.

Джеймс Перейра/@marinehero