React Native iOS模拟器fetch报Network request failed实体机正常求助
问题排查与解决步骤
- 第一步:验证模拟器本身网络连通性
打开模拟器内置的Safari,直接访问你请求的HTTPS接口地址,若Safari无法正常加载返回内容,说明是模拟器本身的网络故障,直接重置模拟器即可:打开Xcode -> 顶部菜单Window -> Devices and Simulators -> 选中对应模拟器 -> 右键选择Erase All Content and Settings,重启模拟器后再测试。 - 第二步:修复Info.plist配置层级错误
你当前贴出的Info.plist配置存在层级错误,geoapify.com的配置节点被放在NSExceptionDomains节点外,会导致规则不生效,调整为如下正确格式即可:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>localhost</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> <key>geoapify.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
修改完成后按住Option点击Xcode顶部Product -> Clean Build Folder清理构建缓存,再重新编译运行App。
- 第三步:处理SSL证书信任问题
若前两步操作后问题仍存在,说明是模拟器对接口的SSL证书信任异常,按如下步骤操作:- 把接口对应的SSL根证书/中间证书下载到本地,直接拖到运行中的模拟器窗口,按照系统提示完成证书安装
- 打开模拟器的设置 -> 通用 -> 关于本机 -> 证书信任设置,找到刚安装的证书,开启完全信任开关,重启App即可
- 第四步:补充完整错误日志定位根因
修改你的业务代码,输出更完整的错误信息方便进一步定位:
var url = requestedURL; // its https fetch(url) .then((response) => { if(!response.ok) { console.log('响应状态码:', response.status, '响应状态信息:', response.statusText) } return response.json() }) .then((data) => this.setState({ coordinates: data.features[0].geometry.coordinates }) ) .catch((err) => { console.log('错误详情:', err) console.log('错误描述:', err.message) });
补充常见坑:如果你请求的是本地运行的后端服务,不要用
localhost作为地址,需要替换为你电脑的局域网IP,模拟器的localhost指向的是模拟器本身,而非宿主机的服务。
内容的提问来源于stack exchange,提问作者Kaukau
相关产品推荐
相关产品推荐

