Настройка прокси SOCKS5 для NWConnection в iOS 17+
Перед созданием NWConnection подключите iOS 17 SOCKSv5 ProxyConfiguration к NWParameters.PrivacyContext.
В 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 конфигурируют этих отдельных потребителей. Для WebSocket, построенного на NWConnection, приложение также должно предоставить соответствующие параметры протокола WebSocket.