【问题标题】:Adding google maps as subview crashes iOS app with exc_bad将谷歌地图添加为子视图会使 iOS 应用程序因 exc_bad 崩溃
【发布时间】:2015-09-24 16:52:27
【问题描述】:

我的代码在大约 3 天前运行良好。我尝试回到一个更早的提交,它工作了 100%,但现在它仍然与 exc_bad 一起崩溃。 只有在设备上运行应用程序时才会发生崩溃,如果我在模拟器上运行应用程序或使用仪器在设备上运行应用程序,它运行得非常好。当我更改我的 google api 密钥时,它说“您可能无权使用此 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];

错误本身在 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 ()

重新启动计算机/设备时,此问题似乎已自行解决,现在再次弹出。我真的不明白这是怎么回事。

【问题讨论】:

  • 检查所有关于谷歌地图的操作是否在主线程上处理?如果没有,则继续主线程并检查
  • 我有同样的问题,我在 iPhone 4s 上测试过 8.3(DID 崩溃),iPhone 6 上 8.3 和 8.4(没有崩溃)。您的设备运行的是哪个 iOS 版本?
  • iphone 6 和 iphone 5 8.4。
  • 很奇怪,我有一个 8.4 的 iPhone 6 并且工作正常
  • 我已经设法通过删除 xcode、回到 xcode 6.3.2、重新启动设备并重新提取 repo 来使其工作。基本上我只是试图重新启动一切

标签: ios objective-c xcode google-maps


【解决方案1】:

编辑:我找到了问题的根源并找到了解决方法:

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

解决方法:

  1. 在 XCode 中,转到产品 > 方案 > 编辑方案...
  2. 选择左侧的“运行”选项卡。
  3. 选择顶部的“选项”子选项卡。
  4. 将“GPU 帧捕获”从“自动启用”或“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(作为框架文件导入)和 1.10.X(作为 CocoaPod 导入,包括最新版本)都会出现这种情况
  • 我还不能完全验证这一点,但它还没有出现在我的 XCode 6.3.2 中;这可能是因为我无法在该版本中编译 8.3。

我可能会错过赃物赏金的截止日期,但我明天会花一整天时间深入挖掘并报告。

【讨论】:

  • 我遇到了完全相同的问题,花了一整天的时间追查它,直到我看到这个。为我解决了这个问题。太棒了!
  • 老兄,你真棒。不知道还能说什么。
  • 很高兴回馈帮助我这么久的社区! :)
  • 我在这里向 Google 发布了这个错误:code.google.com/p/gmaps-api-issues/issues/…
  • 我使用 Apple 的 bug 报告控制台发布的 Apple 版本。
【解决方案2】:

Yoav Schwartz,您是否尝试过仅在 mapView 的 insertSubview 到您的视图层次结构后分配 mapView.delegate?

我正在经历类似的事情,我怀疑这是 Julian 在上面提到的 Xcode 6.4 的错误。

詹姆斯佩雷拉/@marinehero

【讨论】:

  • 由于缺少代表点,我似乎无法评论或回复,但想问 Yoav Schwartz 是否尝试仅在 之后分配 mapView.delegate 将 mapView 添加/插入到他的视图层次结构中?詹姆斯佩雷拉/@marinehero
  • 我没有尝试过,但问题本身也解决了,我真的不知道如何或为什么。只需重新安装 xcode。
【解决方案3】:

我在使用 Google Maps SDK 时也遇到过这种情况。我提交了一个错误报告,因为在重新启动 Xcode 并删除项目并重新安装它之后,它工作得非常好。

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

对于调试,只需继续重新启动 Xcode,如果可能,尝试通过 Xcode 7 运行它。他们有可能修复了这个错误。

希望对你有帮助,朱利安

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多