React Native CLI真机USB连接失败:No bundle URL present问题求助
问题详情
一周前周一前运行正常,周五还能正常使用,周一突发问题且无代码/配置改动,仅在真实iOS设备(两台测试设备)出现:
- VS Code构建后,需手动点击设备APP才能启动(不会自动打开),设备弹出错误提示(截图:设备错误提示);
- Xcode构建时抛出网络连接错误:
Task <5317CDF5-7FFB-4037-860C-287CC6D11B37>.<1> finished with error [-1004] Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={_kCFStreamErrorCodeKey=61, NSUnderlyingError=0x302fcd500 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "(null)" UserInfo={_NSURLErrorNWPathKey=satisfied (Path is satisfied), interface: lo0, _kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <5317CDF5-7FFB-4037-860C-287CC6D11B37>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <5317CDF5-7FFB-4037-860C-287CC6D11B37>.<1>" ), NSLocalizedDescription=Could not connect to the server., NSErrorFailingURLStringKey=http://localhost:8081/status, NSErrorFailingURLKey=http://localhost:8081/status, _kCFStreamErrorDomainKey=1}
Metro执行刷新时提示:
No apps connected. Sending "reload" to all React Native apps failed. Make sure your app is running in the simulator or on a phone connected via USB.
环境版本
react-native: 0.75.4
iOS设备系统: 18.1.1
Mac设备: M2 Air,macOS 15.1.1
已尝试的无效方案
- Mac与设备同WiFi+USB连接;
- 开发菜单手动输入Mac局域网IP(No bundle URL提示消失,但热刷新仍失效);
- 验证设备端localhost、Mac端http://localhost:8081/status均显示Metro运行正常;
- 删除DeliveryData、Pods、node_modules、org.swift.swiftpm包内容、build文件夹后重装重建;
- 关闭重启Metro服务器;
- 重启Mac与iOS设备;
- 更换第三方热点连接Mac与设备;
- 配置Info.plist如下(无效):
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSAllowsLocalNetworking</key> <true/> </dict>
- 手动生成main.jsbundle(No bundle URL错误消失,热刷新仍失效);
- Mac与iOS设备切换为Google DNS(8.8.8.8/8.8.4.4);
- 更新Apple许可证并执行
sudo xcodebuild -license; - 关闭Mac与iOS设备的私有WiFi地址;
新增解决建议
- 检查Mac防火墙权限
- 打开「系统设置」-「网络」-「防火墙」,确认允许
node、react-native进程接收传入连接;临时关闭防火墙测试是否恢复正常。
- 打开「系统设置」-「网络」-「防火墙」,确认允许
- 指定Metro绑定的IP与端口
- 启动Metro时显式绑定Mac局域网IP:
npx react-native start --host 你的Mac局域网IP --port 8081,之后重新构建应用。
- 启动Metro时显式绑定Mac局域网IP:
- 重置iOS网络设置
- iOS设备进入「设置」-「通用」-「传输或还原iPhone」-「还原」-「还原网络设置」,重置后重新连接WiFi测试。
- 排查端口占用
- 执行
lsof -i :8081查看8081端口是否被其他进程占用,若有则杀掉对应进程:kill -9 进程PID,再重启Metro。
- 执行
- 修改Info.plist添加IP例外
- 在NSAppTransportSecurity中添加Mac局域网IP的例外规则:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSAllowsLocalNetworking</key> <true/> <key>NSExceptionDomains</key> <dict> <key>你的Mac局域网IP</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
- 强制USB连接构建
- 使用命令
npx react-native run-ios --device "你的设备名称" --port 8081,强制通过USB通道构建并连接Metro。
- 使用命令
内容的提问来源于stack exchange,提问作者Artur

