1.9 用最新版xcode 打的包在ios13 上 进入后台会卡死

引擎版本 1.9.3
XCODE版本 11

好像是 iOS13 的 bug
建议升级到 2.x 试试

楼主现在是删除测试还是更新了版本,版本2.0是没这段检测的

我的也是1.9.3 ,在ios同样问题,有没有什么好的解决方案?,项目多西很多升级引擎目前不太现实。

激活一下@引擎开发团队

抱歉没有现成的解决方法。2.2 已发布,和 1.9 隔着 1.10\2.0\2.1 三大版本,我们无力维护了,非常抱歉。

2.0.5也有类似的bug 大佬

[ERROR] (/Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/jsb_opengl_manual.cpp, 3983): glDrawElements((GLenum)p[1], (GLsizei)p[2], (GLenum)p[3], (const GLvoid*)(intptr_t)p[4]); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION

重复报这个错

2.2.0也有同样的问题。
iPhonex锁屏后4秒就会卡死。
锁屏后详细日志如下:
2019-10-23 17:57:12.131046+0800 [903:285862] failed to call context
2019-10-23 17:57:13.135262+0800 [903:285862] failed to call context
2019-10-23 17:57:14.272970+0800 [903:285862] failed to call context
2019-10-23 17:57:15.273989+0800 [903:285862] failed to call context
2019-10-23 17:57:15.282005+0800 [903:285862] Can’t end BackgroundTask: no background task exists with identifier 2 (0x2), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
OpenGL error 0x0506 in -[CCEAGLView swapBuffers] 433
OpenGL error 0x0502 in -[CCEAGLView swapBuffers] 442
OpenGL error 0x0506 in -[CCEAGLView swapBuffers] 433
OpenGL error 0x0502 in -[CCEAGLView swapBuffers] 442
E/renderer (172): glClear(mask); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:clear
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw
E/renderer (422): glDrawElements(static_cast(_nextState->primitiveType), count, static_cast(nextIndexBuffer->getFormat()), (GLvoid *)(base * nextIndexBuffer->getBytesPerIndex())); GL error 0x506: GL_INVALID_FRAMEBUFFER_OPERATION:draw

@jare

@_PP 升级到2.2.0也报错。有解决方案吗?我看很多帖子都报了类似的问题

可以删除,线上项目,删除了半年并没有什么问题;不删除的话很多SDK界面返回后都会卡死

首先确认下是不是接什么SDK,会把GL渲染的View给推到后台了?这时候是需要手动暂停引擎,不然会导致引擎还在做渲染工作,View无效的情况就会报这个错误。

空包也会出现这个问题

能确认一下这个问题吗? 肯定很多人遇到这个问题,iPhonex 百分百重现。在游戏中锁屏,不是切后台在锁屏,至少等4秒然后就opengl报错,ui卡死。

CCEAGLView 增加接口, CCEAGLView-ios.h


-(void) setupGLContext2
{
    if (!_context || ![EAGLContext setCurrentContext:_context] )
    {
        NSLog(@"Can not crate GL context.");
        return;
    }
}

在 AppController.mm 增加

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // ...
    auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
    [glview setupGLContext2];
}

试试。

同样的错误,还是卡死。

@yinjimmy @huanxinyin @jare
能再看一下这个问题吗?因为很多看广告的行为也在模拟锁屏切后台,现在游戏内基本上看不了广告了,看完就黑屏卡死。
空包百分百重现,应该比较好定位问题吧。

刚又用V2.2.0弄了个空包测试,问题还是没解决,关屏回来依旧卡死。这问题不解决相当于抛弃苹果用户了啊,希望官方能尽快给出个解决方案。

临时方案:
在CCEAGLView.mm

  • (void) layoutSubviews
    {
    if(_isBackground){
    return;
    }
    }

-(void) setIsBackground:(BOOL) flag
{
_isBackground = flag;
}

增加一个判断是否切到后台 ,如果是直接return。
AppController.mm
applicationDidEnterBackground里
auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
[glview setIsBackground:YES];

applicationWillEnterForeground
auto glview = (__bridge CCEAGLView *)cocos2d::Application::getInstance()->getView();
[glview setIsBackground:NO];

目前暂时没有重现了 还有待测试,急用的小伙伴也可改了一起测测。

1赞

你们报问题能否说得详细点:

  • 引擎版本
  • Xcode 版本-
  • iOS设备和版本

我刚才测试了没有问题,环境是:

  • iPhone11: iOS 13.1.2
  • Xcode11: Version 11.0 (11A420a)
  • Creator 2.2
  • debug

只有 iPhoneX 有问题?只有使用特殊的 Xcode 版本有问题,还是特殊的 iOS 版本?

补充:
我的测试方式是在运行 Examples 的过程中锁屏 4-5 秒后返回的。

公司的 iPhoneX 版本是 11.2.2,为了保证测试样机的 iOS 版本的多样性,我还不想去升级 iOS 版本,除非确认是只有 iPhoneX 有问题。