我们的客户在iOS设备上启动应用后报告出现随机的白屏。重试几次后,几乎所有设备碰巧都能成功启动该应用程序,iPhone 11 Pro始终以白屏启动。这使我(经过漫长的黑匣子挖掘之后)的假设是,快速的iPhone出现了问题,WKWebView可能从竞争条件开始。
很幸运,在我的iPhone 11 Pro模拟器上,我有50/50的机会出现白屏,所以我开始调试CDVWKWebKitViewEngine.m
。我对Objective-C完全不了解,所以我一遍又一遍地重新启动以随机发现调用堆栈中的差异。在执行此操作的过程中,我逐渐了解了插件可能是如何工作的。 userContentController:didReceiveScriptMessage
似乎在成功启动容器以及正在加载的所有脚本和资产中起作用。
很长时间以后,我意识到在CDVWKWebKitViewEngine.m
中的第321行破坏了代码,使该应用程序在模拟器中不断运行,这使我在321行中添加了一个睡眠计时器:
- (id)forwardingTargetForSelector:(SEL)aSelector
{
[NSThread sleepForTimeInterval:1.0];
return _engineWebView;
}
至少可以使应用程序在模拟器中没有断点的情况下启动。但是,在物理设备上,它保持白屏。
我现在将继续调试以发现另一点。但是任何帮助或提示都将受到高度赞赏。
启动屏幕后,应用程序应正确启动。CDVWKWebKitViewEngine.m
->在每次启动应用程序时都要可靠地触发userContentController:didReceiveScriptMessage
。
[userContentController:didReceiveScriptMessage
仅在[NSThread sleepForTimeInterval:1.0];
的第321行中添加CDVWKWebKitViewEngine.m
时,才在iPhone 11 Pro Simulator,iOS 13.3上触发。
- (id)forwardingTargetForSelector:(SEL)aSelector { [NSThread sleepForTimeInterval:1.0]; return _engineWebView; }
没有添加睡眠线,在模拟器中,十分之五的情况下,我遇到了白屏。在这些情况下,不会触发
userContentController:didReceiveScriptMessage
。
在物理iPhone 11 Pro,iOS 13.3.1上,启动后,应用会不断以白屏启动,userContentController:didReceiveScriptMessage
未触发-即使我将睡眠设置为5秒。
科尔多瓦:
反应:-温泉:2.10.8-反应:16.8.6
XCode:11.3.1MacOS Catalina 10.15.4
问题我们的客户报告在iOS设备上启动应用时出现随机白屏。重试几次后,几乎所有设备碰巧都成功启动了该应用程序,iPhone 11 Pro始终以...
我自iPhone 11发布以来一直在使用它,从未遇到过此问题。令人惊讶!