Su iOS 17 e versioni successive, Network.framework può applicare un proxy SOCKSv5 tramite un contesto di privacy. Collega quel contesto ai parametri prima di creare la connessione:

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)
}

La funzione restituisce una connessione TLS non avviata. Installa la gestione dello stato dell’app, avviala sulla coda prevista, quindi scambia il protocollo dell’app tramite il suo normale percorso di invio e ricezione.

proxy.example:1080 è il listener SOCKS. Per le connessioni ai servizi pubblici consentite, l’elenco di proxy SOCKS5 fornisce candidati host e porta. service.example:443 resta la destinazione. Il contesto di privacy applica le sue configurazioni proxy alle connessioni associate a quel contesto; creare una connessione non correlata con altri parametri non eredita questa configurazione.

Questa è l’interfaccia di connessione di Network.framework. Una sostituzione del proxy di URLSession o un’impostazione dell’archivio dati di WKWebView configurano quei consumatori separati. Per un WebSocket basato su NWConnection, l’app deve anche fornire le opzioni del protocollo WebSocket appropriate.

Articoli correlati