Обновление списка блокировщиков содержимого расширений приложений Safari
Как создать собственный блокировщик содержимого из расширения приложения Safari, как обновить статический список JSON после загрузки плагина?
Единственный способ увидеть это сейчас - развернуть совершенно новую версию приложения, которая не будет автоматически обновляться для пользователей.
Можно ли обновить файл списка заблокированных файлов JSON для блокировщика контента с другого URL-адреса, не обновляя расширение приложения Safari через магазин Apple?
0 ответов
ДА, возможно, вы можете обновить черный список 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)
}