Сбой приложения при втором запуске только после обновления с iOS8 до iOS 9.2

У меня есть SceneKit project, который отлично запускается и работает. Затем, после закрытия и повторного запуска либо через Xcode, либо на самом устройстве (закрытом из фона и перезапущенном), он мгновенно вылетает, выдавая плохой доступ.

Самое интересное в этом то, что я открываю резервную копию проекта несколько месяцев назад, в котором не было этой проблемы, и она вызывает ту же проблему. Единственная разница в том, что сейчас я использую Xcode 7 и iOS 9.2 на своем тестовом устройстве, тогда как раньше я использовал iOS 8.

Цель проекта по-прежнему iOS 8.

Также стоит отметить, что это происходит и в симуляторе.

edit: Извиняюсь за широкий вопрос, я искал известную проблему iOS, а не волшебное исправление без кода.

Журнал сбоев

Incident Identifier: 676B8947-EF5F-4C97-8290-8FE337413E4B
CrashReporter Key:   9b475d8cebee657e23490f227c1da0af5969c462
Hardware Model:      iPhone8,1
Process:             Control [1617]
Path:                /private/var/mobile/Containers/Bundle/Application/E6B75EF7-E649-4D46-9B33-4156ECF64458/Control.app/Control
Version:             1 (1.0)
Code Type:           ARM-64 (Native)
Parent Process:      launchd [1]

Date/Time:           2015-12-28 23:14:08.08 +1100
Launch Time:         2015-12-28 23:14:07.07 +1100
OS Version:          iOS 9.2 (13C75)
Report Version:      105

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000100012140
Triggered by Thread:  7

Filtered syslog:
None found

Global Trace Buffer (reverse chronological seconds):
6148914689.570968 AppleJPEG                     0x0000000182a9eb54 [0x14c8a8e00] Releasing session
6148914689.570969 AppleJPEG                     0x0000000182aa0ff4 [0x14c8a8e00] Decoding completed without errors
6148914689.572388 AppleJPEG                     0x0000000182a9f18c [0x14c8a8e00] Options: 256x256 [FFFFFFFF,FFFFFFFF] 00025060
6148914689.572388 AppleJPEG                     0x0000000182a9f044 [0x14c8a8e00] Decoding: C0 0x01000100 0x0000354A 0x11111100 0x00000000 20945
6148914689.574243 AppleJPEG                     0x0000000182a9e338 [0x14c8a8e00] Created session
6148914689.574243 AppleJPEG                     0x0000000182a9eb54 [0x14c8a8e00] Releasing session
6148914689.574243 AppleJPEG                     0x0000000182a9e338 [0x14c8a8e00] Created session
6148914689.574243 AppleJPEG                     0x0000000182a9eb54 [0x14c8a8e00] Releasing session
6148914689.578250 AppleJPEG                     0x0000000182a9e338 [0x14c8a8e00] Created session
6148914689.578250 AppleJPEG                     0x0000000182a9eb54 [0x14c8a8e00] Releasing session
6148914689.578250 AppleJPEG                     0x0000000182a9e338 [0x14c8a8e00] Created session
6148914689.578250 AppleJPEG                     0x0000000182a9eb54 [0x14c8a8e00] Releasing session
6148914689.650289 AppleJPEG                     0x0000000182a9e338 [0x14c8a8e00] Created session
6148914689.650289 AppleJPEG                     0x0000000182a9eb54 [0x14d0f9c00] Releasing session
6148914689.651874 AppleJPEG                     0x0000000182a9e338 [0x14d0f9c00] Created session



Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x0000000180fc14bc mach_msg_trap + 8
1   libsystem_kernel.dylib          0x0000000180fc1338 mach_msg + 72
2   CoreFoundation                  0x00000001813f0ac0 __CFRunLoopServiceMachPort + 196
3   CoreFoundation                  0x00000001813ee7c4 __CFRunLoopRun + 1032
4   CoreFoundation                  0x000000018131d680 CFRunLoopRunSpecific + 384
5   GraphicsServices                0x000000018282c088 GSEventRunModal + 180
6   UIKit                           0x0000000186194d90 UIApplicationMain + 204
7   Control                         0x00000001000e9e48 0x1000d0000 + 106056
8   libdyld.dylib                   0x0000000180ebe8b8 start + 4

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x0000000180fdd4fc kevent_qos + 8
1   libdispatch.dylib               0x0000000180ea094c _dispatch_mgr_invoke + 232
2   libdispatch.dylib               0x0000000180e8f7bc _dispatch_source_invoke + 0

