なんかOSのアップデートしたら、Safariが再現性アリで落ちるようになって使い物にならないので調べてたメモ。
事象
いくつかのサイトで、リンクのクリックイベント奪って勝手に新規ウインドウで開く系のWeb広告が開こうとするタイミングで落ちるっぽい。
素直に、やめてくれ。
コンソールのログ
デフォルト 02:22:59.965799+0900 Safari *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Returned WKWebView was not created with the given configuration.'
*** First throw call stack:
(
0 CoreFoundation 0x0000000185952ca0 __exceptionPreprocess + 176
1 libobjc.A.dylib 0x0000000185416b90 objc_exception_throw + 88
2 CoreFoundation 0x0000000185952b90 +[NSException exceptionWithName:reason:userInfo:] + 0
3 WebKit 0x00000001ac6ca4b0 _ZN6WebKit10UIDelegate8UIClient13createNewPageERNS_12WebPageProxyEON3WTF3RefIN3API17PageConfigurationENS4_12RawPtrTraitsIS7_EENS4_21DefaultRefDerefTraitsIS7_EEEEONS5_INS6_16NavigationActionENS8_I 4 WebKit 0x00000001ac77d89c _ZN6WebKit26SOAuthorizationCoordinator12tryAuthorizeEON3WTF3RefIN3API17PageConfigurationENS1_12RawPtrTraitsIS4_EENS1_21DefaultRefDerefTraitsIS4_EEEEONS2_INS3_16NavigationActionENS5_ISB_EENS7_ISB_ 5 WebKit <…>
エラー 02:22:59.965828+0900 Safari An uncaught exception was raised
エラー 02:22:59.965867+0900 Safari Returned WKWebView was not created with the given configuration.
エラー 02:22:59.965920+0900 Safari (
0 CoreFoundation 0x0000000185952ca0 __exceptionPreprocess + 176
1 libobjc.A.dylib 0x0000000185416b90 objc_exception_throw + 88
2 CoreFoundation 0x0000000185952b90 +[NSException exceptionWithName:reason:userInfo:] + 0
3 WebKit 0x00000001ac6ca4b0 _ZN6WebKit10UIDelegate8UIClient13createNewPageERNS_12WebPageProxyEON3WTF3RefIN3API17PageConfigurationENS4_12RawPtrTraitsIS7_EENS4_21DefaultRefDerefTraitsIS7_EEEEONS5_INS6_16NavigationActionENS8_ISE_EENSA_ISE_EEEEONS4_17CompletionHandlerIFvONS4_6RefPtrIS2_NS8_IS2_EENSA_IS2_EEEEEEE + 1276
4 WebKit 0x00000001ac77d89c _ZN6WebKit26SOAuthorizationCoordinator12tryAuthorizeEON3WTF3RefIN3API17PageConfigurationENS1_12RawPtrTraitsIS4_EENS1_21DefaultRefDerefTraitsIS4_EEEEONS2_INS3_16NavigationActionENS5_ISB_EENS7_ISB_EEEERNS_12WebPageProxyEONS1_17CompletionHandlerIFvONS1_6RefPtrISG_NS5_ISG_EENS7_ISG_EEEEEEEONS1_8FunctionIFvSF_SQ_EEE + 432
5 WebKit 0x00000001ac9f44f4 _ZN6WebKit12WebPageProxy13createNewPageERN3IPC10ConnectionEON7WebCore14WindowFeaturesEONS_20NavigationActionDataEON3WTF17CompletionHandlerIFvNSt3__18optionalINS9_23ObjectIdentifierGenericINS4_18PageIdentifierTypeENS9_38ObjectIdentifierMainThreadAccessTraitsIyEEyEEEENSC_INS_25WebPageCreationParametersEEEEEE + 2192
6 WebKit 0x00000001ac512f00 _ZN6WebKit12WebPageProxy21didReceiveSyncMessageERN3IPC10ConnectionERNS1_7DecoderERN3WTF9UniqueRefINS1_7EncoderEEE + 7832
7 WebKit 0x00000001ad024874 _ZN3IPC18MessageReceiverMap19dispatchSyncMessageERNS_10ConnectionERNS_7DecoderERN3WTF9UniqueRefINS_7EncoderEEE + 312
8 WebKit 0x00000001aca7217c _ZN6WebKit15WebProcessProxy19dispatchSyncMessageERN3IPC10ConnectionERNS1_7DecoderERN3WTF9UniqueRefINS1_7EncoderEEE + 48
9 WebKit 0x00000001ac5468cc _ZN6WebKit15WebProcessProxy21didReceiveSyncMessageERN3IPC10ConnectionERNS1_7DecoderERN3WTF9UniqueRefINS1_7EncoderEEE + 404
10 WebKit 0x00000001ad01e0e4 _ZN3IPC10Connection19dispatchSyncMessageERNS_7DecoderE + 172
11 WebKit 0x00000001ad01e5b0 _ZN3IPC10Connection15dispatchMessageEN3WTF9UniqueRefINS_7DecoderEEE + 584
12 WebKit 0x00000001ad0197c4 _ZN3IPC10Connection16SyncMessageState28ConnectionAndIncomingMessage8dispatchEv + 92
13 WebKit 0x00000001ad020620 _ZN3WTF6Detail15CallableWrapperIZN3IPC10Connection16SyncMessageState22processIncomingMessageERS3_RNS_9UniqueRefINS2_7DecoderEEEE3$_0vJEE4callEv + 776
14 JavaScriptCore 0x00000001a46a024c _ZN3WTF7RunLoop11performWorkEv + 524
15 JavaScriptCore 0x00000001a46a10e8 _ZN3WTF7RunLoop11performWorkEPv + 36
16 CoreFoundation 0x00000001858e1cd4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
17 CoreFoundation 0x00000001858e1c68 __CFRunLoopDoSource0 + 172
18 CoreFoundation 0x00000001858e19d4 __CFRunLoopDoSources0 + 232
19 CoreFoundation 0x00000001858e0628 __CFRunLoopRun + 840
20 CoreFoundation 0x00000001858dfc58 CFRunLoopRunSpecific + 572
21 HIToolbox 0x000000019137427c RunCurrentEventLoopInMode + 324
22 HIToolbox 0x00000001913774e8 ReceiveNextEventCommon + 676
23 HIToolbox 0x0000000191502484 _BlockUntilNextEventMatchingListInModeWithFilter + 76
24 AppKit 0x0000000189807ab4 _DPSNextEvent + 684
25 AppKit 0x000000018a1a65b0 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
26 Safari 0x00000001b85b485c -[BrowserApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 228
27 AppKit 0x00000001897fac64 -[NSApplication run] + 480
28 AppKit 0x00000001897d135c NSApplicationMain + 880
29 Safari 0x00000001b8973fa8 SafariMain + 468
30 dyld 0x0000000185456b98 start + 6076
)
失敗 02:22:59.967941+0900 Safari FAULT: NSInternalInconsistencyException: Returned WKWebView was not created with the given configuration.; (user info absent)
うん、WKWebKitが例外出してるのはわかった。
で、なんでそんなのが出るのよ・・・
試したこと
- キャッシュをクリアする
- 効果なし
- pluginとかを無効にしてみる
- 効果なし
- 再起動
- 効果なし
コンソール眺めてると
エラー 02:22:59.963198+0900 Safari IIOImageSource:513: *** ERROR: can't open '/Users/xxx/Library/Containers/com.apple.Safari/Data/Library/Safari/StartPage/defaultBackground' (fileExists == false)
これが気になる。
多分関係ないけど、眺めに行くと、この辺のフォルダにSafariのキャッシュだの設定だのが置いてあるみたい。
ふーむ、この辺の設定ファイル、多分、秘伝のタレになってそうよねぇ。
このホームフォルダ、何年・何台に渡って、転送や上書きアップデートで使い続けてるかわからんもんな。
- とりあえず、
/Library/Containers/com.apple.Safari
をゴミ箱に突っ込む- Safariを起動してみる
- 効いた!落ちなくなった!
- Safariを起動してみる
落ちる原因の特定
これで終わりにしてもよかったけど、設定が飛ぶのが嫌だったのでもう少し追求。
ゴミ箱に突っ込んだ元々の設定を、新しく自動生成された設定に上書きしていって、動かなくなるとこを探していく。
すると、なんか、、、
だいぶ色々いらなそうなファイルがあることがわかる。
com.apple.Safari.RSS.plist
とかさ。
懐かしいよね。
最終更新日、2011年だったよ。
com.apple.Safari.plist
の中身を特定していく
どうやらcom.apple.Safari.plist
を差し替えると動かなくなるのがわかったので、次はこれの中身。
バイナリ形式のplistで、QuickLookで中身は覗けるが、このままじゃ比較・編集しづらい、、、
ので、VisualStudio CodeにBinaryEditorとかいうエクステンションぶち込んでいく。
流石に項目数が多すぎるので、1つ1つ見ていくのは早々に諦め、
適当な範囲で項目をざっくり消して、Safari起動&再現確認。を繰り返す。
再現してれば、そこは関係ない。
再現しなくなったら、消した範囲の中の項目に問題なのがいる。
したら、<key>RecentWebSearches</key>
を消すと再現しなくなることがわかった。
よし、消そう。
終わり。
詳しい中身の確認まではせんかったけど、Recentとか書いてあるし、なんかMigrationミスってるだろ。
おまけ
この辺のって、古のSafariのエンジニアが残した系のアレだよね。
UserDefaults、どんどん肥大化していってしまう問題、純正アプリでもあるんだねぇ、的なやつ。
<key>NSWindow Frame ActivityViewer</key>
<string>160 165 832 679 0 0 1680 1028 </string>
<key>NSWindow Frame Authentication Panel</key>
<string>1084 859 416 271 0 0 2560 1417 </string>
<key>NSWindow Frame BrowserWindowFrame</key>
<string>1783 358 1466 1399 0 0 3360 2215 </string>
<key>NSWindow Frame Downloads</key>
<string>1247 282 400 746 0 0 1680 1028 </string>
<key>NSWindow Frame Extension Builder</key>
<string>520 289 717 523 0 0 2560 1417 </string>
<key>NSWindow Frame GoToSheet</key>
<string>1621 1317 460 292 0 0 3360 2215 </string>
<key>NSWindow Frame HTMLSource</key>
<string>673 145 880 705 0 0 1680 1028 </string>
<key>NSWindow Frame NSColorPanel</key>
<string>30 83 224 275 0 0 2560 1417 </string>
<key>NSWindow Frame NSNavGotoPanel</key>
<string>555 798 432 134 0 0 1680 1028 </string>
<key>NSWindow Frame NSNavPanelAutosaveName</key>
<string>1451 1229 799 441 0 0 3360 2215 </string>
<key>NSWindow Frame NSSpellCheckerSubstitutionsPanel2</key>
<string>952 678 440 137 0 0 3360 2215 </string>
<key>NSWindow Frame NewBookmarksSheet</key>
<string>1190 1276 462 209 0 0 3360 2215 </string>
<key>NSWindow Frame OtherUserAgentSheet</key>
<string>2060 747 370 191 0 0 3360 2215 </string>
<key>NSWindow Frame Preferences</key>
<string>991 1144 858 414 0 0 3360 2215 </string>
<key>NSWindow Frame PrivacyReportWindow</key>
<string>450 1142 656 838 0 0 3008 1980 </string>
<key>NSWindow Frame SourceWindowFrame</key>
<string>673 145 880 705 0 0 1680 1028 </string>
<key>NSWindow Frame WBBWebGLPolicies</key>
<string>3042 185 499 472 2560 -1120 1440 2537 </string>
<key>NSWindow Frame WBBlockedPlugins</key>
<string>2913 262 752 522 2560 -1120 1440 2537 </string>
<key>NSWindow Frame WBCookies</key>
<string>287 386 1167 452 0 0 1680 1028 </string>
<key>NSWindow Frame WBCookiesAndOtherWebsiteData</key>
<string>1101 961 625 448 0 0 3360 2215 </string>
<key>NSWindow Frame WBDatabases</key>
<string>1008 512 424 337 0 0 1680 1028 </string>
<key>NSWindow Frame Web Inspector 2</key>
<string>658 0 1675 667 0 0 2560 1418 </string>