仅适用于iPhone 11 Pro的Cordova WKWebView白色屏幕

问题描述 投票:0回答:1

问题

我们的客户在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秒。

信息

环境,平台,设备

  • iPhone 11 Pro Simulator,iOS 13.3(应用程序在1秒钟的睡眠破解后启动)
  • [iPhone 11 Pro,iOS 13.3.1(仍然损坏)
  • 版本信息

科尔多瓦:

  • 9.0.0([email protected]
  • cordova-plugin-camera:4.1.0
  • cordova-plugin-device:2.0.3
  • cordova-plugin-dialogs:2.0.2
  • cordova-plugin-file:6.0.2
  • cordova-plugin-media-capture:3.0.3
  • cordova-plugin-statusbar:2.4.3
  • cordova-plugin-wkkeyboardfix:1.0.1
  • cordova-plugin-wkwebviewxhrfix:0.1.0
  • 反应:-温泉:2.10.8-反应:16.8.6

XCode:11.3.1MacOS Catalina 10.15.4

问题我们的客户报告在iOS设备上启动应用时出现随机白屏。重试几次后,几乎所有设备碰巧都成功启动了该应用程序,iPhone 11 Pro始终以...

ios objective-c cordova cordova-plugins wkwebview
1个回答
0
投票

我自iPhone 11发布以来一直在使用它,从未遇到过此问题。令人惊讶!

© www.soinside.com 2019 - 2024. All rights reserved.