Thread 2:
0   libsystem_kernel.dylib          0x0000000180fdcb6c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x00000001810a1530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x00000001810a1020 start_wqthread + 4

Thread 3:
0   libsystem_kernel.dylib          0x0000000180fdcb6c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x00000001810a1530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x00000001810a1020 start_wqthread + 4

Thread 4:
0   libsystem_kernel.dylib          0x0000000180fdcb6c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x00000001810a1530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x00000001810a1020 start_wqthread + 4

Thread 5:
0   libsystem_kernel.dylib          0x0000000180fdcb6c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x00000001810a1530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x00000001810a1020 start_wqthread + 4

Thread 6:
0   libsystem_kernel.dylib          0x0000000180fdcb6c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x00000001810a1530 _pthread_wqthread + 1284
2   libsystem_pthread.dylib         0x00000001810a1020 start_wqthread + 4

Thread 7 name:  Dispatch queue: com.apple.scenekit.renderingQueue.GameView0x14c65dd30
Thread 7 Crashed:
0   libdispatch.dylib               0x0000000180e90090 dispatch_semaphore_signal + 4
1   Jet                             0x000000018eb21f80 jet_context::clear_fenced_buffers(std::__1::shared_ptr<jet_fence>) + 100
2   Jet                             0x000000018eb2d834 jet_context_Metal::create_fence() + 168
3   Jet                             0x000000018eb2d6c4 jet_context_Metal::commit() + 36
4   Jet                             0x000000018eb2bf50 jet_context_Metal::begin_render_pass(jet_framebuffer*) + 156
5   Jet                             0x000000018eb1fdc0 jet_context::execute_command_buffer(jet_command_buffer*) + 1528
6   Jet                             0x000000018eb200f0 jet_context::submit_command_buffer_impl(jet_command_buffer*) + 56
7   SpriteKit                       0x000000018ed16764 SKCRenderer::flushRenderOps() + 272
8   SpriteKit                       0x000000018ed1883c SKCRenderer::render(SKCNode*, float vector[4], std::__1::shared_ptr<jet_framebuffer> const&, unsigned int vector[4], matrix_float4x4, bool, NSDictionary*, SKCStats*, SKCStats*) + 1740
9   SpriteKit                       0x000000018ec83e74 -[SKSCNRenderer renderWithEncoder:pass:commandQueue:] + 520
10  SceneKit                        0x000000018f825c08 -[SCNRenderer _drawOverlaySceneAtTime:] + 316
11  SceneKit                        0x000000018f88403c __C3DEngineContextRenderPassInstance + 628
12  SceneKit                        0x000000018f885020 C3DEngineContextRenderMainTechnique + 1352
13  SceneKit                        0x000000018f824d28 -[SCNRenderer _renderScene:sceneTime:] + 364
14  SceneKit                        0x000000018f824e78 -[SCNRenderer _drawSceneWithNewRenderer:] + 264
15  SceneKit                        0x000000018f825378 -[SCNRenderer _drawScene:] + 84
16  SceneKit                        0x000000018f82567c -[SCNRenderer _draw] + 636
17  SceneKit                        0x000000018f87ea6c -[SCNView _drawAtTime:] + 464
18  SceneKit                        0x000000018f8553a8 __49-[SCNDisplayLink _callbackWithTime:andDeltaTime:]_block_invoke + 96
19  libdispatch.dylib               0x0000000180e8d630 _dispatch_call_block_and_release + 24
20  libdispatch.dylib               0x0000000180e8d5f0 _dispatch_client_callout + 16
21  libdispatch.dylib               0x0000000180e99634 _dispatch_queue_drain + 864
22  libdispatch.dylib               0x0000000180e910f4 _dispatch_queue_invoke + 464
23  libdispatch.dylib               0x0000000180e9b504 _dispatch_root_queue_drain + 728
24  libdispatch.dylib               0x0000000180e9daa8 _dispatch_worker_thread + 124
25  libsystem_pthread.dylib         0x00000001810a3b28 _pthread_body + 156
26  libsystem_pthread.dylib         0x00000001810a3a8c _pthread_body + 0
27  libsystem_pthread.dylib         0x00000001810a1028 thread_start + 4

