You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac Catalyst开发中如何选择指定连接网络发起对外请求

Mac Catalyst 指定网络请求实现方案

Apple 原生提供了完整的 API 支持你的需求,核心基于系统的 Network 框架和 URLSession 相关能力实现,无需引入第三方依赖。

1. 已连接网络检测

使用 NWPathMonitor 可以枚举当前设备所有已激活的网络接口,支持区分 Wi-Fi、以太网、蜂窝网络、VPN 等不同接口类型,同时可以获取接口名称、IP 地址、路由可用性等参数。
示例代码如下:

import Network

// 初始化全局网络路径监控
let networkMonitor = NWPathMonitor()
networkMonitor.pathUpdateHandler = { currentPath in
    // 遍历所有可用的网络接口
    for interface in currentPath.availableInterfaces {
        print("接口名称:\(interface.name),接口类型:\(interface.type)")
        // interface.type 为枚举值,包含 wifi、cellular、wiredEthernet、loopback 等常见类型
    }
}
// 启动监控,指定回调队列
networkMonitor.start(queue: DispatchQueue(label: "network.monitor.queue"))

如果只需要监控特定类型的网络,也可以在初始化时指定类型:NWPathMonitor(requiredInterfaceType: .wiredEthernet)。

2. 强制请求走指定网络

根据你使用的网络请求工具,有两种成熟的实现方案:

  • 基于 URLSession 实现(适配绝大多数网络请求场景):
    macOS 12+/iOS 15+ 以上系统,URLSessionConfiguration 提供了 requiredInterface 属性,直接绑定你筛选出的目标网络接口后,该 URLSession 实例发起的所有请求都会强制走指定接口,不会走系统默认路由的其他网络。
    示例代码如下:
    // 此处的 targetInterface 是你通过 NWPathMonitor 筛选出的指定网络接口
    guard let targetInterface = networkMonitor.currentPath.availableInterfaces.first(where: { $0.type == .wiredEthernet }) else {
        return
    }
    let sessionConfig = URLSessionConfiguration.ephemeral
    sessionConfig.requiredInterface = targetInterface
    // 禁止自动使用其他可用接口 fallback
    sessionConfig.allowsConstrainedNetworkAccess = false
    sessionConfig.allowsExpensiveNetworkAccess = false
    
    let customSession = URLSession(configuration: sessionConfig)
    // 后续所有网络请求都使用该 customSession 实例即可,不要使用默认的 URLSession.shared
    
  • 基于 NWConnection 实现(适配自定义协议、低层级网络请求场景):
    初始化 NWConnection 时直接指定 requiredInterface 参数,即可强制该连接的所有流量走指定网络接口,兼容 macOS 10.15+/iOS 13+ 以上系统。

注意:如果需要全局限制所有网络请求的路由,务必不要使用系统提供的共享 URLSession.shared 实例,所有请求都走你自行创建的绑定了指定接口的 URLSession 实例,避免流量泄露到其他网络。

内容的提问来源于stack exchange,提问作者hgwhittle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:07