swift -> WebView 兼容 ios8 清除缓存 方法

也可以直接删除document 下的cache 文件夹

http://mft.iteye.com/admin/blogs/2394856

import Foundation
import WebKit

func removeWebData() {

    if #available(iOS 9.0, *) {

        let websiteDataTypes = WKWebsiteDataStore.allWebsiteDataTypes()
        let date = NSDate(timeIntervalSince1970: 0)

        WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: date as Date, completionHandler: {
            #if DEBUG

                print("remove all data in iOS9 later")

            #endif
        })

    }else {

        // Remove the basic cache.
        URLCache.shared.removeAllCachedResponses()

        // Delete system cookie store in the app
        let storage = HTTPCookieStorage.shared
        if let cookies = storage.cookies {
            for cookie in cookies {
                storage.deleteCookie(cookie)
            }
        }


        do {
            // folder 를 삭제하는 대신 contents 를 삭제하는 이유?
            // MainVC 가 호출되면 cache, cookie가 발생하므로 로딩시 확인된 cache, cookie 폴더의
            // contents 에 대해서만 삭제 진행.

            // Clear web cache
            try deleteLibraryFolderContents(folder: "Caches")

            // Remove all cookies stored by the site. This includes localStorage, sessionStorage, and WebSQL/IndexedDB.
            try deleteLibraryFolderContents(folder: "Cookies")

            // Removes all app cache storage.
            try deleteLibraryFolder(folder: "WebKit")

        } catch {
            #if DEBUG

                print("Delete library folders error in iOS9 below")

            #endif

        }
    }
}

/**
 Delete folder in library

 - parameter folder: a folder you want to delete

 - throws: throws an error
 */
func deleteLibraryFolder(folder: String) throws {
    let manager = FileManager.default
    let library = manager.urls(for: .libraryDirectory, in: .userDomainMask).first!
    let dir = library.appendingPathComponent(folder)
    try manager.removeItem(at: dir)
}

/**
 Delete contents in library folder

 - parameter folder: target folder

 - throws: throws an error
 */
private func deleteLibraryFolderContents(folder: String) throws {
    let manager = FileManager.default
    let library = manager.urls(for: FileManager.SearchPathDirectory.libraryDirectory, in: .userDomainMask)[0]
    let dir = library.appendingPathComponent(folder)
    let contents = try manager.contentsOfDirectory(atPath: dir.path)
    for content in contents {
        do {
            try manager.removeItem(at: dir.appendingPathComponent(content))
        } catch where ((error as NSError).userInfo[NSUnderlyingErrorKey] as? NSError)?.code == Int(EPERM) {
            // "EPERM: operation is not permitted". We ignore this.
            #if DEBUG

                print("Couldn't delete some library contents.")

            #endif
        }
    }
}

猜你喜欢

转载自mft.iteye.com/blog/2381013
今日推荐