将Google地图添加为子视图会导致exc_bad导致iOS应用崩溃

约夫·施瓦兹(Yoav Schwartz)

我的代码运行良好,直到大约三天前。我尝试过回溯到更老的提交,该提交工作了100%,但现在它因exc_bad而崩溃。仅当在设备上运行该应用程序时才会发生崩溃,如果我在模拟器上运行该应用程序或使用仪器在该设备上运行该应用程序,则它运行得很好。当我更改Google api密钥时,它说“您可能没有使用此api密钥的权限”,但不再崩溃。

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

我不确定可以在此处添加哪些信息来帮助调试问题。我最近将xcode更新为6.4,并使用最新更新更新了OSX。

我正在使用使用CocoaPods安装的google 1.10.1 sdk版本

我用来添加地图的代码:

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

错误本身在code = 1,code = 2和code = 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 ()

重新启动计算机/设备时,此问题似乎已解决,现在又弹出了。我真的不明白发生了什么。

戴夫·科尔

编辑:我已经找到问题的根源,并有一个解决方法:

这个问题似乎是由XCode中的OpenGL ES Frame Capture触发的。我猜想这个问题是在Apple从XCode 6.4 / iOS 8.3开始将Metal添加到混合中时开始的,也许以某种方式对整个帧捕获调试系统产生了不利影响。

解决方法:

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

这将禁用OpenGL ES帧捕获,虽然不理想,但是可以让您继续调试构建。

不知道这个问题是苹果的还是谷歌的,但我将向两者发布错误报告。祝您编码愉快!

-

较早的帖子:

我也遇到了一些进一步的信息(将对此发表评论,但还没有代表)。尽我所能告诉:

  • 该问题在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。

我可能会错过赃物赏金的截止日期,但明天我会整天都在进行更深入的研究,并将向您汇报。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

单击按钮会导致应用崩溃

UILabel在添加到视图时导致应用程序崩溃(仅Xcode 6和iOS 8)

在SKScene的子节点上运行简单的操作会导致iOS 7.1中的EXC_BAD_ACCESS

在CustomUIView中覆盖init()会使应用程序崩溃(EXC_BAD ACCESS)

“ԅ”导致iOS应用崩溃

ios Facebook将FBNativeAdView添加为子视图

快速投放会导致应用崩溃

以编程方式添加前导约束会导致应用崩溃

以编程方式添加约束会导致崩溃

添加约束会导致应用崩溃

将Rich Cards数据添加到我的dotnet应用程序会导致崩溃

在Fragment上初始化视图会导致应用崩溃

创建googleApiClient会导致Android应用崩溃

Flutter:地图依赖导致应用崩溃

将库添加到IOS应用会导致可怕的构建失败

iOS蓝牙retrievePeripherals导致EXC_BAD_ACCESS崩溃

将字体应用于JTextArea会导致GUI崩溃?

创建片段会导致应用崩溃

在iOS中,将NSOperation与嵌套完成块一起使用会导致重复EXC_BAD_ACCESS

更新表视图会导致崩溃

将Spring Security添加为依赖项会导致应用行为不同

网页视图导致应用崩溃

将两个Sprite节点添加到父节点会导致应用崩溃

键盘通知导致EXC_BAD_ACCESS崩溃

动态将子视图添加到单元格会导致布局约束错误输出

在布局中添加内容会导致崩溃

Kivy pyjnius with Buildozer - 将 jnius 添加到应用程序会导致它在启动后崩溃

将 .removeStateDidListener 添加到 deinit 会导致应用程序崩溃

延迟加载数组会导致应用崩溃