Flutter iOS模拟器中Firebase Firestore SDK连接本地模拟器超时,但Web/HTTP测试正常的问题求助
Flutter iOS模拟器中Firebase Firestore SDK连接本地模拟器超时,但Web/HTTP测试正常的问题求助
我现在遇到一个非常棘手的问题:Flutter iOS模拟器里用Firebase Firestore SDK连接本地Firestore模拟器时一直报TimeoutException,但其他所有连通性测试都正常,感觉问题非常特定和孤立。
测试结果对比
成功的连通性测试
- Flutter Web构建(
flutter run -d chrome)能完美连接本地Firestore模拟器,操作完全正常 - macOS终端用curl调用Firestore REST API毫无问题,比如执行:
curl -X POST "http://localhost:8080/v1/projects/your-project-id/..." - iOS模拟器内的App用简单的
HttpClient发起GET请求到模拟器的host:port,能正常返回200状态码
失败的场景
- 只有iOS模拟器中通过
FirebaseFirestore.instance...调用Firebase SDK进行连接时,会持续抛出TimeoutException
这说明问题不在模拟器本身、网络环境或者基础配置上,而是出在Flutter iOS构建与Firebase SDK的gRPC通信交互环节。
环境信息
- Flutter版本:Flutter 3.32.1 • stable通道 • 框架修订b25305a883(9天前),引擎修订1425e5e9ec,Dart 3.8.1,DevTools 2.45.1
- Firebase依赖版本:
- Firebase Core: ^3.13.1
- Cloud Firestore: ^5.6.8
- Firebase Auth: ^5.5.4
- macOS版本:macOS 15 Beta (Darwin 24.5.0)
- Xcode版本:16.3 (16E140)
已尝试的解决方法(精简记录)
1. 网络配置调整
- 在
main.dart中试过将模拟器地址设为localhost、127.0.0.1以及本机局域网IP(192.168.0.196) - 修改
firebase.json将Firestore模拟器绑定到0.0.0.0和特定IP,当前配置为0.0.0.0
2. Firestore连接代码调整
- 试过两种配置方式:
FirebaseFirestore.instance.useFirestoreEmulator(...)和 显式设置Settings对象,当前使用的代码为:// 在main()中Firebase.initializeApp()之后 FirebaseFirestore.instance.settings = Settings( host: '192.168.0.196:8080', sslEnabled: false, persistenceEnabled: false, ); await FirebaseAuth.instance.useAuthEmulator('192.168.0.196', 9099);
3. iOS项目配置
- 在
Info-Debug.plist中添加了NSAppTransportSecurity配置,允许本地网络请求:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsLocalNetworking</key> <true/> </dict>
4. 系统与项目清理
- 确认macOS防火墙已关闭
- 用
lsof -i :8080找到并杀死了占用端口的僵尸模拟器进程,解决后curl和Web构建才能正常连接 - 执行过
flutter clean、rm -rf ios/Pods ios/Podfile.lock和flutter pub get,确保完全干净的构建环境
核心疑问
既然Web构建能正常连接、curl命令可用、iOS App里的基础HttpClient也能通信,为什么只有iOS模拟器中Firebase SDK的gRPC通信会超时?
是不是存在隐藏的iOS构建设置、模拟器上gRPC的特定限制(尤其是在Beta版macOS/Xcode环境下),或者是这些依赖版本组合的已知问题?
任何帮助或者新的调试思路都对我非常重要,感激不尽!
内容来源于stack exchange
相关产品推荐
相关产品推荐

