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

macOS端Swift跨平台网络请求失败求助(iOS端正常)

问题:macOS上共享Swift网络代码无法运行,iOS正常

我有一段在macOS与iOS间共享的Swift代码,MacBook和iPhone连接同一WiFi,但仅iOS设备上代码可正常运行。当前系统为macOS Sonoma和iOS 17,但我认为这并非问题根源。

报错信息

Connection 1: received failure notification
Connection 1: failed to connect 1:57, reason 18 446 744 073 709 551 615
Connection 1: encountered error(1:57)
Task <D8541ECD-3BFA-4225-902F-DE2DB77DC000>.<1> HTTP load failed, 0/0 bytes (error code: 18 446 744 073 709 550 611 [1:57])
Task <D8541ECD-3BFA-4225-902F-DE2DB77DC000>.<1> finished with error [18 446 744 073 709 550 611] Error Domain=NSURLErrorDomain Code=-1005 UserInfo={_kCFStreamErrorCodeKey=57, NSUnderlyingError=0x600003bf5740 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: en0[802.11], ipv4, dns, _kCFStreamErrorCodeKey=57, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=<private>, _NSURLErrorRelatedURLSessionTaskErrorKey=<private>, NSLocalizedDescription=<private>, NSErrorFailingURLStringKey=<private>, NSErrorFailingURLKey=<private>, _kCFStreamErrorDomainKey=1}

通过cURL执行相同网络请求可正常工作,说明服务端无问题,问题应出在macOS专属的Xcode设置中。

相关网络代码

func login(completion: @escaping (Result<String, Error>) -> Void) {
    let loginURLString = "\(baseURL)/Core/Default/Login"
    guard let loginURL = URL(string: loginURLString) else {
        completion(.failure(KayakoError.invalidURL))
        return
    }
    
    var request = URLRequest(url: loginURL)
    request.httpMethod = "POST"
    
    configureRequestHeaders(&request)
    
    let bodyData = "username=\(username)&password=\(password)".data(using: .utf8)
    request.httpBody = bodyData
    
    let task = session.dataTask(with: request) { (data, response, error) in
        if let error = error {
            completion(.failure(error))
            return
        }
        
        guard let httpResponse = response as? HTTPURLResponse else {
            completion(.failure(KayakoError.invalidResponse))
            return
        }
        
        if httpResponse.statusCode == 200 {
            if let data = data {
                let parser = XMLParser(data: data)
                let loginResponseParser = LoginResponseParser()
                parser.delegate = loginResponseParser
                
                if parser.parse() {
                    let sessionID = loginResponseParser.sessionID
                    completion(.success(sessionID ?? ""))
                } else {
                    completion(.failure(KayakoError.invalidData))
                }
            } else {
                completion(.failure(KayakoError.invalidData))
            }
        } else {
            completion(.failure(KayakoError.loginFailed))
        }
    }
    
    task.resume()
}

解决方案

1. 检查macOS应用网络权限

  • 打开系统设置 → 隐私与安全性 → 网络,确认你的应用已被勾选允许访问网络。
  • 若列表中无应用,重新构建运行一次,系统会弹出权限请求弹窗,选择允许。

2. 验证App Transport Security (ATS)配置

iOS和macOS共享ATS规则,但macOS可能存在默认行为差异:

  • 在Info.plist中添加目标域名的ATS例外(适用于HTTP或自签名HTTPS服务):
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>你的服务端域名</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>
    
  • 若使用HTTPS,优先确保证书被macOS信任,避免过度依赖ATS例外。

3. 检查URLSession配置差异

确认session对象的配置在macOS上无异常:

  • 避免设置不必要的代理或超时规则,示例默认配置:
    let config = URLSessionConfiguration.default
    config.connectionProxyDictionary = nil
    let session = URLSession(configuration: config)
    

4. 排查底层网络连通性

用nc命令测试macOS到服务端的TCP连接:

nc -zv 服务端IP 端口号

若连接失败,检查系统设置→网络→防火墙,确保允许应用出站连接。

5. 重置Xcode缓存

  • 关闭Xcode,删除DerivedData目录:
    rm -rf ~/Library/Developer/Xcode/DerivedData
    
  • 清理项目缓存:Xcode菜单→Product→Clean Build Folder

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:05:06