LoginSignup
9
3

More than 5 years have passed since last update.

WKHTTPCookieStoreのgetAllCookiesのcompletionHandlerが呼ばれない

Last updated at Posted at 2019-05-15

概要

iOS11から実装された WKHTTPCookieStoregetAllCookiescompletionHandler
呼ばれなくなる不具合に気づいたのでメモ

WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in
  // 呼ばれない場合がある
}

WKWebViewConfigurationWKProcessPool を設定して WKWebView を表示し、
その後 WKWebViewaddSubview した UIView がなくなると
getAllCookiescompletionHandler が呼ばれなくなるようです

iOS12.1.2で確認しましたが、他のバージョンでも起きるようです(※ シミュレーターでは再現しませんでした)
https://stackoverflow.com/questions/55565188/wkhttpcookiestore-getallcookies-completionhandler-not-called-in-some-os-versions

原因

下記URLにも書かれていますが、 WkWebView が非表示状態になると、 WKProcessPool が待機状態になり、
HttpCookieStore へのアクセスがブロックされてしまう場合があるようです。
https://bugs.webkit.org/show_bug.cgi?id=188242

URLSessionshared では WKWebsiteDataStore.default() と同じ HttpCookieStore が参照されるため、WebViewのセッションを使ってAPI等にリクエストしている場合は注意が必要です

ちなみに WKProcessPool を使用して WKWebView を表示する前であれば、
getAllCookiescompletionHandler は正常に動作するようです。

対策

CGRect(x: 0, y: 0, width: 0, height: 0) でサイズ0のWebViewを作成し、 addSubview してひとまず回避。
WKWebViewUIScreen のどこかしらに描画されてさえいればいいようです。

参考

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3