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

CFNetwork未知错误日志:iOS JSON下载函数异常排查

排查CFNetwork未知错误的分步方案

我来帮你一步步拆解这个问题,从代码和iOS网络配置两个核心方向入手:

1. 先完善错误日志,把“未知”变成“可知”

你的代码里对错误的处理太简略了,根本看不到CFNetwork错误的具体信息,先把所有可能的错误都打印出来:

func downloadJSON(completed: @escaping () -> ()) {
    guard let url = URL(string: "http://tourofhonor.com/BonusData.json") else {
        print("❌ 无效的URL地址")
        completed()
        return
    }
    
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        // 打印网络请求错误详情
        if let error = error {
            print("🔴 网络请求失败: \(error.localizedDescription)")
            print("🔍 CFNetwork错误详情: \(error)")
            completed()
            return
        }
        
        // 检查返回数据是否为空
        guard let data = data else {
            print("⚠️ 服务器未返回任何数据")
            completed()
            return
        }
        
        do {
            self.tohBonuses = try JSONDecoder().decode([jsonBonuses].self, from: data)
            DispatchQueue.main.async {
                completed()
            }
        } catch {
            // 打印JSON解码的具体错误
            print("🟡 JSON解码失败: \(error)")
        }
    }.resume()
}

修改后再运行,控制台会输出具体的错误码和描述,这是排查的核心第一步。

2. 最可能的原因:ATS拦截了HTTP请求

你用的是http协议,而iOS默认的App Transport Security(ATS)会阻止非HTTPS的网络请求,这大概率是CFNetwork错误的元凶。解决方法是在Info.plist里配置ATS例外:

  • 右键点击Info.plist → 选择Open As → Source Code
  • 添加以下推荐的特定域名配置(比全局关闭ATS更安全,适合上线):
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>tourofhonor.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

如果只是临时测试,也可以全局关闭ATS(不推荐用于上线版本):

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

3. 其他潜在问题排查

  • 检查设备/模拟器的网络连接:确保能正常访问这个URL(可以在Safari里打开http://tourofhonor.com/BonusData.json测试)
  • 确认jsonBonuses模型的结构和返回的JSON完全匹配:如果结构不匹配,解码错误也可能伴随一些网络日志干扰,打印解码错误后就能明确这一点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:38:28