在 iOS 17+ 上配置 NWConnection 的 SOCKS5 代理
在创建 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 数据存储设置配置那些独立的消费者。对于基于 NWConnection 构建的 WebSocket,应用还必须提供适当的 WebSocket 协议选项。