Подписка на изменения конфигурации прокси в macOS
Следите за нужными ключами динамического хранилища SystemConfiguration и обновляйте политику прокси собственного транспорта, когда macOS сообщает об изменениях.
Транспорт, использующий снимок прокси только при запуске, может оставаться устаревшим после смены сети или местоположения. Для подписки macOS SystemConfiguration поддерживайте этот жизненный цикл явно:
- Создайте сеанс SCDynamicStore с функцией обратного вызова.
- Зарегистрируйте точные ключи или шаблоны с помощью
SCDynamicStoreSetNotificationKeys. Это отдельные массивы. Глобальный ключ прокси —State:/Network/Global/Proxies; добавляйте входные данные, специфичные для службы, только там, где транспорт их использует. - Организуйте доставку обратного вызова через
SCDynamicStoreSetDispatchQueueили подходящий источник run-loop. Одна регистрация имён не запускает обратный вызов. - При уведомлении перечитайте действующую конфигурацию и обновите последующую работу. Список изменённых ключей сам по себе не является полной новой политикой.
- При завершении отключите доставку пустой очередью перед освобождением собственных ресурсов. До этого держите хранилище и контекст обратного вызова живыми.
Заголовок Apple определяет пустой список изменённых ключей как перезапуск сервера динамического хранилища. В этом случае тоже обновите нужное состояние и откажитесь от предположений, основанных на прежнем содержимом.
Это публичный подход через API macOS. Заголовки Apple помечают соответствующие функции как закрытый SPI для iOS, поэтому та же подписка не является публичным интерфейсом приложений iOS.