Проблема
Наши клиенты сообщают о случайных белых экранах при запуске приложения на устройствах iOS. Несмотря на то, что почти все устройства успешно запускают приложение после некоторых попыток, iPhone 11 Pro всегда запускается с белым экраном. Это заставило меня (после долгого копания черного ящика) предположить, что проблема связана с быстрыми iPhone и что WKWebView может начинаться с состояния гонки.
На моем симуляторе iPhone 11 Pro я, к счастью, получил шанс 50/50 белого экрана, поэтому я начал отладку CDVWKWebKitViewEngine.m
. У меня нет абсолютно никаких знаний в Objective- C, поэтому я просто перезапускал снова и снова, чтобы случайным образом определить различия в стеке вызовов. При этом я постепенно понял, как плагин может работать под капотом. userContentController:didReceiveScriptMessage
, похоже, играет роль в успешном запуске контейнера и всех загружаемых скриптов и ресурсов.
После долгого времени я понял, что разрыв кода в строке 321 в CDVWKWebKitViewEngine.m
заставил приложение работать постоянно в симуляторе, что приводило меня к добавлению таймера сна в строке 321:
- (id)forwardingTargetForSelector:(SEL)aSelector
{
[NSThread sleepForTimeInterval:1.0];
return _engineWebView;
}
По крайней мере, приложение запускалось без точек останова в симуляторе. Однако на физическом устройстве он сохранил белый экран.
Теперь я буду go при отладке, чтобы определить другую точку. Но любая помощь или советы приветствуются.
Что ожидается?
Приложение должно запускаться правильно после экрана spla sh. CDVWKWebKitViewEngine.m
-> userContentController:didReceiveScriptMessage
должно быть запущено каждое приложение запускается надежно.
Что на самом деле происходит?
userContentController:didReceiveScriptMessage
запускается только на iPhone 11 Pro Simulator, iOS 13.3 при добавлении [NSThread sleepForTimeInterval:1.0];
в строке 321 в CDVWKWebKitViewEngine.m
:
- (id)forwardingTargetForSelector:(SEL)aSelector
{
[NSThread sleepForTimeInterval:1.0];
return _engineWebView;
}
Без добавления строки сна я вижу белый экран в 5 из 10 случаев в симуляторе. userContentController:didReceiveScriptMessage
в этих случаях не запускается.
На физическом iPhone 11 Pro, iOS 13.3.1 приложение запускается постоянно с белым экраном после spla sh и userContentController:didReceiveScriptMessage
не срабатывает - даже если я установлю режим сна на 5 секунд.
Информация
Среда, платформа, устройство
- iPhone 11 Pro Simulator, iOS 13.3 ( Приложение запускается после 1 се c сна взлома)
- iPhone 11 Pro, iOS 13.3.1 (все еще не работает)
Информация о версии
Cordova:
- 9.0.0 (cordova-lib@9.0.1)
- 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
Реакция: - onsenui: 2.10.8 - реакция: 16,8.6
XCode: 11.3.1 MacOS Catalina 10.15.4