Перезагрузка блокировщиков контента iOS — Не удалось связаться со вспомогательным приложением

#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. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.