This question is relevant to an app:
- That provides an extension as its sole function.
- Relies on remote data fetched from a server.
- Does not offer anything useful in UI to keep users regularly opening it.
A perfect example for such an app would be Safari content-blocker extension apps (iOS 9+), but I believe it is not limited to these apps.
The problem with the existing content blockers is that extension data (blocking rules) is only refreshed from a main app (e.g. once is opened by the user). Since the extension is enabled once at install time, users have no intension at reopening the app on a regular basis. Thus the local data become stale or out-of-date - like blocking rules are getting old, aggressive advertisers adapt, and your extension suddenly does not block. I think it is kind of ridiculous to tell the user to keep the app running just to have a chance to load new rules.
So is there any legitimate way for keeping data up-to-date for UI-less extension-based apps:
Things I read online about do not seem to work really:
- background fetch - requires an app to run at least in background mode
- silent push notifications (with content-available=1) - seems to require an app to run at least in background mode. Can be relaunched by iOS from terminated state unless the user explicitly swiped it out from the task list.
- PushKit (does work and can relaunch killed apps) - only suitable for VoIP apps