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

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

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

WKPreferences

- (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled;

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

2 ответов


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

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

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

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

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

  [_wkWebView.configuration.preferences _setOfflineApplicationCacheIsEnabled:YES];

он создаст ApplicationCache.db файл в каталоге кэша и Разрешить веб - приложение для работы в автономном режиме.

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

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, так и на устройствах под управлением iOS 10.