LoginSignup
22
12

More than 5 years have passed since last update.

【Swift】Cookieの情報をログ出力する

Posted at

環境

  • Swift4
  • x-code9.4.1
  • 対象はiOS9.0以上

前提

  • WKWebViewにcookieを保持したWebページを表示していること
  • WKWebViewWKWebsiteDataStoreを使用
  • 調べ調べなんとかした結果の備忘録

WKWebViewとWKWebsiteDataStore

以下、公式より抜粋。

※WKWebViewの注意点
iOS 8.0およびOS X 10.10以降では、WKWebViewを使用してWebコンテンツをアプリケーションに追加します。UIWebViewまたはWebViewは使用しないでください。

※WKWebsiteDataStore
オブジェクトが選択されたウェブサイトで使用される各種のデータを表します。データ型には、Cookie、ディスクとメモリのキャッシュ、WebSQL、IndexedDBデータベース、ローカルストレージなどの永続データが含まれます。

アプリに保存されているCookieの情報をログに出す

クッキー.swift
import WebKit

    /// 保存されているCookieの情報をログに出す
    ///
    /// - Parameters:
    ///   - webView: 表示先のWKWebView
    ///   - printDataTypes: 出力対象
    func printCookieName(webView: WKWebView, printDataTypes:Set<String>) {
        // dataStoreを取得 (WKWebsiteDataStoreはiOS 9.0以上対象)
        let dataStore = WKWebsiteDataStore.default()
        // データの取得
        dataStore.fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { (records:[WKWebsiteDataRecord]) in
            for record in records {
                for printDataType in printDataTypes {
                    if record.dataTypes.contains(printDataType) {
                        let cookieStore = webView.configuration.websiteDataStore.httpCookieStore
                        // 格納されているすべてのCookieを取得 
                        cookieStore.getAllCookies() { (cookies) in
                            for cookie in cookies {
                                print("cookie名:" + cookie.name)
                                print("cookieの値:" + cookie.value)
                                print(cookie)
                            }
                        }
                    }
                }
            }
        }
    }

ネストが深い・・・・・・( i _ i )

呼び出し.swift
printCookieName(webView: webView, printDataTypes: [WKWebsiteDataTypeCookies])

出力結果

出力結果.swift
cookie名c0
cookieの値:hogehohe%2BkumZG2hogehoge

<NSHTTPCookie
    version:1
    name:c0
    value:hogehohe%2BkumZG2hogehoge
    expiresDate:'2019-08-21 02:58:07 +0000'
    created:'2018-08-21 11:58:49 +0000'
    sessionOnly:FALSE
    domain:hogehoge
    partition:none
    path:/
    isSecure:FALSE
 path:"/" isSecure:FALSE>

一応、保持しているすべてのCookieをログに出せることは確認できました。
※値は一部書き換えてます。

cookie以外のデータ一覧

/*! @constant WKWebsiteDataTypeFetchCache On-disk Fetch caches. */
@available(iOS 11.3, *)
public let WKWebsiteDataTypeFetchCache: String

/*! @constant WKWebsiteDataTypeDiskCache On-disk caches. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeDiskCache: String

/*! @constant WKWebsiteDataTypeMemoryCache In-memory caches. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeMemoryCache: String

/*! @constant WKWebsiteDataTypeOfflineWebApplicationCache HTML offline web application caches. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeOfflineWebApplicationCache: String

/*! @constant WKWebsiteDataTypeCookies Cookies. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeCookies: String

/*! @constant WKWebsiteDataTypeSessionStorage HTML session storage. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeSessionStorage: String

/*! @constant WKWebsiteDataTypeLocalStorage HTML local storage. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeLocalStorage: String

/*! @constant WKWebsiteDataTypeWebSQLDatabases WebSQL databases. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeWebSQLDatabases: String

/*! @constant WKWebsiteDataTypeIndexedDBDatabases IndexedDB databases. */
@available(iOS 9.0, *)
public let WKWebsiteDataTypeIndexedDBDatabases: String

/*! @constant WKWebsiteDataTypeServiceWorkerRegistrations Service worker registrations. */
@available(iOS 11.3, *)
public let WKWebsiteDataTypeServiceWorkerRegistrations: String

参考

22
12
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
22
12