У меня была такая же ситуация. Ответ на это немного сложно, так что несите меня. Вы не можете записать файл в пакет i.e blockerList.json
не подлежит записи. Вот то, что вам нужно сделать,
- Включить App группы из
TARGETS
->YOUR MAIN APP
->Capabilities
->App Groups
. И добавьте уникальный идентификатор для групп приложений. Сделайте то же самое с расширением. (Используйте тот же идентификатор, что и имя группы, которое вы ввели для основного приложения)
- Создайте файл в Контейнерной директории.
- Напишите правила (json) в этот файл.
- Обновить расширение, как только вы написали правила.
- Чтение правил из каталога контейнеров в расширении блока содержимого.
Из основного приложения создать файл и записать правила JSon в этот файл как:
let jsonData = try! JSONSerialization.data(withJSONObject: webFilters, options: JSONSerialization.WritingOptions.prettyPrinted)
//Convert back to string. Usually only do this for debugging
if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
let file = "conbo.json"
if let dir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "YOUR_GROUP_IDENTIFIER") {
let path = dir.appendingPathComponent(file)
do {
try JSONString.write(to: path, atomically: false, encoding: String.Encoding.utf8)
let id = "YOUR_CONTENT_BLOCKER_BUNDLE_IDENTIFIER"
SFContentBlockerManager.reloadContentBlocker(withIdentifier: id) {error in
guard error == nil else {
print(error ?? "Error")
return
}
print("Reloaded")
}
}
catch {
}
}
}
Теперь в расширение читать файл из контейнера, как:
class ContentBlockerRequestHandler: NSObject, NSExtensionRequestHandling {
func beginRequest(with context: NSExtensionContext) {
let file = "conbo.json"
if let dir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "YOUR_APP_GROUP_IDENTIFIER") {
let path = dir.appendingPathComponent(file)
do {
do {
let attachment = NSItemProvider(contentsOf: path)!
let item = NSExtensionItem()
item.attachments = [attachment]
context.completeRequest(returningItems: [item], completionHandler: nil)
}
}
}
}
}
эй Дэвид, даже у меня есть это аналогичное требование и искал душу. Вам удалось это сделать? –