EXC_BAD_ACCESS使用gmaps sdk 1.9.0,Xcode 6.4,在8.3设备上运行

Fan*_*ini 6 iphone xcode objective-c ios google-maps-sdk-ios

我有2个项目使用谷歌地图sdk,他们目前在Appstore.

要记住的事情:

  • 通过cocoapods安装Gmaps sdk 1.9.0版
  • Xcode版本6.4
  • 部署目标7.1
  • 设备:带有8.3.0的iPhone 4s

今天我像往常一样在第一个项目中打开Xcode,尝试在iPhone上进行编译和调试,我有时会EXC_BAD_ACCESS (code=1...)在应用程序上崩溃,有时会得到EXC_BAD_ACCESS (code=EXC_ARM_DA_ALING...),这里没有堆栈跟踪,但总是在main.m上:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([TGPAppDelegate class]));
Run Code Online (Sandbox Code Playgroud)

看到第一个线程我发现这是错误与谷歌地图有关:

线程1

尝试以下方法:

  • 更新pod(不起作用)
  • 用gmaps sdk页面上的示例代码替换了我的代码(不起作用)*
  • 我已经阅读了有关自动布局的内容,已禁用(无效)

奇怪的是我也是:

  • 尝试使用8.4的iPhone 6(DID工作)
  • 在iPhone 6中尝试使用8.3(DID工作)

这两个项目都处于早期测试状态,所以我不知道是否有任何真正的用户有这个问题,但我担心有些用户因此而无法使用这些应用程序.

我在互联网上找不到太多的信息,我甚至不知道在哪里看,是否有任何关于此问题的已知错误?,其他任何人都有同样的问题?

这是我正在使用的示例代码:

-(void)viewDidLoad {
  [super viewDidLoad];

  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:37.80948
                                                          longitude:5.965699
                                                               zoom:2];

  GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

  self.view = mapView;
}
Run Code Online (Sandbox Code Playgroud)

编辑1:

做更多的测试,发现只有在调试时才会出现问题(在运行应用程序时连接调试器),如果你从iPhone运行应用程序,然后将调试器连接到进程,一切运行正常,我的意思是,如果当附加调试器时,地图会尝试渲染然后你会得到exc_bad_access,然后是调试器错误吗?我很困惑

编辑2:

在这里回答,谢谢戴夫

Fan*_*ini 9

对此的答案不是我的,这在这里回答,谢谢戴夫,我只是引用他,所以任何人都可以看到答案.

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

问题似乎是由XCode中的OpenGL ES帧捕获引发的; 我猜这个问题已经开始,当Apple在XCode 6.4/iOS 8.3中添加Metal时,可能会以某种方式对整个帧捕获调试系统产生负面影响.

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

问题似乎是由XCode中的OpenGL ES帧捕获引发的; 我猜这个问题已经开始,当Apple在XCode 6.4/iOS 8.3中添加Metal时,可能会以某种方式对整个帧捕获调试系统产生负面影响.

解决方法:

  1. 在XCode中,转到产品>方案>编辑方案...
  2. 选择左侧的"运行"选项卡.
  3. 选择顶部的"选项"子选项卡.
  4. 将"GPU Frame Capture"从"Automatically Enabled"或"OpenGL ES"更改为"Metal"或"Disabled".

这会禁用OpenGL ES帧捕获,这不是很好,但允许您继续调试构建.

不确定这个问题是苹果还是谷歌,但我会向两者发布错误报告.快乐的编码!