Qiitaに書こうかと思ったんですが、完全に理解できていない情報が多いため、ログとして残します。
Cookie周りが非常に厄介
UIWebViewとUIWebViewはCookieやSessionが同期されます。
iOS11以降において、WKWebViewとWKWebViewも同期されます(?)
iOS10以下において、WKWebViewとWKWebViewは同期されません。
iOS11以降においても、UIWebViewとWKWebViewは同期されません。
同期するためにおそらくこちらの方法を使うと思いますが未検証です。
同期されるのかされないのか問題は未だ非常に曖昧です。
同期される条件やタイミングなど。
参考
WKProcessPoolが違ってもWKWebView同士のcookieを同期されていた - しめ鯖日記
バージョンアップでセッションが切れる
当然、UIWebViewをWKWebViewに移行すると、Sessionが切れるため対応が必要です。
対応方法は未検証。
iOS10以下ではCookieの取り出しが困難
これは調べると結構でてきます。ただ取り出し方はこれだというサンプルコードがありません。javascriptを使い強制的に取るしか無いようです。
Cookieの設定タイミングが妙
webページ読み込み終了した後Cookieを取ろうとして取れないことがありました。UIWebViewとタイミングが違う可能性があります。要検証。
Cookieの削除が厄介
普通に消えないようです。
ここが非常に詳しい。
認証関係で少しハマる
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void)
こちらを使用する場合、UIWebViewのときとは処理の方法が少し変わります。
特に何もしない場合は
completionHandler(.performDefaultHandling)
を呼んでやります。呼ばないと落ちます(やめて!)
WKWebView操作に関するキーワード
WKNavigationDelegate ほとんどこれです
NSKeyValueObserving 上とこの2つがメインです
NSURLConnectionDelegate Auth関係で使う場合があります
WKHTTPCookieStoreObserver(これは動くのか不明、私が未検証なのではなく公式的に曖昧)
罠だらけ!
WebViewアプリはiOS13,14対応で一回血反吐吐くかもしれませんねこれ。
何故こんなに厄介なのか?
おそらくですが、UIWebViewと、WKWebView(iOS10まで)と、WKWebView(iOS11から)の情報が混ざってるからです。
追記:2019/11/26
メモ:WKWebViewの特徴
・Cookieをセットしてcompletionが呼ばれてもセットされていない
・例えWKWebViewから該当のCookieを取得できてもセットされていない
・WKWebView1に反映したのに、別のWKWebView2に反映される
・アプリ削除して再インストールしてもCookieが消えていないことがある(大抵消えます)