Cordova WKWebView белый экран только на iPhone 11 Pro - PullRequest
0 голосов
/ 29 марта 2020

Проблема

Наши клиенты сообщают о случайных белых экранах при запуске приложения на устройствах 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

1 Ответ

0 голосов
/ 07 мая 2020

Я использую iPhone 11 с момента его выпуска и никогда не сталкивался с этой проблемой. Поразительно! Кстати, я люблю кожаные чехлы на телефонах. Так смартфоны начинают выглядеть круче, а его владелец начинает выглядеть более брутально. Вот почему я купил кожаные чехлы для каждого из своих смартфонов. Мой iPhone 11 не был исключением. Эта статья помогла мне выбрать хороший чехол: https://leather-toolkits.com/reviews/best-leather-iphone-11-cases/ Благодаря этому я смог выбрать отличный кожаный чехол, который по-прежнему в целости и сохранности!

...