#ios #swift #safari-content-blocker
Вопрос:
Привет и спасибо, что уделили мне время.
Я разрабатываю приложение для iOS, одной из функций которого являются блокировщики контента. Для этого у нас есть список предопределенных правил, которые пользователь может включить/отключить по своему желанию, а также возможность вводить пользовательские правила.
Всякий раз, когда происходит изменение (включение, отключение, добавление или удаление), я получаю все правила и воссоздаю файлы JSON, по одному файлу на каждые 150 000 правил (у нас более одного блокатора содержимого). Однако большинству пользователей нужен только один файл JSON.
Проблема
В большинстве случаев это работает хорошо. Блокировщик содержимого перезагружается, и я могу проверить в Safari, что он работает.
Но иногда при вызове SFContentBlockerManager.reloadContentBlocker(withIdentifier:completionHandler:)
он возвращает следующую ошибку:
Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.SafariServices.ContentBlockerLoader" UserInfo={NSDebugDescription=connection to service named com.apple.SafariServices.ContentBlockerLoader}
Локализованное описание: Couldn’t communicate with a helper application
.
Не могу найти причину, по которой это происходит. В некоторых предыдущих исследованиях говорилось, что это может быть связано с группами приложений, но я проверил их, и они установлены правильно (даже потому, что перезагрузка блокировщиков работает большую часть времени).
Я вижу ряд таких ошибок (добавлен журнал) в производстве.
Спасибо за помощь.
Обновить
Не уверен, но я думаю, что это может быть связано с памятью в расширении. Когда размер файла JSON составляет около 12 МБ, я чаще получаю ошибки.
Теперь, если я ограничусь 10 МБ, я больше не получу ошибок (пока).
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.