iOS 17 以降では、Network.framework はプライバシーコンテキストを通じて SOCKSv5 プロキシを適用できます。接続を作成する前に、そのコンテキストをパラメータに接続します:

import Network

@available(iOS 17.0, *)
func makeConnection() -> NWConnection {
    let parameters = NWParameters.tls
    let context = NWParameters.PrivacyContext(description: "Service route")
    let endpoint = NWEndpoint.hostPort(
        host: "proxy.example", port: 1080)
    context.proxyConfigurations = [
        ProxyConfiguration(socksv5Proxy: endpoint)
    ]
    parameters.setPrivacyContext(context)
    return NWConnection(
        host: "service.example", port: 443, using: parameters)
}

この関数は開始されていない TLS 接続を返します。アプリケーションの状態処理をインストールし、目的のキューで開始してから、通常の送受信経路でアプリケーションプロトコルを交換します。

proxy.example:1080 は SOCKS リスナーです。許可された公共サービスの接続では、SOCKS5 プロキシ一覧がホストとポートの候補を提供します。service.example:443 が宛先のままです。プライバシーコンテキストは、そのコンテキストに関連付けられた接続にプロキシ構成を適用します。別のパラメータで無関係な接続を作成しても、この設定は継承されません。

これは Network.framework の接続インターフェースです。URLSession のプロキシ上書きや WKWebView のデータストア設定は、それらの別個の利用側を構成します。NWConnection 上に構築された WebSocket では、アプリケーションが適切な WebSocket プロトコルオプションも提供する必要があります。

関連記事