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

Flutter macOS环境WebSocket代码Debug正常但Release模式报错

Flutter macOS Release模式下WebSocket连接失败(SocketException: errno=8)

问题场景

基于Flutter官方WebSocket示例代码修改(仅添加错误展示Text组件)的程序,在macOS Debug模式下可正常运行,但执行flutter build macos打包为Release版本后,出现以下错误:

SocketException: Failed host lookup: ‘...’ (OS Error: nodename nor servname provided, or not known, errno = 8)

已尝试的排查动作:

  • 添加com.apple.security.network.client权限
  • 查阅相关技术问题
  • 关闭系统防火墙
  • 确认网络连接正常,flutter doctor -v检测无异常

原因分析

Debug与Release模式下macOS应用的权限生效逻辑、签名机制存在差异:

  1. Debug模式下Flutter会自动注入调试相关配置,权限默认生效;但Release模式需要显式在对应配置文件中声明权限,且需保证签名正确才能让权限生效。
  2. 若仅修改了Debug环境的权限配置文件,未同步到Release配置,会导致Release版本缺失网络权限。
  3. 旧的构建缓存可能导致配置未正确更新到Release包中。

解决方案

1. 同步Release与Debug的权限配置

打开macos/Runner目录下的两个权限配置文件:

  • DebugProfile.entitlements
  • Release.entitlements

确保两者都添加网络客户端权限,内容如下:

<key>com.apple.security.network.client</key>
<true/>

2. 检查Release打包的签名配置

  • 若使用开发者证书打包,确保证书有效且配置正确;
  • 本地测试时可尝试无签名打包:
    flutter build macos --release --no-codesign
    
    运行无签名应用时需右键选择「打开」绕过系统安全验证,验证是否为签名导致的权限问题。

3. 验证WebSocket URL合法性

确认代码中使用的WebSocket URL为标准格式(如wss://your-server.com/ws或ws://localhost:8080),无中文符号、拼写错误,避免因URL解析失败触发主机查找错误。

4. 清理构建缓存后重新打包

执行以下命令清理缓存并重新构建:

flutter clean
rm -rf macos/build
flutter build macos

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:05:30