iOS设备无线调试时Flutter应用无法热重载/热重启
Flutter无线调试iPhone时热重载按钮灰色(VM Service连接失败)
问题描述
我能通过Android Studio无线构建并运行Flutter应用到iPhone,但应用启动后热重载按钮呈灰色不可用。尝试用终端执行flutter run --debug确保处于Debug模式,按钮依然灰色。但同一iPhone用有线连接时,热重载完全正常。
终端运行时的输出信息:
正在运行Xcode构建... └─编译、链接并签名... 30.0s Xcode构建完成。 328.8s 系统可能会提示你授予控制Xcode的权限。Flutter需要通过Xcode运行应用。如果未允许,你可以通过「设置 > 隐私与安全性 > 自动化」修改权限。 75秒后仍未发现Dart VM服务,这比预期时间长得多... 打开项目所在的Xcode窗口,确保应用正在运行。如果应用未运行,尝试选择「Product > Run」来解决问题。 点击提示中的「允许」,允许在本地网络查找和连接设备。这是无线调试的必要条件。如果之前选了「不允许」,可以在「设置 > 你的应用名称 > 本地网络」中开启。 如果设置里找不到你的应用,卸载应用后重新运行,会再次弹出权限请求。 安装并启动应用... 120.1s 连接VM服务的时间比预期长... 仍在尝试连接VM服务... 如果看不到Flutter应用在运行,可能已经崩溃。设备日志(比如adb或Xcode的日志)可能有更多细节。 如果看到Flutter应用在设备上运行,尝试用--host-vmservice-port参数重新运行,指定一个已知可用的端口。 连接VM服务时出现异常:SocketException: 连接被拒绝(OS错误:连接被拒绝,错误码=61),地址=192.168.178.195,端口=58939 这是第50次尝试。将在0:00:01.600000后重试。 连接VM服务时出现异常:SocketException: 连接被拒绝(OS错误:连接被拒绝,错误码=61),地址=192.168.178.195,端口=59081 这是第100次尝试。将在0:00:01.600000后重试。
解决方案
- 开启本地网络权限:进入iPhone的「设置 > 你的应用名称 > 本地网络」,确保权限已开启。如果找不到应用,卸载后重新运行,会弹出权限请求,选择「允许」。
- 验证Xcode自动化权限:在Mac的「设置 > 隐私与安全性 > 自动化」中,找到Flutter和Android Studio,勾选允许它们控制Xcode的权限。
- 指定VM Service端口运行:在终端执行
flutter run --debug --host-vmservice-port 8080,替换8080为你确认可用的端口,避免端口被占用或防火墙拦截。 - 确认网络环境一致:确保iPhone和Mac连接同一个Wi-Fi网络,关闭VPN或防火墙,避免设备间通信被阻断。
- 重启调试环境:重启Android Studio、Xcode和iPhone,重新建立无线调试连接,清除环境缓存可能解决异常。
问题原因
日志中的SocketException: Connection refused表明Flutter无法连接到iPhone上的Dart VM Service——这是热重载功能依赖的核心服务。无线调试时,权限缺失、端口冲突、网络隔离等因素都会导致这个连接失败,进而让热重载按钮失效。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

