2016-03-23 1 views
3

Обновление: 14 апреля 2016 года. Все еще видя эти сбои в Crashlytics Fabric, и до сих пор не знаю, как я буду исправлять. Кажется, что скорость сбоя сеанса составляет 0,2%.Crash while iOS принимает снимок приложения


Насколько я могу видеть, что мое приложение очень иногда сбой, когда 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

Это довольно хорошая ставка, что что-то где-то запускает манипуляции UIKit на фоне потока. Найти то, что ... ну это трюк. С небольшой удачей, this gist may be of help.

Это охранник, который отслеживает доступ UIKit к потокам, отличным от основного. Этот фрагмент взят из коммерческого фреймворка iOS PDF http://pspdfkit.com, но он переиздан под MIT. Работает потому, что многие вызовы внутренне вызывают setNeedsDisplay или setNeedsLayout. Не поймать все, но он очень легкий и обычно выполняет эту работу.

Если у вас есть какие-либо объявления SDK в вашем приложении, это было бы отличным первым подозрением. У них удручающая привычка быть абсолютно ужасной при правильном ограничении манипуляций пользовательского интерфейса с основной нитью.

+0

Спасибо, @alexcurylo, приложение не использует никаких объявлений или WebViews, но я попробую сущность и посмотрю, что он вызывает. – cjhill

+0

Я нашел один экземпляр обновления пользовательского интерфейса в фоновом потоке - так что это потенциально может быть так. Это действительно полезный Gist, хотя, спасибо за это! – cjhill

+0

Это «исправление» прошло неделю назад, но, к сожалению, не зафиксировано спорадических отчетов о сбоях. – cjhill