仅在从 iOS8 升级到 iOS 9.2 后,应用程序才在第二次启动时崩溃

App crashing on second launch only after upgrading from iOS8 to iOS 9.2

我有一个 SceneKit project 可以完美启动和运行。然后一旦关闭并重新启动,无论是通过 Xcode 还是在设备本身(从后台关闭并重新启动),它都会立即崩溃,导致无法访问。

有趣的是,我打开了几个月前没有这个问题的项目备份,但它导致了同样的问题。唯一的区别是我现在在我的测试设备上使用 运行 Xcode 7iOS 9.2,而我使用的是 iOS 8.

项目的目标仍然是iOS 8

另外值得注意的是它也发生在模拟器中。

编辑:对于宽泛的问题表示歉意,我正在寻找一个已知的 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

崩溃发生在渲染器中。我想知道你是否在为 Metal 中的一个错误发痒?这是现在的默认渲染器,但它是 iOS 8 SDK 中的 OpenGL。

看看SCNView SCNPreferredRenderingAPI:

SceneKit attempts to initialize a view using the preferred API you specify in the initWithFrame:options: initializer; if the current device does not support the preferred API, SceneKit automatically falls back to a supported API. After initialization, use the renderingAPI property to find out whether a fallback occurred. For example, if you specify the SCNRenderingAPIMetal option when initializing a view on an iOS device that does not support Metal, SceneKit defaults to the SCNRenderingAPIOpenGLES2 option instead.

不过,由于您的目标是 iOS 8,因此您不能使用 属性。但是你可以set the preferred renderer using your Info.plist。试试看行为是否改变。

这似乎源于 9.2 中与 SpriteKit 粒子发射器相关的已知错误。删除节点或降低出生率已停止崩溃。