- read this first: https://www.webkit.org/blog/3476/content-blockers-first-look/
- start by adding a new extension target to your iOS app of type “content blocker”
- launch the app using the main target’s scheme + a call to
SFContentBlockerManager.reloadContentBlockerWithIdentifier()
with the extension’s id inapplication:didFinishLaunchingWithOptions:
to auto-reload the blocker in development mode - if you don’t call
reloadContentBlockerWithIdentifier()
then you need to switch the blocker off and on again in the Safari settings (stop the app in Xcode if the switch is not moving) - use inspector from desktop Safari to inspect the Safari in the simulator in order to find specific things to block
- things like periods in the
url-filter
regexp need to be escaped with double backslashes, e.g.facebook\\.net
- if you use
if-domain
, it needs to be an array, even for one element - domain
foo.com
might not matchwww.foo.com
even though I think it’s supposed to (UPDATE: They've changed it in one of the betas, nowfoo.com
only matchesfoo.com
and to match all subdomains you need to use*foo.com
- thanks @CraftyDeano!) - remember that extensions are separate from the main app - use app groups and shared app group containers to share data between the app and the extension
- json file can be updated silently or even generated on the fly, just return whatever you want to in the
beginRequestWithExtensionContext:
callback - look for critical errors in
~/Library/Logs/CoreSimulator/*/system.log
Last active
April 19, 2023 13:51
-
-
Save mackuba/e81558926e9a09f06e58 to your computer and use it in GitHub Desktop.
Tips for writing iOS content blockers - HelsinkiOS
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have read your tips on the content blocker extension, which are great. I have been told that I have to call
SFContentBlockerManager.reloadContentBlockerWithIdentifier()
in my main app to reload the content blocker. But my problem is i dont know HOW to call it correctly. I tried using a simple button but that didnt work. Can you help me out?