我正在使用XCode 10(官方非Beta版)在iOS 12上测试我的应用程序。在模拟器中启动期间,从启动屏幕到正常屏幕的渐隐过程中,我的应用程序的UI几乎冻结了3分钟。有人知道这是什么原因吗?还是模拟器中的错误?
应用程序本身不会挂起,只会挂起UI。任何计时器仍会触发。任何繁忙的线程将正常继续。如果我旋转手机,则旋转的通知仍会到达并得到处理,只是UI不会更改,并且在3分钟内对任何轻按都没有反应。冻结后,它继续进行,好像什么也没发生。如果在冻结期间在XCode调试器中暂停应用程序,则所有线程(包括主线程)看起来都很好。它们都处于“等待事件”状态。
冻结发生在模拟器中的所有iOS-12设备上。模拟器中运行旧版iOS的设备很好。在运行iOS 12的真实设备上的行为很好。但是我无法在所有实际设备类型上进行测试,因此可能无法在某些型号上使用。
有人看到相同的行为,并且知道这可能是由什么引起的吗?
编辑:即使我在冻结期间从Xcode终止了应用程序,冻结的UI也要等3分钟后才会消失
编辑2:即使在冻结期间暂停应用程序的执行,UI仍将解冻并在3分钟后完成启动动画。
更新:问题似乎是由应用程序中的特定CALayer引起的。在以下代码中:
UIColor *color = [UIColor colorWithRed:0 green:1.0 blue:1.0 alpha:1.0];
courseLineLayer = [CALayer layer];
courseLineLayer.contentsScale = [UIScreen mainScreen].scale;
courseLineLayer.backgroundColor = color.CGColor;
courseLineLayer.bounds = CGRectMake(0, 0, 3, 100);
courseLineLayer.anchorPoint = CGPointMake(0.5, 1.0);
courseLineLayer.masksToBounds = NO;
courseLineLayer.hidden = NO;
如果我将hidden = NO
更改为hidden = YES
,则问题消失了。我在应用程序中使用了很多CALayers,却不知道为什么这个是如此特别。
还要注意,整个屏幕都死机了,甚至“主页”按钮也不再起作用。
如果我配置该应用程序后使其在进入睡眠状态时不隐藏该层,那么屏幕将在开始播放的动画中冻结一半:
我现在已经创建了一个供苹果查看的错误,也许他们知道。