崩溃,而iOS需要应用程序快照

时间:2016-03-23 09:44:59

标签: ios crash calayer uiwindow cgimage

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

据我所知,当Apple拍摄快照时,我的应用程序偶尔会崩溃(因为下面的代码段位于崩溃日志中)。但是,我不确定如何阻止它崩溃。

[UIApplication _updateSnapshotAndStateRestorationArchiveForBackgroundEvent:saveState:exitIfCouldNotRestoreState:]

我在SO上发现了一些其他帖子,但我没有使用任何类型的WebView(post),不使用任何广告,并在主线程中调用completionHandler。其他人似乎也遇到过类似的问题,但他们的post仍未得到答复。整个崩溃日志如下。这是Apple的内部错误,还是我可以解决的问题?

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)

1 个答案:

答案 0 :(得分:1)

在某个地方触发UIKit操作后台线程是一个不错的选择。确切地找到了什么...这是一个技巧。运气不错,this gist may be of help

  

这是一个在主要线程以外的线程上追踪UIKit访问的守卫。此代码段取自商业iOS PDF框架http://pspdfkit.com,但在MIT下重新许可。之所以有效,是因为很多调用都在内部调用setNeedsDisplay或setNeedsLayout。不会抓住所有东西,但它非常轻巧,通常可以胜任。

如果您的应用中有任何广告展示SDK,那将是一个非常好的首要怀疑。他们有一种令人沮丧的习惯,就是将UI操作正确地限制在主线程中是非常可怕的。