Включить кеш приложений в WKWebView

Я знаю, что кеш офлайн-приложений не поддерживается в iOS WKWebView.

Это включено в Safari, поэтому я искал проект webkit для ответственного кода и нашел это

WKPreferences

- (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled; 

Кто-нибудь знаком с этим методом? возможно ли включить кеш приложения в iOS, обратившись к этим приватным методам? (Я не собираюсь отправлять приложение в Appstore)

Да, мы можем включить кеш App, обратившись к частному API

Создайте категорию для WKPreferences и добавьте следующую подпись метода.

 @interface WKPreferences (MyPreferences) - (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled; @end 

(Я попытался выполнить выбор: withObject: но это не сработало. Не знаю, почему)

После инициализации WKWebView включите appcache, вызвав вышеуказанный метод в следующем объекте

  [_wkWebView.configuration.preferences _setOfflineApplicationCacheIsEnabled:YES]; 

Он создаст файл ApplicationCache.db в каталоге Cache и позволит веб-приложению работать в автономном режиме.

Предупреждение:

2.5. Приложения, использующие непубличные API, будут отклонены

Согласно этому твиту от Apple, начиная с iOS 10, кэш приложений теперь поддерживается в WKWebView :

https://twitter.com/andersca/status/743259582252879872

… как этот отчет об ошибке WebKit:

https://bugs.webkit.org/show_bug.cgi?id=152490

Я тестировал это в WKWebView с помощью этого сайта:

http://webdbg.com/test/appcache/

и может подтвердить, что он работает как ожидалось как в iOS Simulator, так и на устройствах под управлением iOS 10.

  • Swift iOS Cache WKWebView для офлайн-просмотра
  • Утечка памяти в WkWebView
  • Недопустимый сертификат WKWebView https.
  • WKWebView: попытка синхронного запроса javascript из основного потока
  • После деинсталляции webView видео, встроенное в webView, все еще играет - iOS
  • Swift 3 WKWebView 'URLRequest'; вы хотели использовать «как» для явного преобразования? (BUG)
  • WKProcessPool можно хранить на постоянной основе с помощью NSUserDefaults или что-то еще?
  • Предотвращение открытия универсальных ссылок в `WKWebView` /` UIWebView`
  • JS, вызывающий функцию в Swift
  • WKWebView не загружает изображения и CSS с помощью loadHTMLString (_, baseURL :)
  • Почему WKWebView не отображает видео? - Swift 3
  • Давайте будем гением компьютера.