通过使用UIWebView(如Facebook Messenger)从应用程序打开official demo page,可以在iOS 9.0.x设备中重现崩溃
我在iOS UIWebView中使用基于此reference的YouTube iFrame播放器,但是,从9/2开始,它开始崩溃应用程序(仅限iOS 9.0.x),堆栈如下:
Crashed: JavaScriptCore::Marking
0 JavaScriptCore 0x1859f65b0 JSC::JSEnvironmentRecord::visitChildren(JSC::JSCell*, JSC::SlotVisitor&) + 224
1 JavaScriptCore 0x1859f65ec JSC::JSEnvironmentRecord::visitChildren(JSC::JSCell*, JSC::SlotVisitor&) + 284
2 JavaScriptCore 0x1855c34bc JSC::SlotVisitor::drain() + 300
3 JavaScriptCore 0x1855c446c JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 288
4 JavaScriptCore 0x1858e4bd0 JSC::GCThread::gcThreadMain() + 120
5 JavaScriptCore 0x1855bb4e4 WTF::threadEntryPoint(void*) + 212
6 JavaScriptCore 0x1855bb3f4 WTF::wtfThreadEntryPoint(void*) + 24
7 libsystem_pthread.dylib 0x199e87b3c _pthread_body + 156
8 libsystem_pthread.dylib 0x199e87aa0 _pthread_body + 154
9 libsystem_pthread.dylib 0x199e85030 thread_start + 4
由于它在带有官方演示页面的iOS 9.0.x设备中可以重现,我认为在9/2上YouTube iFrame播放器更改可能有问题。
有没有人对如何处理有任何建议?
答案 0 :(得分:0)
找到此related SO question,其中指出这些崩溃是bug in WebKit的结果。
同样基于此thread,如果您的应用程序随机崩溃,那么您需要分析您的代码。你可以在XCode上做到这一点。尝试在XCode中打开您的项目。在“产品”菜单中,您将找到“分析”选项(cmd + shift + B)。确保您已选择" iOS设备"在分析之前。
此answer也可能会有所帮助。
这种情况下的问题似乎是从一段代码中释放JSContext对象,而该代码段不是设置为运行JavaScript的所有者。 Xcode在静态分析器中标记它,一旦释放调用被删除,一切都很顺利。我有点犹豫不决,说这是肯定的问题,因为崩溃没有100%的时间发生,但考虑到改变之前/之后的测试似乎很可能。