iOS拍摄应用程序快照时崩溃

iOS拍摄应用程序快照时崩溃,ios,crash,calayer,uiwindow,cgimage,Ios,Crash,Calayer,Uiwindow,Cgimage,更新:2016年4月14日:仍然在Fabric Crashlytics中看到这些崩溃,仍然不确定如何进行修复。会话崩溃率似乎为0.2% 据我所见,苹果拍快照时,我的应用程序偶尔会崩溃(下面的片段在崩溃日志中)。然而,我不知道如何才能阻止它崩溃 [UIApplication _updateSnapshotAndStateRestorationArchiveForBackgroundEvent:saveState:exitIfCouldNotRestoreState:] 我在SO上找到了一些其他

更新:2016年4月14日:仍然在Fabric Crashlytics中看到这些崩溃,仍然不确定如何进行修复。会话崩溃率似乎为0.2%


据我所见,苹果拍快照时,我的应用程序偶尔会崩溃(下面的片段在崩溃日志中)。然而,我不知道如何才能阻止它崩溃

[UIApplication _updateSnapshotAndStateRestorationArchiveForBackgroundEvent:saveState:exitIfCouldNotRestoreState:]
我在SO上找到了一些其他帖子,但是我没有使用任何类型的WebView(),没有使用任何广告,并且在主线程中调用completionHandler。其他人似乎也经历过类似的问题,但他们的问题仍然没有答案。下面是整个崩溃日志。这是苹果内部的一个bug,还是我可以修复的

Thread : Crashed: com.apple.main-thread
0  libsystem_platform.dylib       0x1812962a0 _platform_memmove + 176
1  CoreFoundation                 0x181544ed8 CFDataGetBytes + 172
2  CoreFoundation                 0x181544ed8 CFDataGetBytes + 172
3  ImageIO                        0x182cb599c CGImageReadGetBytesAtOffset + 624
4  ImageIO                        0x182cb570c CGImageReadSessionGetBytes + 36
5  ImageIO                        0x182d89acc iioReadCallback + 32
6  AppleJPEG                      0x182c8bd04 aj_istream_move_to_position + 488
7  AppleJPEG                      0x182c8c968 aj_istream_state_restore + 60
8  AppleJPEG                      0x182c9b64c applejpeg_decode_set_ra_table + 804
9  ImageIO                        0x182d8e1e0 copyImageBlockSetAppleJPEG + 6524
10 ImageIO                        0x182cbf130 ImageProviderCopyImageBlockSetCallback + 852
11 QuartzCore                     0x183d5ae0c CA::Render::create_image(CGImage*, CGColorSpace*, unsigned int) + 972
12 QuartzCore                     0x183d59eec CA::Render::copy_image(CGImage*, CGColorSpace*, unsigned int, double) + 372
13 QuartzCore                     0x183d32f00 -[CALayer(CALayerPrivate) _copyRenderLayer:layerFlags:commitFlags:] + 484
14 QuartzCore                     0x183d32c54 CA::Context::commit_layer(CA::Layer*, unsigned int, unsigned int, void*) + 108
15 QuartzCore                     0x183d2f9cc CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 392
16 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
17 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
18 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
19 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
20 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
21 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
22 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
23 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
24 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
25 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
26 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
27 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
28 QuartzCore                     0x183d2f95c CA::Layer::commit_if_needed(CA::Transaction*, void (*)(CA::Layer*, unsigned int, unsigned int, void*), void*) + 280
29 QuartzCore                     0x183d2d0cc CA::Context::commit_transaction(CA::Transaction*) + 1332
30 QuartzCore                     0x183d2c9dc CA::Transaction::commit() + 512
31 UIKit                          0x1865ab768 _UIWindowUpdateVisibleContextOrder + 236
32 UIKit                          0x1865ab5b4 +[UIWindow _prepareWindowsPassingTestForAppResume:] + 32
33 UIKit                          0x1865e1468 __114-[UIApplication _updateSnapshotAndStateRestorationArchiveForBackgroundEvent:saveState:exitIfCouldNotRestoreState:]_block_invoke_3 + 72
34 libdispatch.dylib              0x181089630 _dispatch_call_block_and_release + 24
35 libdispatch.dylib              0x1810895f0 _dispatch_client_callout + 16
36 libdispatch.dylib              0x18108ecf8 _dispatch_main_queue_callback_4CF + 1844
37 CoreFoundation                 0x1815ecbb0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
38 CoreFoundation                 0x1815eaa18 __CFRunLoopRun + 1628
39 CoreFoundation                 0x181519680 CFRunLoopRunSpecific + 384
40 GraphicsServices               0x182a28088 GSEventRunModal + 180
41 UIKit                          0x186390d90 UIApplicationMain + 204
42 MyApp                          0x100095888 main (main.m:16)
43 libdispatch.dylib              0x1810ba8b8 (Missing)

很有可能某个地方有什么东西触发了对后台线程的UIKit操作。找到确切的。。。这是个骗局。有点运气

这是一个在除main之外的线程上跟踪UIKit访问的防护。这段代码摘自商业iOS PDF框架,但在麻省理工学院下重新授权。这是因为许多内部调用都调用setNeedsDisplay或setNeedsLayout。虽然不能抓住所有的东西,但它非常轻,通常能完成任务


如果你的应用程序中有任何广告显示SDK,那将是一个极好的第一步。他们有一个令人沮丧的习惯,那就是在将用户界面操作正确地限制在主线程上时,他们会非常糟糕。

谢谢,@alexcurylo,该应用程序不使用任何类型的广告或网络视图,但我会尝试一下要点,看看它会带来什么。我确实在后台线程中发现了一个用户界面更新的实例,因此可能就是这样。这是一个非常有用的要点,谢谢!这一“修复”一周前就开始了,但不幸的是,还没有修复即将发布的零星碰撞报告。