Обновление списка блокировщика содержимого расширения приложения Safari - PullRequest
0 голосов
/ 01 марта 2019

Как создать собственный блокировщик содержимого из расширения приложения Safari, как мне обновить статический список JSON после загрузки плагина?

Единственный способ, которым я сейчас вижу, - это развернуть совершенно новую версиюприложения, которое не будет обновляться автоматически для пользователей.

Можно ли обновить файл списка JSON для блокировщика контента с другого URL-адреса, не обновляя расширение приложения Safari через магазин Apple?

1 Ответ

0 голосов
/ 09 июля 2019

ДА возможно, вы можете обновить черный список JSON

Шаг 1:

Создать новый JSON для правил блокировки контента

Шаг 2: Сохраните файл JSON в общем контейнере

fileprivate func saveRuleFile(ruleList:[Rule]) {
        let encoder = JSONEncoder()
        if let encoded = try? encoder.encode(ruleList) {

            let sharedContainerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xxx.xxxx.xxx")
            print("sharedContainerURL = \(String(describing: sharedContainerURL))")

            if let json = String(data: encoded, encoding: .utf8) {
                print(json)
            }

            if let destinationURL = sharedContainerURL?.appendingPathComponent("Rules.json") {
                do {
                    try  encoded.write(to: destinationURL)
                } catch {
                    print (error)
                }
            }
        }
    }

Шаг 3: Вызовите этот метод, чтобы попросить блокировщик контента перезагрузить правила

SFContentBlockerManager.reloadContentBlocker(withIdentifier:"com.xxxx.xxx.xxxx", completionHandler: nil)

Шаг: 4 Считайте файл правил JSON из общего контейнера и передайте правила расширению блокировщика контента

func beginRequest(with context: NSExtensionContext) {
        let sharedContainerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.xxx.xxx.xxx")
        let sourceURL = sharedContainerURL?.appendingPathComponent("Rules.json")
        let ruleAttachment = NSItemProvider(contentsOf: sourceURL)
        let item = NSExtensionItem()
        item.attachments = ([ruleAttachment] as! [NSItemProvider])
        context.completeRequest(returningItems: [item], completionHandler: nil)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...