web-dev-qa-db-fra.com

Crash dans UIWebView sous iOS 11.3 (et 11.4)

Nous avons une application iOS hybride avec un UIWebView qui charge un webshop assez complexe (tas de pixels de suivi, comportement javasript, comportement asynchrone). Depuis le déploiement d'iOS 11.3, nous constatons un grand nombre de pannes qui semblent provenir de UIWebView ou de composants associés. Le stacktrace ressemble à ceci

Crashed: WebThread
0  WebCore                        0x18b7b0d98 WebCore::Page::sessionID() const + 162
1  WebKitLegacy                   0x18be91204 WebFrameNetworkingContext::storageSession() const + 24
2  WebCore                        0x18ad818bc WebCore::ResourceHandle::willSendRequest(WebCore::ResourceRequest&&, WebCore::ResourceResponse&&, WTF::CompletionHandler<void (WebCore::ResourceRequest&&)>&&) + 1012
3  WebCore                        0x18ad86f88 WTF::Function<void ()>::CallableWrapper<-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]::$_1>::call() + 208
4  JavaScriptCore                 0x1892157d4 WTF::dispatchFunctionsFromMainThread() + 344
5  Foundation                     0x1830fe0ec __NSThreadPerformPerform + 340
6  CoreFoundation                 0x18265b404 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
7  CoreFoundation                 0x18265ac2c __CFRunLoopDoSources0 + 276
8  CoreFoundation                 0x18265879c __CFRunLoopRun + 1204
9  CoreFoundation                 0x182578da8 CFRunLoopRunSpecific + 552
10 WebCore                        0x18a805dcc RunWebThread(void*) + 592
11 libsystem_pthread.dylib        0x1822d9220 _pthread_body + 272
12 libsystem_pthread.dylib        0x1822d9110 _pthread_body + 290
13 libsystem_pthread.dylib        0x1822d7b10 thread_start + 4

Nous ne voyons aucun chemin vers notre code et soupçonnons quelque chose dans le runtime JavaScript de UIWebView qui déclenche le bogue mais qui n’est pas idéal.

8
msung

Nous avons résolu le problème en bloquant un fichier JavaScript qui était

  • intégré dans un iFrame
  • avait mis en place un rappel pour les événements onunload
  • essayé de faire des choses demande-y.

Nous ne pouvons plus non plus reproduire ce bogue à partir de iOS 11.4+.

0
msung

J'ai résolu le problème en désactivant le JIT dans JavaScriptCore (WebKit).

Je mets ceci dans mon AppDelegate:

setenv("JSC_useJIT", "false", 0);

J'espère que cela aidera.

Cordialement, Josh.

0
Joshua Brunhuber