2016-03-23 93 views
3

更新:2016年4月14日:仍然看到織物Crashlytics這些崩潰,仍然不知道如何去修復。似乎是0.2%的會話崩潰率。iOS應用快照崩潰


據我所看到的,我的應用程序是很偶然的崩潰,當蘋果需要一個快照(如下面的代碼片段是在崩潰日誌)。但是,我不確定我如何阻止它崩潰。

[UIApplication _updateSnapshotAndStateRestorationArchiveForBackgroundEvent:saveState:exitIfCouldNotRestoreState:] 

我已經找到了這麼幾個其他職位,但我不使用任何類型的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

這是一個很不錯的選擇,某處某處正在觸發後臺線程上的UIKit操作。準確地找到......這是一個竅門。有一點點運氣,this gist may be of help

這是一個跟蹤主鍵以外的線程上UIKit訪問的警衛。這段代碼取自商業iOS PDF框架http://pspdfkit.com,但在MIT重新授權。因爲很多調用在內部調用了setNeedsDisplay或setNeedsLayout。不會抓住所有東西,但它非常輕巧,通常可以完成這項工作。

如果您的應用中有任何廣告展示SDK,那將是非常好的第一嫌疑。他們有一個令人沮喪的習慣,就是將UI操作正確地限制在主線程中,這是非常可怕的。

+0

感謝@alexcurylo,應用程序不使用任何類型的廣告或WebViews,但我會嘗試一下要點,看看它帶來了什麼。 – cjhill

+0

我確實在後臺線程中找到了UI更新的一個實例 - 所以它可能會是這樣。雖然這是一個非常有用的Gist,所以非常感謝! – cjhill

+0

這個「修復」就像一週前一樣,但不幸的是還沒有修復零星的崩潰報告。 – cjhill