Сбой ядра Javascript при использовании проигрывателя YouTube iframe в UIWebView в iOS 11.3

У нас есть приложение iOS с UIWebView, которое загружает проигрыватель YouTube iframe для воспроизведения видео на YouTube. После выпуска iOS 11.3 мы обнаружили множество сбоев ядра javascript. В Crashlytics Fabric трассировка сбоя выглядит следующим образом.

Crashed: WebThread
0  JavaScriptCore                 0x18aa48298 JSC::JSLock::DropAllLocks::DropAllLocks(JSC::VM&) + 176
1  JavaScriptCore                 0x18aa4826c JSC::JSLock::DropAllLocks::DropAllLocks(JSC::VM&) + 132
2  WebCore                        0x18b78b794 SendDelegateMessage(NSInvocation*) + 360
3  WebKitLegacy                   0x18cea7c68 CallDelegate(void (*)(), WebView*, objc_object*, objc_selector*, objc_object*, objc_object*, objc_object*) + 144
4  WebKitLegacy                   0x18ce1b8d0 WebFrameLoaderClient::dispatchDidFailLoading(WebCore::DocumentLoader*, unsigned long, WebCore::ResourceError const&) + 276
5  WebCore                        0x18b7ba660 WebCore::ResourceLoadNotifier::didFailToLoad(WebCore::ResourceLoader*, WebCore::ResourceError const&) + 128
6  WebCore                        0x18b7ba118 WebCore::ResourceLoader::cancel(WebCore::ResourceError const&) + 464
7  WebCore                        0x18b7b9ea4 WebCore::ResourceLoader::cancel() + 64
8  WebCore                        0x18c6bbe90 WebCore::CachedResource::removeClient(WebCore::CachedResourceClient&) + 264
9  WebCore                        0x18c680558 WebCore::MediaResource::~MediaResource() + 64
10 WebCore                        0x18c680608 WebCore::MediaResource::~MediaResource() + 12
11 libobjc.A.dylib                0x1827daef4 object_cxxDestructFromClass(objc_object*, objc_class*) + 148
12 libobjc.A.dylib                0x1827e8990 objc_destructInstance + 68
13 libobjc.A.dylib                0x1827e89f8 object_dispose + 16
14 WebCore                        0x18cbff8f0 -[WebCoreNSURLSessionDataTask dealloc] + 320
15 CoreFoundation                 0x1834f24e4 -[__NSDictionaryM dealloc] + 164
16 AVFoundation                   0x189130cf8 -[AVAssetCustomURLBridgeForNSURLSession dealloc] + 68
17 AVFoundation                   0x18917ce54 -[AVAssetResourceLoader dealloc] + 356
18 AVFoundation                   0x189060460 -[AVURLAsset dealloc] + 248
19 AVFoundation                   0x189097c34 -[AVPlayerItemTrack dealloc] + 192
20 WebCore                        0x18b8a9fac WebCore::AVTrackPrivateAVFObjCImpl::~AVTrackPrivateAVFObjCImpl() + 92
21 WebCore                        0x18cbf09dc WebCore::VideoTrackPrivateAVFObjC::~VideoTrackPrivateAVFObjC() + 48
22 WebCore                        0x18cbefc7c WebCore::VideoTrack::~VideoTrack() + 96
23 WebCore                        0x18b982390 WebCore::TrackEvent::~TrackEvent() + 72
24 JavaScriptCore                 0x18aa26228 void JSC::MarkedBlock::Handle::specializedSweep<true, (JSC::MarkedBlock::Handle::EmptyMode)1, (JSC::MarkedBlock::Handle::SweepMode)1, (JSC::MarkedBlock::Handle::SweepDestructionMode)1, (JSC::MarkedBlock::Handle::ScribbleMode)0, (JSC::MarkedBlock::Handle::NewlyAllocatedMode)1, (JSC::MarkedBlock::Handle::MarksMode)1, JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::MarkedBlock::Handle::EmptyMode, JSC::MarkedBlock::Handle::SweepMode, JSC::MarkedBlock::Handle::SweepDestructionMode, JSC::MarkedBlock::Handle::ScribbleMode, JSC::MarkedBlock::Handle::NewlyAllocatedMode, JSC::MarkedBlock::Handle::MarksMode, JSC::JSDestructibleObjectDestroyFunc const&) + 212
25 JavaScriptCore                 0x18aa24950 void JSC::MarkedBlock::Handle::finishSweepKnowingHeapCellType<JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::JSDestructibleObjectDestroyFunc const&)::'lambda'()::operator()() const + 408
26 JavaScriptCore                 0x18aa2444c void JSC::MarkedBlock::Handle::finishSweepKnowingHeapCellType<JSC::JSDestructibleObjectDestroyFunc>(JSC::FreeList*, JSC::JSDestructibleObjectDestroyFunc const&) + 320
27 JavaScriptCore                 0x18aa24300 JSC::JSDestructibleObjectHeapCellType::finishSweep(JSC::MarkedBlock::Handle&, JSC::FreeList*) + 32
28 JavaScriptCore                 0x18a7ac538 JSC::MarkedBlock::Handle::sweep(JSC::FreeList*) + 372
29 JavaScriptCore                 0x18a7aa6fc JSC::LocalAllocator::tryAllocateIn(JSC::MarkedBlock::Handle*) + 40
30 JavaScriptCore                 0x18a7aa608 JSC::LocalAllocator::tryAllocateWithoutCollecting() + 48
31 JavaScriptCore                 0x18a7aa4c8 JSC::LocalAllocator::allocateSlowCase(JSC::GCDeferralContext*, JSC::AllocationFailureMode) + 292
32 JavaScriptCore                 0x18a78f4b8 JSC::CompleteSubspace::allocateNonVirtual(JSC::VM&, unsigned long, JSC::GCDeferralContext*, JSC::AllocationFailureMode) + 216
33 WebCore                        0x18c171e3c std::__1::enable_if<std::is_same<WebCore::Event, WebCore::Event>::value, WebCore::JSDOMWrapperConverterTraits<WebCore::Event>::WrapperClass*>::type WebCore::createWrapper<WebCore::Event, WebCore::Event>(WebCore::JSDOMGlobalObject*, WTF::Ref<WebCore::Event, WTF::DumbPtrTraits<WebCore::Event> >&&) + 216
34 WebCore                        0x18c170be0 WebCore::toJSNewlyCreated(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::Ref<WebCore::Event, WTF::DumbPtrTraits<WebCore::Event> >&&) + 100
35 WebCore                        0x18c170444 WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext&, WebCore::Event&) + 872
36 WebCore                        0x18c3acbe0 WebCore::EventTarget::fireEventListeners(WebCore::Event&, WTF::Vector<WTF::RefPtr<WebCore::RegisteredEventListener, WTF::DumbPtrTraits<WebCore::RegisteredEventListener> >, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc>) + 760
37 WebCore                        0x18c3a8798 WebCore::EventTarget::fireEventListeners(WebCore::Event&) + 596
38 WebCore                        0x18c3a8524 WebCore::EventContext::handleLocalEvents(WebCore::Event&) const + 120
39 WebCore                        0x18c3a9a24 WebCore::dispatchEventInDOM(WebCore::Event&, WebCore::EventPath const&) + 164
40 WebCore                        0x18c3a96e8 WebCore::EventDispatcher::dispatchEvent(WebCore::Node&, WebCore::Event&) + 700
41 WebCore                        0x18b7cce50 WebCore::HTMLImageLoader::dispatchLoadEvent() + 248
42 WebCore                        0x18b7ccd1c WebCore::ImageLoader::dispatchPendingEvent(WebCore::EventSender<WebCore::ImageLoader>*) + 144
43 WebCore                        0x18b7ccb94 WebCore::EventSender<WebCore::ImageLoader>::dispatchPendingEvents() + 128
44 WebCore                        0x18b743ff0 WebCore::ThreadTimers::sharedTimerFiredInternal() + 352
45 WebCore                        0x18b743e7c WebCore::timerFired(__CFRunLoopTimer*, void*) + 28
46 CoreFoundation                 0x1835cbaa8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
47 CoreFoundation                 0x1835cb76c __CFRunLoopDoTimer + 864
48 CoreFoundation                 0x1835cb010 __CFRunLoopDoTimers + 248
49 CoreFoundation                 0x1835c8b60 __CFRunLoopRun + 2168
50 CoreFoundation                 0x1834e8da8 CFRunLoopRunSpecific + 552
51 WebCore                        0x18b775dcc RunWebThread(void*) + 592
52 libsystem_pthread.dylib        0x183249220 _pthread_body + 272
53 libsystem_pthread.dylib        0x183249110 _pthread_body + 290
54 libsystem_pthread.dylib        0x183247b10 thread_start + 4## Heading ##

Любые идеи? Это проблема с плеером YouTube iframe или с UIWebView?

Спасибо.


person Roy Chou    schedule 12.04.2018    source источник
comment
Не уверен, связано это или нет, но Apple рекомендует использовать WKWebView вместо UIWebView для iOS8.0+.   -  person Malik    schedule 12.04.2018
comment
@Malik, спасибо за ваш совет, но для некоторых технических проблем мы должны использовать UIWebView   -  person Roy Chou    schedule 13.04.2018
comment
Та же проблема с моим приложением. Это родное приложение Obj-C, которое имеет встроенный WebView и показывает рекламу в этом webView (мы уверены, что сбой происходит только при показе рекламы). Затронуло только iOS 11. У нас ежедневно происходят тысячи сбоев с одной и той же ошибкой WebCore JSC::JSLock::DropAllLocks::DropAllLocks. Ищем какие-то зацепки, пока ничего...   -  person Mike Keskinov    schedule 03.09.2018
comment
кто-нибудь, кто решил это?   -  person Ankit Kumar Gupta    schedule 08.01.2019