【问题标题】:App crashing on second launch only after upgrading from iOS8 to iOS 9.2仅在从 iOS8 升级到 iOS 9.2 后,应用程序在第二次启动时崩溃
【发布时间】:2015-12-28 13:57:48
【问题描述】:

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

有趣的是,我打开了几个月前没有出现此问题的项目的备份,但它导致了同样的问题。唯一的区别是我现在在我的测试设备上运行Xcode 7 和iOS 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

【问题讨论】:

  • 堆栈跟踪是什么样的?
  • 请评论崩溃日志
  • 发布崩溃日志,.

标签: ios xcode scenekit ios9.2


【解决方案1】:

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

看看SCNViewSCNPreferredRenderingAPI:

SceneKit 尝试使用您在 initWithFrame:options: initializer 中指定的首选 API 来初始化视图。如果当前设备不支持首选 API,SceneKit 会自动回退到支持的 API。初始化后,使用renderingAPI 属性查明是否发生了回退。例如,如果您在不支持 Metal 的 iOS 设备上初始化视图时指定 SCNRenderingAPIMetal 选项,则 SceneKit 会默认使用 SCNRenderingAPIOpenGLES2 选项。

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

【讨论】:

  • 不幸的是仍然是同样的问题,我真的认为这至少是一个很好的短期修复。我什至屏蔽了我过度使用的渲染器方法,但在第二次启动时仍然崩溃。
  • 在运行 iOS 8.4 的 iphone 5s 上测试,运行良好。打算尝试找到运行 9.2 的 5s,因为我想排除与屏幕尺寸相关的任何问题。虽然我感觉它与 NSDefaults 在启动时被设置/读取有关。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2021-04-09
    • 2021-05-10
    • 2018-12-27
    相关资源
    最近更新 更多