No iOS 17 e posteriores, o Network.framework pode aplicar um proxy SOCKSv5 por meio de um contexto de privacidade. Anexe esse contexto aos parâmetros antes de criar a conexão:

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

A função retorna uma conexão TLS não iniciada. Instale o tratamento de estado do aplicativo, inicie-o na fila pretendida e troque o protocolo do aplicativo pelo seu caminho normal de envio e recebimento.

proxy.example:1080 é o ouvinte SOCKS. Para conexões públicas permitidas, a lista de proxies SOCKS5 fornece candidatos de host e porta. service.example:443 continua sendo o destino. O contexto de privacidade aplica suas configurações de proxy às conexões associadas a esse contexto; criar uma conexão não relacionada com outros parâmetros não herda essa configuração.

Esta é a interface de conexão do Network.framework. Uma substituição de proxy do URLSession ou uma configuração de armazenamento de dados do WKWebView configuram esses consumidores separados. Para um WebSocket construído sobre NWConnection, o aplicativo também deve fornecer as opções de protocolo WebSocket apropriadas.

Artigos relacionados