神秘的iOS 8上的崩溃

在这个堆栈跟踪中,我收到了很多关于iOS 8的崩溃报告:

Date/Time: 2014-09-17T20:26:15Z OS Version: iPhone OS 8.0 (12A365) Report Version: 104 Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x1 Crashed Thread: 0 Thread 0 Crashed: 0 libGPUSupportMercury.dylib 0x2a4f88fe gldGetBufferAllocationIdentifiers + 194 1 libGPUSupportMercury.dylib 0x2a4f93cb gpusSubmitDataBuffers + 108 2 libGPUSupportMercury.dylib 0x2a4f9249 gldCreateContext + 206 3 GLEngine 0x2613c93b gliCreateContextWithShared + 600 4 OpenGLES 0x26218ab3 glGetFramebufferParameteriAPPLE + 776 5 CoreImage 0x23e88b8b 0x23dea000 + 650123 6 libdispatch.dylib 0x314558b7 0x31454000 + 6327 7 libdispatch.dylib 0x314564fb dispatch_once_f + 60 8 CoreImage 0x23e88afb 0x23dea000 + 649979 9 CoreImage 0x23e06c79 0x23dea000 + 117881 10 CoreUI 0x29478837 CUIEqualRenditionKeysIgnoringAttribute + 71800 11 libsystem_pthread.dylib 0x315b9dcf sched_get_priority_min + 64 12 libsystem_platform.dylib 0x315b2867 _os_once + 40 13 libsystem_pthread.dylib 0x315b7f8b pthread_once + 48 14 CoreUI 0x294787d9 CUIEqualRenditionKeysIgnoringAttribute + 71706 15 CoreUI 0x2947faf7 CUIEqualRenditionKeysIgnoringAttribute + 101176 16 UIKit 0x26f649db _UIGraphicsEndLetterpressWithStyle + 20792 17 UIKit 0x26cf2875 UIGraphicsEndImageContext + 7838 18 UIKit 0x26cf1fb5 UIGraphicsEndImageContext + 5598 19 UIKit 0x26fe3db9 _UINavigationButtonUpdateAccessibilityBackgroundsForBlendMode + 287838 20 UIKit 0x26cf19c7 UIGraphicsEndImageContext + 4080 21 UIKit 0x26d8c1b1 UICeilToViewScale + 55778 22 UIKit 0x26d70143 _UIBarHairlineShadowColorForBarStyle + 10164 23 UIKit 0x26ce2b37 0x26cd6000 + 52023 24 QuartzCore 0x2670accd CABackingStoreGetTypeID + 894 25 QuartzCore 0x267066b5 CARenderServerGetServerPort + 5366 26 UIKit 0x26cf5183 UIGraphicsGetImageFromCurrentImageContext + 2068 27 UIKit 0x26cf1fb5 UIGraphicsEndImageContext + 5598 28 UIKit 0x26d6efc5 _UIBarHairlineShadowColorForBarStyle + 5686 29 UIKit 0x26d6ec63 _UIBarHairlineShadowColorForBarStyle + 4820 30 UIKit 0x26d6e3cd _UIBarHairlineShadowColorForBarStyle + 2622 31 UIKit 0x26fd5a6f _UINavigationButtonUpdateAccessibilityBackgroundsForBlendMode + 229652 32 UIKit 0x26d6b837 _UIAccessibilityReduceMotion + 16948 33 UIKit 0x26ce53d9 _UIApplicationLinkedOnOrAfter + 2526 34 UIKit 0x26ce535d _UIApplicationLinkedOnOrAfter + 2402 35 UIKit 0x26d6b24d _UIAccessibilityReduceMotion + 15434 36 UIKit 0x26fd7ef9 _UINavigationButtonUpdateAccessibilityBackgroundsForBlendMode + 239006 37 UIKit 0x26d6b0b3 _UIAccessibilityReduceMotion + 15024 38 UIKit 0x26dc516f UIRectIntegralWithScale + 1040 39 Pogoplug 0x001bccc9 __41-[InitialSlidingViewController didSignIn]_block_invoke (InitialSlidingViewController.m:216) 40 libdispatch.dylib 0x314558cb 0x31454000 + 6347 41 libdispatch.dylib 0x314558b7 0x31454000 + 6327 42 libdispatch.dylib 0x314590bf _dispatch_main_queue_callback_4CF + 720 43 CoreFoundation 0x2380dbe9 CFRunLoopTimerSetTolerance + 3370 44 CoreFoundation 0x2380c2e9 _CFRunLoopGet2b + 2926 45 CoreFoundation 0x2375a621 CFRunLoopRunSpecific + 474 46 CoreFoundation 0x2375a433 CFRunLoopRunInMode + 104 47 GraphicsServices 0x2ab080a9 GSEventRunModal + 134 48 UIKit 0x26d44809 UIApplicationMain + 1438 49 Pogoplug 0x0012c4bf main (main.m:11) 50 libdyld.dylib 0x31475aaf _tlv_atexit + 8 

