cocos creator 2.1.2 iOS Native 有概率出现崩溃,求引擎大大解决

Creator 版本: 2.1.2

目标平台:iOS原生

详细报错信息,包含调用堆栈:

崩溃日志1:

已崩溃:com.apple.root.default-qos
EXC_BAD_ACCESS 0x00000001027f015d
0
smith-battle-mobile
spSkeletonJson_readSkeletonData + 4345921885
1
libdispatch.dylib
_dispatch_client_callout + 16
2
libdispatch.dylib
_dispatch_queue_override_invoke + 684
3
libdispatch.dylib
_dispatch_root_queue_drain + 372
4
libdispatch.dylib
_dispatch_worker_thread2 + 128
5
libsystem_pthread.dylib
_pthread_wqthread + 464
6
libsystem_pthread.dylib
start_wqthread + 4

崩溃日志2:

已崩溃:com.apple.root.default-qos
EXC_BAD_ACCESS 0x0000000104a10051
0
smith-battle-mobile
spArrayShortArray_add + 4308451409
1
libdispatch.dylib
_dispatch_client_callout + 16
2
libdispatch.dylib
_dispatch_queue_override_invoke + 684
3
libdispatch.dylib
_dispatch_root_queue_drain + 372
4
libdispatch.dylib
_dispatch_worker_thread2 + 128
5
libsystem_pthread.dylib
_pthread_wqthread + 464
6
libsystem_pthread.dylib
start_wqthread + 4

崩溃日志3:

已崩溃:com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000001
0
libGPUSupportMercury.dylib
gpus_ReturnNotPermittedKillClient + 12
1
AGXGLDriver
(null) + 7136
2
libGPUSupportMercury.dylib
gpusSubmitDataBuffers + 176
3
AGXGLDriver
(null) + 12704
4
GLEngine
gliPresentViewES_Exec + 192
5
GLEngine
gliPresentViewES + 112
6
OpenGLES
-[EAGLContext presentRenderbuffer:] + 80
7
smith-battle-mobile
-[CCEAGLView swapBuffers] + 4296568652
8
smith-battle-mobile
-[MainLoop doCaller:] + 4295626764
9
QuartzCore
CA::Display::DisplayLinkItem::dispatch(unsigned long long) + 44
10
QuartzCore
CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 444
11
IOKit
IODispatchCalloutFromCFMessage + 372
12
CoreFoundation
__CFMachPortPerform + 180
13
CoreFoundation
CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 56
14
CoreFoundation
__CFRunLoopDoSource1 + 436
15
CoreFoundation
__CFRunLoopRun + 1840
16
CoreFoundation
CFRunLoopRunSpecific + 444
17
GraphicsServices
GSEventRunModal + 180
18
UIKit
-[UIApplication _run] + 684
19
UIKit
UIApplicationMain + 208
20
smith-battle-mobile
main.m - 第 8 行
main + 8

日志分析:
根据此处显示的堆栈跟踪,在应用过渡到后台状态或者从后台状态过渡时,似乎有新调用触发了 OpenGL 渲染。如果您在应用委托的方法中设置 OpenGL 绘图,请确保仅在 applicationDidBecomeActive: 中执行此操作;而绝不在 application:willFinishLaunchingWithOptions: 或 application:didFinishLaunchingWithOptions: 中执行此操作。 一些报告指出,即使是为 SpriteKit 显示 FPS 指标也可能会导致渲染在未经允许之前进行。

重现方式:
以上崩溃日志是线上的版本通过Crashlytics收集到的

之前哪个版本是正常的 :

手机型号 : iPhone, iPad, iOS 12

手机浏览器 :

编辑器操作系统 :

编辑器之前是否有其它报错 :

出现概率:线上版本5%的概率出现崩溃

额外线索:

这些信息希望能帮到引擎团队优化下一个版本~~

挖坟,我们在 CocosCreator 2.2.2 上也遇到了 gpus_ReturnNotPermittedKillClient 这样的 crash 。问题出在 APP 切后台时,GL 线程还在渲染,导致被苹果强制杀掉,引发 gpus_ReturnNotPermittedKillClient 异常。

尝试在 AppController.m 里增加切后台暂停 GL 绘制的代码:

- (void)applicationWillResignActive:(UIApplication *)application {
    UIViewController *currentPresentVC = [self getPresentedViewController];
    if([currentPresentVC isKindOfClass:[RootViewController class]]) {
        cocos2d::Application::getInstance()->applicationDidEnterBackground();
    }
    cocos2d::Application::getInstance()->pauseMainLoop();
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    UIViewController *currentPresentVC = [self getPresentedViewController];
    if([currentPresentVC isKindOfClass:[RootViewController class]]) {
        cocos2d::Application::getInstance()->applicationWillEnterForeground();
    }
    cocos2d::Application::getInstance()->resumeMainLoop();
}

然而依然没有完全规避crash。请问有没有什么其他方案?