##環境
- Swift4
- x-code9.4.1
- 対象はiOS9.0以上
##前提
- WKWebViewにcookieを保持したWebページを表示していること
- WKWebViewとWKWebsiteDataStoreを使用
- 調べ調べなんとかした結果の備忘録
##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以外のデータ一覧
.swift
/*! @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
##参考