Thread 7 crashed with ARM Thread State (64-bit):
    x0: 0x0000000100012100   x1: 0x000000016e35e300   x2: 0x0000000000000002   x3: 0x000000014c685660
    x4: 0x0000000000000001   x5: 0x0000000000000000   x6: 0x0000000180a9d974   x7: 0x0000000000000000
    x8: 0x000000014c662200   x9: 0x0000008a00012000  x10: 0x0000000100012140  x11: 0x0000000000000000
   x12: 0x0000000000049410  x13: 0x0000000000049410  x14: 0x00000000ffffffff  x15: 0x00000000ffffffec
   x16: 0x0000000180e9008c  x17: 0x000000018edbd848  x18: 0x0000000000000000  x19: 0x000000014c6aeb60
   x20: 0x000000016e35e300  x21: 0x000000014c6d0ea0  x22: 0x000000014c684ba0  x23: 0x000000014c65a080
   x24: 0x000000014c6f6fc0  x25: 0x000000014c685660  x26: 0x00000000000003c0  x27: 0x0000000000000280
   x28: 0x000000014d908df0  fp: 0x000000016e35e2f0   lr: 0x000000018eb21f80
    sp: 0x000000016e35e2c0   pc: 0x0000000180e90090 cpsr: 0x00000000

person user3765506    schedule 28.12.2015    source источник
comment
Как выглядит трассировка стека?   -  person Phillip Mills    schedule 28.12.2015
comment
пожалуйста, прокомментируйте журнал сбоев   -  person Rohit Pradhan    schedule 28.12.2015
comment
Выложи крашлог,.   -  person Teja Nandamuri    schedule 28.12.2015


Ответы (2)


Сбой в рендерере. Интересно, ты щекочешь жука в Metal? Сейчас это средство визуализации по умолчанию, но это был OpenGL в iOS 8 SDK.

Взгляните на SCNView SCNPreferredRenderingAPI:

SceneKit пытается инициализировать представление, используя предпочтительный API, который вы указываете в initWithFrame:options: initializer; если текущее устройство не поддерживает предпочтительный API, SceneKit автоматически возвращается к поддерживаемому API. После инициализации используйте свойство renderingAPI, чтобы узнать, произошел ли резервный вариант. Например, если вы укажете параметр SCNRenderingAPIMetal при инициализации представления на устройстве iOS, которое не поддерживает Metal, вместо этого SceneKit по умолчанию использует параметр SCNRenderingAPIOpenGLES2.

Однако, поскольку вы ориентируетесь на iOS 8, вы не можете использовать это свойство. Но вы можете установить предпочтительный модуль рендеринга, используя Info.plist. Попробуйте это и посмотрите, изменится ли поведение.

person Hal Mueller    schedule 29.12.2015
comment
К сожалению, все та же проблема, я действительно думал, что это было бы, по крайней мере, хорошим краткосрочным решением. Я даже заблокировал свой перегруженный метод рендеринга, который все равно вылетает при втором запуске. - person user3765506; 29.12.2015
comment
Проверено на iphone 5s под управлением iOS 8.4, работает отлично. Попробую найти 5s с 9.2, так как хочу исключить любую проблему, связанную с размером экрана. Хотя у меня такое ощущение, что это связано с установкой/чтением NSDefaults при запуске. - person user3765506; 31.12.2015

Похоже, это происходит из-за известной ошибки в 9.2, связанной с эмиттерами частиц SpriteKit. Удаление узла или снижение уровня рождаемости остановило сбой.

person user3765506    schedule 04.01.2016