添加谷歌地图作为子视图与exc_bad崩溃的iOS应用程序

我有代码,直到3天左右工作完全正常。 我试过回到一个更老的提交,工作100%,现在仍然与exc_bad崩溃。 只有在设备上运行应用程序时才会发生崩溃,如果我在模拟器上运行应用程序或使用乐器在设备上运行应用程序,则运行得非常好。 当我改变我的谷歌API密钥,它说:“你可能没有权限使用这个API密钥”,但不再坠毁。

该应用程序通过xcode在设备上运行应用程序时只会崩溃。 当稍后在设备上运行相同的版本而不连接到xcode时,它可以正常工作。

我不知道我可以在这里添加什么信息来帮助debugging问题。 我最近更新了xcode到6.4并更新了OSX的最新更新。

我使用谷歌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 () 

这个问题在重新启动计算机/设备时似乎已经解决了,现在又popup来了。 我真的不明白发生了什么事。

编辑:我发现问题的根源,并有一个解决方法:

这个问题似乎是由XCode中的OpenGL ES Frame Capture触发的。 我猜这个问题是在Apple从XCode 6.4 / iOS 8.3添加Metal的时候开始的,可能会对整个帧捕捉debugging系统产生不利影响。

解决方法:

  1. 在XCode中,转到产品>计划>编辑计划…
  2. select左侧的“运行”选项卡。
  3. select顶部的“选项”子选项卡。
  4. 将“GPU帧捕捉”从“自动启用”或“OpenGL ES”更改为“金属”或“禁用”。

这将禁用OpenGL ES帧捕获,这不是很好,但是允许你继续debugging你的构build。

不知道这个问题是苹果还是谷歌,但我会发布错误报告。 快乐的编码!

较早的post:

一些进一步的信息(会使这个评论,但还没有代表相当尚未),因为我也经历了这一点; 最好的我可以告诉:

  • 这个问题在XCode 6.4和XCode 7 beta 3中都很明显
  • 它仅以debugging模式呈现,不在XCode之外运行。
  • 它不在iOS 8.1.2上显示,但在iOS 8.3上显示。
  • 它发生在Google Maps 1.9.X(作为框架文件导入)以及1.10.X(作为CocoaPod导入,包括最新的)
  • 我不能完全validation这一点,但它并没有在XCode 6.3.2中显示出来; 这可能是因为我无法编译8.3版本。

我可能会错过慷慨的奖金的最后期限,但我明天整天花更多的时间挖掘,并会报告回来。

当我使用Google Maps SDK时,这也发生在我身上。 我提交了一个错误报告,因为在重新启动Xcode并删除项目并重新安装后,它工作得很好。

这不是你的问题,而只是一个错误。 如果您通过testing飞行或App Store安装构build,它将像魅力一样工作。

对于debugging,只要继续重新启动Xcode,如果可能的话尝试通过Xcode 7运行它。他们有机会修复这个错误。

希望有帮助,朱利安

Yoav Schwartz,你是否已经尝试在mapView的insertSubview之后将mapView.delegate分配给视图层次结构?

我正在经历类似的事情,我怀疑它是一个与Xcode 6.4的错误,因为朱利安暗指上面。

James Pereira / @ marinehero