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

能确认一下这个问题吗? 肯定很多人遇到这个问题,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 有问题。

我尝试升级 Xcode 试试。

iPhoneX :iOS 13.1.3
Xcode11
Creator 2.0.5 - 2.2.0
debug

空包锁屏 4-5 秒后返回

这个在V2.2.0是可以规避,在1.9.3还是不行,但是return后边的代码不执行不知道有什么后果。

@minggo 我们线上项目 iphone7 13.1 creator2.1.3 , 锁屏几秒再解锁画面冻结然后黑屏, 逻辑还在的,点击游戏能做出正确反应,音乐音效都在, 这种情况在播放纯试玩的激励广告也会出现,都是100%必现的。 试过creator2.2也是一样的。

跟 xcode版本应该没关系,我们是用 xcode 10.1 发布的, 而且在 ipad air 10.x系统上没问题的

@562780937 @ewingping 从你们反馈的情况来看是和设备有关系了?我看看能不能多找几个设备试试。

辛苦了,多谢帮忙跟进。

iPhone8(iOS 13.1.3) 其它环境和上面一样,也没有问题啊。

重现了一次,奇怪,不是稳定重现的。

这个方案是可行的。我在想有没有更好的方式。原因就是在关闭窗口时会调用 layoutSubViews,该函数的判断在 iOS13(部分设备)会不成功,导致 framebuffer 出错。

希望能在下一个版本能够修复这个问题:sweat_smile:

我们在刘海的手机上必现,非刘海屏出现概率很小。都是ios13

提交代码修复了 https://github.com/cocos-creator/cocos2d-x-lite/pull/1912 ,思路和 @562780937 是一样的,只是做法不同而已。后续看看怎么把这个函数的逻辑移到别的地方。

2赞