I've an app on the apple store and after the iOS6 update I've got hundred of crash report within MKMapView
. I cannot manage to reproduce the crash on my devices. It looks like a problem with EAGLContext
. We don't use OpenGL in our app but we have more than one instances of MKMapView
in different controller. I've found a similar issue here iOS 6 app crashes in EAGLContext when displaying maps but they use OpenGL.
Here there is the backtrace:
Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x1 Crashed Thread: 0 Thread 0 Crashed: 0 libGPUSupportMercury.dylib 0x00000e22 gpus_ReturnNotPermittedKillClient + 10 1 libGPUSupportMercury.dylib 0x3bccc5fb gldCreateContext + 190 2 GLEngine 0x344c2b15 gliCreateContextWithShared + 676 3 OpenGLES 0x0000491d -[EAGLContext initWithAPI:properties:] + 1433 4 OpenGLES 0x000042d7 -[EAGLContext initWithAPI:sharedWithCompute:] + 143 5 VectorKit 0x00011c81 -[VGLGPU init] + 105 6 VectorKit 0x000d4659 __24+[VGLGPU sharedInstance]_block_invoke_0 + 49 7 libdispatch.dylib 0x000014b7 _dispatch_client_callout + 23 8 libdispatch.dylib 0x000073f7 dispatch_once_f$VARIANT$mp + 43 9 VectorKit 0x00011c13 +[VGLGPU sharedInstance] + 39 10 VectorKit 0x00001db1 -[VKMainLoop updateLinkState] + 485 11 VectorKit 0x00001955 -[VKScreenCanvas _updateDisplayStatus:] + 109 12 UIKit 0x0001c371 -[UIView initWithFrame:] + 129 13 VectorKit 0x00010ca5 -[VGLScreenCanvas initWithFrame:context:] + 53 14 VectorKit 0x00010a7d -[VKScreenCanvas initWithFrame:context:] + 57 15 VectorKit 0x00010a3f -[VKScreenCanvas initWithFrame:] + 39 16 VectorKit 0x000106bd -[VKMapCanvas initWithFrame:shouldRasterize:] + 65 17 VectorKit 0x000104bb -[VKMapView initWithFrame:andGlobe:shouldRasterize:] + 647 18 MapKit 0x0000dc95 -[MKMapView _commonInitAndEnableLoading:fromIB:] + 725 19 MapKit 0x0000d811 -[MKMapView initWithFrame:] + 257 .....
We were having a similar problem when user's background our app just as we're popping up a window that includes a map subview. The crash seemed to be happening due to the map using an openGL call while we're backgrounded. We had to wrap the map subview creation in a check like the following:
UIApplicationState appState = [[UIApplication sharedApplication] applicationState]; if( (appState != UIApplicationStateBackground) && (appState != UIApplicationStateInactive)) { // Do map subview initialization... } else { self.attemptedToLoadMap = YES; }
We saved off the bool so that if the app comes back to the foreground we can add the subview in for display.
You have to do this anytime you're manipulating the map in a way that causes a re-draw operation (e.g., adding an annotation).
http://developer.apple.com/library/ios/#qa/qa1766/_index.html
This Technical QA address this issue
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With