引言
在iOS开发中,一般都会使用 AFNetworking 来封装自己的网络库,但对于一些 SDK 提供者来说,使用 NSURLSession 就足够了,还可以避免依赖冲突。最近在迭代过程中发现提供的 SDK 经常请求失败,其报错信息为 nsposixerrordomain code=28 no space left on device。
定位
从字面上看,no space left on device 应该是磁盘空间不足,但经过查看,设备的空间非常充裕。而且相应的请求只是普通的 get 请求,携带的数据是很小的。查阅了相关的文档,获取到的信息也很有限。所以就只能根据测试提供的场景进行重现,因为是集成到使用方的 APP 中,无法通过代码调试来定位。但是这个报错事属于网络库抛出的,所以通过控制台日志应该是能看到相关信息的。通过对控制台日志进行分析,发现出现异常时,使用方 APP 会爆发式的调用一个接口,频率达到每秒几百次。经过 Demo 验证,证实原因确实如此。
从系统分布上看,目前这个问题会出现在 iOS 14 版本中,可能与 iOS 网络底层库的逻辑有关。