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

iOS端Flutter应用使用移动数据时触发SocketException域名解析错误

iOS Flutter应用移动数据下SocketException(errno=8)解决方法

核心原因与修复方案

1. 补全iOS蜂窝网络权限与ATS配置

iOS应用默认不会自动获得蜂窝网络访问权限,且ATS(App Transport Security)会限制非HTTPS请求,需要修改ios/Runner/Info.plist:

<!-- 添加蜂窝数据权限说明 -->
<key>NSCellularDataUsageDescription</key>
<string>应用需要使用蜂窝网络连接互联网</string>

<!-- 配置ATS,若仅需访问HTTPS域名可替换为NSExceptionDomains -->
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
  • NSCellularDataUsageDescription是iOS 10+强制要求的,必须向用户说明蜂窝数据用途,否则应用无法获取蜂窝网络权限。
  • 若你的请求全是HTTPS,可更严谨地配置NSExceptionDomains指定允许的域名,避免全局关闭ATS。

2. 替换更可靠的网络检测逻辑

InternetAddress.lookup仅做DNS解析,在部分移动数据环境下可能出现解析失败但实际网络可用的情况,建议改用TCP连接测试:

import 'dart:io';

Future<bool> hasNetworkConnection() async {
  try {
    // 尝试连接Google的80端口,超时5秒
    final socket = await Socket.connect('google.com', 80, timeout: const Duration(seconds: 5));
    socket.close();
    return true;
  } on SocketException {
    return false;
  }
}

这种方式直接验证TCP连通性,比单纯DNS lookup更准确反映实际网络状态。

3. 检查Xcode项目配置

  • 打开Xcode的Signing & Capabilities页面,若应用需后台联网,勾选Background Modes下的Background fetch或Remote notifications。
  • 在Build Settings中设置Enable Bitcode为No,部分网络库在Bitcode开启时会出现兼容性问题。

验证操作

  1. 执行flutter clean清理缓存
  2. 重新编译运行:flutter run
  3. 在iOS真机切换到移动数据测试网络检测功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:55:18