para limpiar cache borrar app aplicaciones ios ios8 wkwebview

limpiar - borrar cache iphone ios 10



¿Cómo eliminar el caché en WKWebview? (9)

Algo similar para iOS 9.0 y versiones posteriores:

let store: WKWebsiteDataStore = WKWebsiteDataStore.default() let dataTypes: Set<String> = WKWebsiteDataStore.allWebsiteDataTypes() store.fetchDataRecords(ofTypes: dataTypes, completionHandler: { (records: [WKWebsiteDataRecord]) in store.removeData(ofTypes: dataTypes, for: records, completionHandler: { // do your thing here }) })

¿ WKWebview trabajó con WKWebview e intentó borrar el caché? Si es así, ¿cómo hacerlo? algun ejemplo

PS: Normal NSURLCache no funciona.


En iOS 9

//// Optional data NSSet *websiteDataTypes = [NSSet setWithArray:@[ WKWebsiteDataTypeDiskCache, //WKWebsiteDataTypeOfflineWebApplicationCache, WKWebsiteDataTypeMemoryCache, //WKWebsiteDataTypeLocalStorage, //WKWebsiteDataTypeCookies, //WKWebsiteDataTypeSessionStorage, //WKWebsiteDataTypeIndexedDBDatabases, //WKWebsiteDataTypeWebSQLDatabases, //WKWebsiteDataTypeFetchCache, //(iOS 11.3, *) //WKWebsiteDataTypeServiceWorkerRegistrations, //(iOS 11.3, *) ]]; //// All kinds of data //NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; //// Date from NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; //// Execute [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ // Done }];


Esto funciona para mi

if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDate(timeIntervalSince1970: 0) WKWebsiteDataStore.defaultDataStore().removeDataOfTypes(websiteDataTypes as! Set<String>, modifiedSince: date, completionHandler:{ }) } else { NSURLCache.sharedURLCache().removeAllCachedResponses() }


Me toma unas horas, ¡pero esto me funciona! Después de loadRequest, hago una recargaFromOrigin! ¡Así que fuerzo el caché vacío! [WKWebView loadRequest: request]; [WKWebView reloadFromOrigin];


No puede eliminar cachés solo con NSURLCache. Después de mucho cortar e intentar, pude borrar los cachés siguiendo estos pasos (a partir de iOS 8.1.1):

  1. Use NSURLCache para eliminar cachés de la misma manera que solía hacer en UIWebView. Si usa WKProccessPool, reinícielo.
  2. Eliminar el directorio de Caches en la Library .
  3. Borrar todos los WKWebViews

La próxima vez que cree WKWebView, se borrarán los cachés.

ShingoFukuyama/WKWebViewTips


Pude resolver este problema haciendo que mi WKWebView evalúe window.location.reload. Tengo un reconocedor de gestos de toques en la vista web y cada vez que detecta un doble toque con 2 toques, ejecuto lo siguiente:

webView.evaluateJavaScript("window.location.reload(true)", completionHandler: nil);

Espero que esto ayude.


Swift 3.x versión de la publicación de @ Esqarrouth

func clearCache() { if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDate(timeIntervalSince1970: 0) WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set<String>, modifiedSince: date as Date, completionHandler:{ }) } else { var libraryPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory, FileManager.SearchPathDomainMask.userDomainMask, false).first! libraryPath += "/Cookies" do { try FileManager.default.removeItem(atPath: libraryPath) } catch { print("error") } URLCache.shared.removeAllCachedResponses() } }


Trabajó
Swift 3. Versión.
Para la versión anterior Swift

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 } } }


Versión rápida:

if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDate(timeIntervalSince1970: 0) WKWebsiteDataStore.defaultDataStore().removeDataOfTypes(websiteDataTypes as! Set<String>, modifiedSince: date, completionHandler:{ }) } else { var libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, false).first! libraryPath += "/Cookies" do { try NSFileManager.defaultManager().removeItemAtPath(libraryPath) } catch { print("error") } NSURLCache.sharedURLCache().removeAllCachedResponses() }

Versión Swift3:

if #available(iOS 9.0, *) { let websiteDataTypes = NSSet(array: [WKWebsiteDataTypeDiskCache, WKWebsiteDataTypeMemoryCache]) let date = NSDate(timeIntervalSince1970: 0) WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes as! Set<String>, modifiedSince: date as Date, completionHandler:{ }) } else { var libraryPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.libraryDirectory, FileManager.SearchPathDomainMask.userDomainMask, false).first! libraryPath += "/Cookies" do { try FileManager.default.removeItem(atPath: libraryPath) } catch { print("error") } URLCache.shared.removeAllCachedResponses() }