はじめに
objective-cからSwiftへの移行で、cookieの削除につまづいたのでメモしておきます。
尚、知識が浅いため誤った理解を記述している可能性がございます。。。。
ご了承ください。
開発環境
・xcode9.4
・Swift4.0
objective-cからSwiftに移行してみた
objective-cのもともとのコード
移行前.m
// パスを取得
NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;
// ファイル名の作成
NSString *cookiesPath = [libraryPath stringByAppendingPathComponent:@"Cookies"];
NSString *webKitPath = [libraryPath stringByAppendingPathComponent:@"WebKit"];
// パスを指定してファイルの削除
[[NSFileManager defaultManager] removeItemAtPath:cookiesPath error:nil];
[[NSFileManager defaultManager] removeItemAtPath:webKitPath error:nil];
// クッキーを取得?(おまじない的な?)
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
[cookieStorage.cookies enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) {
[cookieStorage deleteCookie:cookie];
}];
Swiftへ移行してみた
before:修正前
修正前.swift
// パスを取得
let libraryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first as String?
// ファイル名の作成
let cookiesPath = libraryPath?.appending("Cookies")
let webKitPath = libraryPath?.appending("WebKit")
// ファイル,ディレクトリの削除(現状はこの辺適当です。。。。間違ってる説ある。)
do {
try FileManager.default.removeItem(atPath: cookiesPath!)
try FileManager.default.removeItem(atPath: webKitPath!)
} catch {
// エラー処理
}
// クッキーを取得?(おまじない的な?)
let cookieStorage :HTTPCookieStorage = HTTPCookieStorage.shared
// Cookieを削除
for cookie:HTTPCookie in [cookieStorage.cookies] { // 😭😭😭😭😭
cookieStorage.deleteCookie(cookie)
}
😭😭😭😭😭の部分で、Ambiguous reference to member 'cookies' のエラー。。。
これを解消しても、いろんなエラーが出てきて苦戦しておりました。
(そもそもなんもわかってないレベルに書き方がやばそう。。。)
after:修正後
修正後.swift
// パスを取得
let libraryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first as String?
// ファイル名の作成
let cookiesPath = libraryPath?.appending("Cookies")
let webKitPath = libraryPath?.appending("WebKit")
// ファイル,ディレクトリの削除(現状はこの辺適当です。。。。間違ってる説ある。)
do {
try FileManager.default.removeItem(atPath: cookiesPath!)
try FileManager.default.removeItem(atPath: webKitPath!)
} catch {
// エラー処理
}
let cookieStorage :HTTPCookieStorage = HTTPCookieStorage.shared
// Cookieを削除
if let cookies = cookieStorage.cookies { // この辺を修正☺️☺️☺️☺️☺️
for cookie in cookies {
cookieStorage.deleteCookie(cookie)
}
}
これで一応エラーは消えました。
buildした時も大丈夫そうだったので、一旦おけですかね。。。。
cookieStorage.cookiesをfor文にそのまま突っ込んではダメということでしょうか。。。?
解決はできた?もののモヤモヤ。
理解が追いつき次第追記しようと思います。
参考
ちなみに、このページに記載されていたfor文を参考にしました。
参考:http://furodrive.com/2015/10/set_cookie/
尚、Cookieの削除方法は下記のページを参考にさせていただきました(objective-c側)
UIWebViewのCookieを削除する(Googleアカウントでログインなどで前の状態が保持されてしまう問題)