起動時にのみプロキシのスナップショットを使うトランスポートは、ネットワークや場所の変更後に古いままになることがあります。macOS SystemConfigurationの購読では、このライフサイクルを明示的に保ちます。

  1. コールバック付きのSCDynamicStoreセッションを作成します。
  2. SCDynamicStoreSetNotificationKeysで正確なキーまたはパターンを登録します。これらは別々の配列です。グローバルなプロキシキーはState:/Network/Global/Proxiesです。サービス固有の入力は、トランスポートがそれを使う場所にだけ追加します。
  3. SCDynamicStoreSetDispatchQueueまたは適切なrun-loopソースを通じてコールバック配信を設定します。名前を登録するだけではコールバックは実行されません。
  4. 通知を受けたら、有効な設定を読み直し、後続の処理を更新します。変更されたキーの一覧それ自体は完全な新しいポリシーではありません。
  5. 終了時は、所有リソースを解放する前にヌルキューで配信を無効にします。それまではストアとコールバックのコンテキストを生かしておきます。

Appleのヘッダーは、変更キー一覧が空であることを動的ストアサーバーの再起動と定義しています。その場合も関連する状態を更新し、以前の内容に基づく前提を捨ててください。

これは公開macOS APIのアプローチです。Appleのヘッダーは対応する関数をiOS向けの非公開SPIとしているため、同じ購読は公開iOSアプリケーションインターフェースではありません。

関連記事