Swift开发macOS工具测试URL遇域名解析错误求排查方案
首先明确:仅在Xcode中运行开发工具应用不是导致该错误的原因,Xcode调试的macOS应用完全具备正常发起网络请求的能力,问题出在其他配置或环境上。以下是具体排查思路:
检查DNS解析是否正常
打开终端执行nslookup www.google.com或ping www.google.com,如果终端也无法解析到IP地址,说明是系统DNS配置问题。可以尝试将Mac的DNS服务器改为公共DNS(如8.8.8.8、1.1.1.1)后重试。若终端能正常解析但app不行,继续排查其他项。确认应用沙箱权限
在Xcode的项目配置中,进入Signing & Capabilities标签页,检查是否勾选了**Outgoing Connections (Client)**权限。macOS沙箱默认会阻止应用发起网络请求,必须手动开启该权限才能让URLSession正常工作。验证ATS配置的正确性
检查Info.plist中的NSAppTransportSecurity配置是否为根层级key,且格式无错误。建议直接使用Xcode的可视化Info.plist编辑器添加配置,避免手写XML时出现嵌套错误。正确的ATS配置结构应为:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>排除代理/VPN干扰
暂时关闭系统代理、VPN或翻墙工具,然后重新运行测试代码。部分代理工具可能会拦截macOS应用的网络请求,导致DNS解析失败。也可以尝试创建不带代理的URLSession配置:func testGetUrlRequest() { let config = URLSessionConfiguration.default config.connectionProxyDictionary = [:] // 清空代理设置 let session = URLSession(configuration: config) guard let url = URL(string: "https://www.google.com/") else { return } let task = session.dataTask(with: url) { data, response, error in if let error = error { print("Error: \(error)") return } guard let data = data else { return } print("Response: \(String(data: data, encoding: .utf8)!)") } task.resume() }测试基础网络连通性
用Safari或其他浏览器打开https://www.google.com,确认网络连接正常。有时WiFi显示已连接但实际无网络访问权限,也会触发该错误。临时用同步请求排查
为排除异步任务的潜在问题,可临时使用同步请求测试(仅用于排查,生产环境不建议):func testSyncUrlRequest() { guard let url = URL(string: "https://www.google.com/") else { return } do { let data = try Data(contentsOf: url) print("Response: \(String(data: data, encoding: .utf8)!)") } catch { print("Error: \(error)") } }
内容的提问来源于stack exchange,提问作者corleyq

