MapKit MapView VectorKit Crash на iOS13 - PullRequest
       50

MapKit MapView VectorKit Crash на iOS13

3 голосов
/ 10 октября 2019

С выходом iOS13 в приложении, над которым мы работаем, появляется все больше сбоев mapKit VectorKit. Мы не можем воспроизвести сбой внутренне, и каждый день наш собственный репортер выявляет более 200 сбоев.

Из всей полученной нами информации, сбой всегда происходит, когда приложение активируется из фона, и прив то время представление ViewController имело подпредставление MKMapView. Возможно, что-то не так, когда система рендерит пользовательский интерфейс карты.

Эта проблема кажется долговременной проблемой iOS начиная с iOS11 или даже раньше. Теперь версия системы iOS13, относящаяся к сбою, включает 13.0, 13.1, 13.1.1, 13.1.2. Я сообщил о проблеме в системе отчетов об ошибках Apple, но ответа от Apple до сих пор нет.

Любой совет или подсказка будет принята с благодарностью.

К вашему сведению. Стек аварийного отказа, как показано ниже.

Exception Type:  SIGABRT
Exception Codes: #0 at 0x1a8530ebc
Crashed Thread:  0

Thread 0 Crashed:
0   libsystem_kernel.dylib              __pthread_kill + 8
1   libsystem_c.dylib                   abort + 100
2   libsystem_c.dylib                   __assert_rtn + 204
3   Metal                               MTLIOAccelCommandBufferStorageGrowSegmentList.cold.1 + 0
4   Metal                               MTLReportFailure + 476
5   Metal                               -[MTLTextureDescriptorInternal validateWithDevice:] + 2124
6   AGXMetalA11                         0x00000001a85f93e8 + 64
7   VectorKit                           ggl::MetalResourceManager::newTexture(ggl::Texture const*) + 596
8   VectorKit                           ggl::MetalRenderer::prepareTexture(ggl::MetalResourceManager*, ggl::Texture const*) + 44
9   VectorKit                           ggl::MetalRenderer::_processQueue(ggl::RenderTarget*, ggl::RenderQueue*, id<MTLCommandBuffer>) + 3220
10  VectorKit                           ggl::MetalRenderer::_processQueue(ggl::RenderTarget*, ggl::RenderQueue*, id<MTLCommandBuffer>) + 96
11  VectorKit                           invocation function for block in ggl::MetalRenderer::frame(ggl::RenderTarget*, ggl::RenderQueue*, std::__1::function<void ()>, std::__1::function<void ()>) + 56
12  VectorKit                           invocation function for block in geo::TaskQueue::sync(std::__1::function<void ()>) + 60
13  libdispatch.dylib                   _dispatch_client_callout + 16
14  libdispatch.dylib                   _dispatch_async_and_wait_invoke_and_complete_recurse + 228
15  libdispatch.dylib                   _dispatch_async_and_wait_f + 100
16  VectorKit                           ggl::MetalRenderer::frame(ggl::RenderTarget*, ggl::RenderQueue*, std::__1::function<void ()>, std::__1::function<void ()>) + 544
17  VectorKit                           ggl::RenderFrame::execute(ggl::RenderTarget*, ggl::RenderQueue*, std::__1::function<void ()>, std::__1::function<void ()>) + 120
18  VectorKit                           -[MDDisplayLayer drawToTexture:withRenderQueue:completionHandler:] + 348
19  VectorKit                           -[MetalLayer _onTimerFired:withPresent:] + 280
20  VectorKit                           md::MapEngine::renderScene(double, std::__1::function<void ()>) + 104
21  VectorKit                           md::MapEngine::onRenderTimerFired(double) + 328
22  VectorKit                           ggl::DisplayLink::onTimerFired(double) + 40
23  VectorKit                           -[_GGLDisplayLinkTarget displayLinkFired:] + 84
24  QuartzCore                          CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 632
25  QuartzCore                          display_timer_callback(__CFMachPort*, void*, long, void*) + 264
26  CoreFoundation                      __CFMachPortPerform + 172
27  CoreFoundation                      __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56
28  CoreFoundation                      __CFRunLoopDoSource1 + 444
29  CoreFoundation                      __CFRunLoopRun + 2168
30  CoreFoundation                      CFRunLoopRunSpecific + 464
31  GraphicsServices                    GSEventRunModal + 104
32  UIKitCore                           UIApplicationMain + 1936
33  homebrew                            main (main.m:16)
34  libdyld.dylib                       start + 4

1 Ответ

1 голос
/ 21 октября 2019

Проверьте загрузку вашего процессора на iOS12 против iOS13.

Я заметил, что мое приложение зависало, потому что я слишком часто добавлял и удалял полилинии на карту (хотя эта проблема проявлялась только в iOS13, а не iOS12).

См. Мой пост об этом здесь .

Просмотрите журналы аварий и посмотрите, заметили ли вы что-то вроде этого:

Event:           cpu usage  
Action taken:    Process killed  
CPU:             48 seconds cpu time over 54 seconds (88% cpu average), exceeding limit of 80% cpu over 60 seconds  
CPU limit:       48s  
Limit duration:  60s  
CPU used:        48s  
Duration:        54.45s  
Steps:           15  

Myприложение перестало падать в iOS13, если я уменьшил частоту перерисовки оверлеев карты.

...