En iOS 17 y versiones posteriores, Network.framework puede aplicar un proxy SOCKSv5 mediante un contexto de privacidad. Adjunta ese contexto a los parámetros antes de crear la conexión:

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 función devuelve una conexión TLS sin iniciar. Instala el manejo de estado de la aplicación, iníciala en la cola prevista y luego intercambia el protocolo de la aplicación por su ruta normal de envío y recepción.

proxy.example:1080 es el receptor SOCKS. Para las conexiones públicas permitidas, la lista de proxies SOCKS5 proporciona candidatos de host y puerto. service.example:443 sigue siendo el destino. El contexto de privacidad aplica sus configuraciones de proxy a las conexiones asociadas a ese contexto; crear una conexión no relacionada con otros parámetros no hereda esta configuración.

Esta es la interfaz de conexión de Network.framework. Una sustitución de proxy de URLSession o un ajuste del almacén de datos de WKWebView configuran esos consumidores separados. Para un WebSocket construido sobre NWConnection, la aplicación también debe proporcionar las opciones de protocolo WebSocket adecuadas.

Artículos relacionados