Search code examples
iosobjective-cwebkitwkwebviewapplication-cache

Enable Application cache in WKWebView


I am aware that offline application cache is not supported in iOS WKWebView.

This is enabled in Safari, so I searched webkit project for the responsible code & found this

WKPreferences

- (void)_setOfflineApplicationCacheIsEnabled:(BOOL)offlineApplicationCacheIsEnabled;

Anyone familiar with this method? is it possible to enable app cache in iOS by accessing this private methods? (I am not going to ship the app to Appstore)


Solution

  • Update 2022

    According to one of the comments below, this hack doesn't work anymore.


    Yes, we can enable App cache by accessing private API

    Create a category for WKPreferences and add to following method signature.

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

    (I tried performSelector:withObject: but it didn't work. No idea why)

    After initializing the WKWebView, enable the appcache by calling the above method in the following object

      [_wkWebView.configuration.preferences _setOfflineApplicationCacheIsEnabled:YES];
    

    It will create the ApplicationCache.db file in the Cache directory and allow the web app to work offline.

    Warning :

    2.5. Apps that use non-public APIs will be rejected