iOS应用请求本地IP接口遇NSURLErrorDomain Code=-1009错误求助
排查思路与解决方案
问题核心
NSURLErrorDomain Code=-1009是系统判定网络不可用,但浏览器和Demo App能正常请求,说明问题不在网络本身或基础ATS配置,大概率是主应用的网络权限、请求逻辑或第三方框架导致的异常。
具体排查步骤
检查网络权限配置
打开手机设置里的主应用权限页,确认「无线局域网与蜂窝网络」是开启状态,别选成仅蜂窝或仅WLAN。另外iOS 14+访问本地网络需要弹窗授权,务必检查info.plist里是否添加了NSLocalNetworkUsageDescription字段,没加的话请求会静默失败,连授权弹窗都不会出现。核对ATS配置细节
别只说配了ATS,仔细检查:- 要么将
NSAllowsArbitraryLoads设为YES,要么针对192.168.1.1单独配置NSExceptionDomains,需包含NSIncludesSubdomains和NSAllowsLocalNetworking(iOS 10+针对本地网络的ATS例外配置)。 - 检查
info.plist的键名是否拼写错误(比如大小写错误),或者把布尔值写成了字符串(比如填"YES"而非YES)。
- 要么将
对比Demo与主应用的请求逻辑
- 主应用使用的网络库(AFNetworking、Alamofire或原生URLSession)有没有自定义的网络可达性检测逻辑?比如用了Reachability类,会不会误判本地WiFi的连通性(比如只认公网IP,忽略局域网)。
- 查看主应用的请求是否添加了特殊头信息、代理设置或证书校验逻辑,比如强制走全局代理,但本地热点未配置代理,直接导致请求拦截。
排查第三方框架与后台限制
- 主应用中是否集成了VPN、安全类SDK?这类框架可能修改网络路由,拦截本地网络请求。
- 如果开启了后台刷新权限,尝试关闭后再测试,系统对后台网络的限制可能导致请求失败。
系统层面重置排查
- 重置手机网络设置(设置→通用→传输或还原iPhone→还原网络设置),清除可能存在的网络配置缓存。
- 删除主应用后重新安装,避免旧配置残留引发异常。
日志与抓包补充
查看错误日志时,除了-1009代码,留意是否有SSL相关的附加错误提示。另外用Charles抓包确认:主应用到底有没有发起请求——如果连请求都没发,那肯定是权限或本地逻辑问题;如果发了但无响应,再排查服务器或路由问题。
内容的提问来源于stack exchange,提问作者Sulaiman Khan
相关产品推荐
相关产品推荐

