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

iOS设备上UI测试目标请求本地URL失败,求可行解决方案

设备UI测试本地网络URL请求失败的解决办法

在设备上运行UI测试时,使用URLSession.shared.dataTask发起本地网络URL请求会失败,报错信息如下:

HelloWorldUITests-Runner[20156:4946160] Task <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1> finished with error [-1003] Error Domain=NSURLErrorDomain Code=-1003 "A server with the specified hostname could not be found." UserInfo={_kCFStreamErrorCodeKey=-72000, NSUnderlyingError=0x28224def0 {Error Domain=kCFErrorDomainCFNetwork Code=-1003 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: utun5, ipv4, _kCFStreamErrorCodeKey=-72000, _kCFStreamErrorDomainKey=10}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(    "LocalDataTask <7634F9E1-915D-400B-9B68-4A768D58A4DE>.<1>"), NSLocalizedDescription=A server with the specified hostname could not be found., NSErrorFailingURLStringKey=http://redacted.local/redacted, NSErrorFailingURLKey=http://redacted.local/redacted, _kCFStreamErrorDomainKey=10}

以下场景下URL请求可成功:

  • UI测试目标在设备上请求外网URL
  • UI测试目标在模拟器上请求本地URL
  • App目标在设备上请求本地URL(需点击权限弹窗的「允许」,点击「不允许」则出现上述相同错误)

问题本质是UI测试运行器需要获得与App授权后相同的本地网络权限,当前环境为Xcode 14.0.1、iOS 15.6.1,解决办法如下:

1. 为UI测试Target配置本地网络权限相关Info.plist项

打开UI测试Target的Info.plist文件,添加以下配置:

  • NSLocalNetworkUsageDescription:键值为权限申请描述(例如「测试需要访问本地网络资源」),用于向系统申请本地网络权限。
  • NSBonjourServices:若本地请求依赖Bonjour服务,添加该数组键,填入对应服务类型(如_http._tcp.、_https._tcp.),帮助系统识别本地网络访问需求。
  • NSAppTransportSecurity > NSAllowsLocalNetworking:在NSAppTransportSecurity字典下添加该键,值设为YES,确保ATS允许本地网络请求。

2. 在UI测试代码中自动处理权限弹窗

首次运行UI测试时,系统会弹出本地网络权限申请弹窗,可在测试的setUp方法中添加监听自动允许:

override func setUp() {
    super.setUp()
    let permissionMonitor = addUIInterruptionMonitor(withDescription: "Local Network Permission Alert") { alert in
        if let allowButton = alert.buttons["允许"].firstMatch {
            allowButton.tap()
            return true
        }
        return false
    }
    // 触发弹窗后需触发一次交互让监听生效
    app.tap()
    removeUIInterruptionMonitor(permissionMonitor)
}

3. 手动授予UI测试Runner权限

若上述方法无效,可直接在设备中手动开启权限:

  1. 打开设备「设置」→「隐私与安全性」→「本地网络」
  2. 找到名称为[你的App名称]UITests-Runner的条目
  3. 开启其本地网络权限开关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:30:43