Cordova+WKWebViewで日本語入力するとWKWebViewがcrashする
Cordova でiOS向けのハイブリッドアプリを開発しています。
標準のUIWebViewだと動作が遅いため、WKWebViewを利用しています。
現状、Cordovaは、まだWKWebViewに正式対応していないため、開発中のwkwebview-engineを利用してます。
https://github.com/apache/cordova-plugins/tree/master/wkwebview-engine
問題
このwkwebview-engineは開発バージョンですが、アプリは問題なく動作しています。ただ、input要素(type=text)や、textareaに日本語を入力しようとすると、WKWebViewがcrashして落ちてしまいます。
Cordova+WKWebViewの環境は以下のようにして作成してます。
$ cordova create hello com.example.hello "HelloWorld"
$ cd hello
$ cordova platform add ios@4.0.x --usegit
$ cordova plugin add https://github.com/apache/cordova-plugins.git#master:wkwebview-engine
www/index.html にinput type="text" の要素を追加して実機で動作させ、input要素に対して日本語入力をするとWKWebViewがcrashします。
これまでに調査した内容
WKWebView単体で利用した場合、日本語入力はできました。
Cordovaと併用してWKWebViewを利用した場合に発生する問題のようです。
なお、エミュレータでは問題なく入力できました。実機で動作させた場合のみ発生します。
環境
私の環境は以下の通りです。
iPad Air2 (iOS 8.4.1)
Cordova 5.2.0
cordova-ios: 4.0.x
クラッシュログ
Incident Identifier: DE387028-4C20-4E1E-B3E2-3B90B6160C8B
CrashReporter Key: 8efab59a8f19fbe4dc7c57c0483ef6ceba677767
Hardware Model: iPad5,4
Process: com.apple.WebKit.WebContent [1506]
Path: /System/Library/Frameworks/WebKit.framework/XPCServices/com.apple.WebKit.WebContent.xpc/com.apple.WebKit.WebContent
Identifier: com.apple.WebKit.WebContent
Version: 8600.1.4.17.9 (8600)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
Date/Time: 2015-09-10 14:42:20.820 +0900
Launch Time: 2015-09-10 14:42:01.103 +0900
OS Version: iOS 8.4.1 (12H321)
Report Version: 105
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000018
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 WebCore 0x00000001954fa9bc WebCore::VisibleSelection::VisibleSelection(WebCore::Range const*, WebCore::EAffinity, bool) + 40
1 WebKit 0x000000018b3e0670 WebKit::WebPage::setCompositionAsync(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&) + 136
2 WebKit 0x000000018b3e0670 WebKit::WebPage::setCompositionAsync(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&) + 136
3 WebKit 0x000000018b3ef2cc void IPC::callMemberFunctionImpl<WebKit::WebPage, void (WebKit::WebPage::*)(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&), std::__1::tuple<WTF::String, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange, WebKit::EditingRange>, 0ul, 1ul, 2ul, 3ul>(WebKit::WebPage*, void (WebKit::WebPage::*)(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&), std::__1::tuple<WTF::String, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange, WebKit::EditingRange>&&, std::index_sequence<0ul, 1ul, 2ul, 3ul>) + 80
4 WebKit 0x000000018b3ee4d0 void IPC::handleMessage<Messages::WebPage::SetCompositionAsync, WebKit::WebPage, void (WebKit::WebPage::*)(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&)>(IPC::MessageDecoder&, WebKit::WebPage*, void (WebKit::WebPage::*)(WTF::String const&, WTF::Vector<WebCore::CompositionUnderline, 0ul, WTF::CrashOnOverflow>, WebKit::EditingRange const&, WebKit::EditingRange const&)) + 80
5 WebKit 0x000000018b3ec1fc WebKit::WebPage::didReceiveWebPageMessage(IPC::Connection*, IPC::MessageDecoder&) + 11936
6 WebKit 0x000000018b31ad28 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection*, IPC::MessageDecoder&) + 116
7 WebKit 0x000000018b428790 WebKit::WebProcess::didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) + 36
8 WebKit 0x000000018b2a56d8 IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::MessageDecoder, std::__1::default_delete<IPC::MessageDecoder> >) + 124
9 WebKit 0x000000018b2a7684 IPC::Connection::dispatchOneMessage() + 116
10 JavaScriptCore 0x0000000187702ab8 WTF::RunLoop::performWork() + 440
11 JavaScriptCore 0x00000001877030f0 WTF::RunLoop::performWork(void*) + 36
12 CoreFoundation 0x0000000185da7f88 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 20
13 CoreFoundation 0x0000000185da722c __CFRunLoopDoSources0 + 260
14 CoreFoundation 0x0000000185da52dc __CFRunLoopRun + 708
15 CoreFoundation 0x0000000185cd0f70 CFRunLoopRunSpecific + 392
16 Foundation 0x0000000186c094c4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 312
17 Foundation 0x0000000186c6380c -[NSRunLoop(NSRunLoop) run] + 92
18 libxpc.dylib 0x0000000198250180 _xpc_objc_main + 664
19 libxpc.dylib 0x0000000198251eec xpc_main + 196
20 com.apple.WebKit.WebContent 0x000000010006ba7c 0x100068000 + 14972
21 libdyld.dylib 0x000000019806aa04 start + 0
この問題の回避方法があれば、教えていただけますでしょうか?