xcode 添加谷歌Map作为子视图会导致iOS应用程序崩溃,exc_bad

83qze16e  于 2023-02-20  发布在  iOS
关注(0)|答案(3)|浏览(149)

我的代码直到大约3天前都运行得很好。我试着回到一个更老的提交,工作100%,但现在它仍然崩溃了exc_bad。崩溃只发生在设备上运行应用程序时,如果我在模拟器上运行应用程序或使用仪器在设备上运行应用程序,它运行得很好。当我改变我的谷歌API密钥,它说“你可能没有权限使用这个API键”,但不再崩溃。
应用程序只有在通过Xcode在设备上运行应用程序时才会崩溃。当稍后在设备上运行相同版本而不连接Xcode时,它工作正常。
不确定我可以在这里添加什么信息来帮助调试问题,我最近已经将Xcode更新到6. 4,并使用最新的更新更新了OSX。
我正在使用谷歌1.10.1 SDK版本,使用CocoaPods安装
我用来添加Map的代码:

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并再次运行,但它没有改变任何东西。
如果我注解掉insert subview行,应用程序不会崩溃。我试过运行僵尸乐器工具,但当我使用乐器运行时,应用程序工作正常。

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

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

wnavrhmk

wnavrhmk1#

我已经找到了问题的根源,并有了一个解决方案:
该问题似乎是由XCode中的OpenGL ES帧捕获触发的;我猜这个问题是从苹果在XCode 6.4/iOS 8.3中加入金属开始的,也许会对整个帧捕获调试系统产生不利影响。

解决方法:

1.在XCode中,进入产品〉方案〉编辑方案...
1.选择左侧的“运行”选项卡。
1.选择顶部的“选项”子选项卡。
1.将“GPU帧捕获”从“自动启用”或“OpenGL ES”更改为“金属”或“禁用”。
这将禁用OpenGL ES帧捕获,这不是很好,但允许您继续调试您的构建。
不知道这个问题是苹果的还是谷歌的,但我会向这两个网站发布错误报告。

c90pui9n

c90pui9n2#

当我使用谷歌MapSDK时,Mee也遇到了这种情况。我提交了一份bug报告,因为在重新启动Xcode并删除项目并重新安装后,它运行得非常好。
这不是你的问题,而仅仅是一个bug。如果你通过试飞或应用商店安装构建,它将像一个魅力一样工作。
为了调试,只要继续重新启动Xcode,如果可能的话,尝试通过Xcode 7运行它。他们有机会修复这个bug。

wpx232ag

wpx232ag3#

尝试仅在将mapView的insertSubview插入到视图层次结构中之后才分配mapView.delegate。
我也遇到了类似的问题,我怀疑这是朱利安在上面提到的Xcode 6.4的一个bug。

相关问题