Configurar el proxy SOCKS5 de NWConnection en iOS 17+
Adjunta un ProxyConfiguration SOCKSv5 de iOS 17 a NWParameters.PrivacyContext antes de crear una NWConnection.
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.