iOS 13下大响应触发NSURLErrorDomain -1103错误,Alamofire异常求助
这问题我之前帮朋友排查过类似的,咱们一步步拆解来看:
iOS 13下Alamofire触发-1103错误的解决思路
1. 先针对Alamofire的错误逻辑做特殊处理
Alamofire对系统NSURLError的拦截判定比原生NSURLSession严格得多,它会把NSURLErrorDomain Code=-1103直接包装成失败结果,但原生Session其实会忽略这个错误、只返回数据。你可以在请求回调里手动捕获这个错误码,跳过默认的错误处理流程:
AF.request(targetUrl).responseData { response in // 专门处理-1103错误 if let systemError = response.error as NSError?, systemError.domain == NSURLErrorDomain && systemError.code == -1103 { if let validData = response.data { // 这里走你的正常数据解析逻辑 handleResponseData(validData) } } else if response.error != nil { // 处理其他真实错误 handleRealError(response.error!) } else { // 无错误的正常流程 handleResponseData(response.data!) } }
2. 自定义Alamofire的Session配置,取消资源尺寸限制
iOS 13的默认URLSession配置可能有隐性的响应尺寸限制,而Alamofire的默认配置继承了这个限制。你可以手动创建Session时,修改resourceLimits来取消限制:
let customConfig = URLSessionConfiguration.default // 设置为0表示不限制响应尺寸 customConfig.resourceLimits.maximumResponseSize = 0 // 也可以根据需求设置具体数值,比如20*1024(20KB) // customConfig.resourceLimits.maximumResponseSize = 20 * 1024 let customSession = Session(configuration: customConfig) customSession.request(targetUrl).responseData { ... }
3. 排查响应数据的真实大小
有时候看似14KB的响应,可能因为gzip解压后体积变大,触发了系统的尺寸判定。你可以用抓包工具(比如Charles)确认实际返回的响应大小,或者尝试关闭Alamofire的自动解压,手动处理压缩数据:
let customConfig = URLSessionConfiguration.default // 告诉服务器不要返回压缩数据,或者后续手动解压 customConfig.httpAdditionalHeaders = ["Accept-Encoding": "identity"] let customSession = Session(configuration: customConfig) customSession.request(targetUrl).responseData { ... }
4. 升级Alamofire版本到适配iOS 13的稳定版
如果你的Alamofire版本比较旧,可能存在和iOS 13的兼容性bug。建议升级到最新的稳定版本,新版本通常会修复这类系统版本适配的错误处理逻辑。
内容的提问来源于stack exchange,提问作者Jibeex
相关产品推荐
相关产品推荐