任何可能出错的线索都将不胜感激。 这里是216线

 MenuViewController *menuVC = [[MenuViewController alloc] initWithNibName:nil bundle:nil]; NavControllerPortrait *navController = [[NavControllerPortrait alloc] initWithRootViewController:menuVC]; 

主要是在iPhone 5和iPad的第三代(不知道它仅限于这些设备)。

更多信息另一个崩溃发生less一点有类似的堆栈跟踪,并由此代码导致:

 CELoginViewController *loginVC = [[CELoginViewController alloc] initWithNibName:nil bundle:nil]; NavControllerPortrait *nav = [[NavControllerPortrait alloc] initWithRootViewController:loginVC]; 

所以我强烈怀疑或我的自定义UINavigationController或苹果的更改。 鉴于我不是唯一一个遇到这个崩溃 – 我更倾向于责怪苹果:-)

谢谢。

我没有足够的评价和要求细节的声誉,但我遇到了同样的问题,主要是在iPhone 5,但也是5c,4s,iPad 3和iPod 5G,我相信我要说的是即使没有回答问题,也是有帮助的。

首先,这是当您尝试使用OpenGL绘制某些东西或在后台resize或移动MKMapView时发生的崩溃。 在崩溃日志中可能不是很明显,但我得到的每一个崩溃报告都是当应用程序在后台启动的时候。 看起来对你来说是一样的,考虑到UIViewController被称为InitialSlidingViewController。 在我的情况下,大部分时间是“重要的位置更新”,但是您的情况可能是“后台抓取”或“访问”更新或“无声远程通知”。

我在应用程序中注意到的一件事是,它在崩溃时设置了导航栏,更具体地说是要渲染图像,我在导航栏中着色了图像。 对你来说,这是另一回事,但需要OpenGL的,也许像视差的运动效果,我看堆栈跟踪中的_UIAccessibilityReduceMotion?

不pipe你是什么,或者我在做什么,事实上它发生在某些设备上,从来不在某些设备上,这意味着它最有可能是一个iOS的bug。 我也看到“CI :: can_use_gpu()”在我的堆栈跟踪,它崩溃,因为它使用GPU时,检查是否可以使用CPU。

那么我们如何防止它崩溃呢?

您可以尝试禁用正在使用的function,对于我来说,我会用正确的彩色replace图像,而不是使用色调的颜色。
或者你可以尝试加载另一个视图控制器,也许只是一个空的视图控制器,当应用程序在后台启动,然后当它前景交换视图控制器与你正在使用的现在。

在苹果开发者论坛上有关于这种行为的讨论,苹果员工承认这是一个错误:

https://devforums.apple.com/thread/246744?start=0&tstart=0

就在几天前发布的iOS 8.3,如果我们的崩溃监控是准确的,那么很可能8.3已经解决了这个问题。 一旦我们的腰带上有数天的数据,我会更新这个答案。

编辑:来自Fabric / Crashlytics一个星期的崩溃报告后,它看起来像8.3已经解决了这个崩溃的两个来源:一个来自MapKit,它试图渲染vector地图瓷砖和/或在背景中用OpenGL ES地图叠加光栅图块,另一个来自UIKit,它试图在后台渲染UITabBar的选项卡图像(同样,在后台使用OpenGL ES)。 很想听听别人在制作中看到的东西。

我在其中一个选项卡上包含mapKit视图的应用程序中看到了这一点。 据报道,这个错误与地图上的更新绑定,而应用程序是背景,我意识到唯一可能得到更新的是用户位置“shiny”的蓝点。 所以我添加了代码来设置

  self.mapview.showsUserLocation = NO; 

每当应用程序获得后台,并将其设置为YES时,它变为活动。 这似乎已经停止了我的alphatesting中的错误。 一旦我从betatesting中获得结果,我将更新这个。