Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reloading Content Blockers in iOS

I have heard that iOS has support for content blockers, and that all blocking is done by a file called blockerList.json that resides in the App Bundle. While I know that SFContentBlockerManager.reloadContentBlockerWithIdentifier() will reload the data in blockerList.json. However, I don't see any use in this; the blockerList.json is part of the main bundle and can't be modified. Thus, is there any way that the blockerList.json can be modified (or the extension can point to another file, be deleted and recreated, not use JSON, etc.)?

like image 633
saagarjha Avatar asked Aug 22 '15 00:08

saagarjha


2 Answers

You don't have to use blockerList.json from the bundle as your JSON source. There are a couple different things you can do to dynamically change the content blocker.

  1. You could have the extension download a new JSON file from a server and update the blocker when triggered by the app
  2. Put the app and content blocker extension in the same app group so data can be passed between the two and then do one of the following:
    • Have the app create/modify a JSON file in the shared group directory that will be read by the extension
    • Have the app write data to the shared group user defaults and then have the extension create a JSON file for it to load
like image 192
user3060016 Avatar answered Oct 02 '22 23:10

user3060016


Yes i have done this by reading all blocking rules from mainbundle json file and created a json file(i.e. SharedJsonFile.json) in App Group identifier container. Then i wrote all rules to SharedJsonFile.json.

    [[NSFileManager defaultManager] 
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER] 
                   URLByAppendingPathComponent:@"SharedJsonFile.json"]

So whenever i want to make modifications and i update SharedJsonFile.json and then reload contentblocker. To read the json i have used this URL path in extension's beginRequestWithExtensionContext method -

NSURL *jsonPath = [[NSFileManager defaultManager] 
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER]
URLByAppendingPathComponent:@"SharedJsonFile.json"]; 
like image 24
Sansnagar Avatar answered Oct 03 '22 00:10

Sansnagar