SwiftUI集成FirebaseFirestore遇网络连接错误求助
我多次搜索未找到解决方案,作为刚接触Xcode开发SwiftUI的新手,我写了一个简单测试示例,使用Xcode 15.4、Firebase 11.1.0、iOS 17.5模拟器(iPhone 15 Pro Max)测试,目前能正常从数据库获取数据,但出现如下错误日志:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR I0000 00:00:1724935720.773638 111338 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache nw_connection_get_connected_socket_block_invoke [C1] Client called nw_connection_get_connected_socket on unconnected nw_connection TCP Conn 0x6000033050e0 Failed : error 0:50 [50] I0000 00:00:1724935720.853425 111359 subchannel.cc:806] subchannel 0x104919e10 {address=ipv6:%5B2404:6800:4006:814::200a%5D:443, args={grpc.client_channel_factory=0x600000049cc0, grpc.default_authority=firestore.googleapis.com, grpc.http2_scheme=https, grpc.internal.channel_credentials=0x60000260d020, grpc.internal.client_channel_call_destination=0x102cd4fb8, grpc.internal.event_engine=0x600000008ef0, grpc.internal.security_connector=0x600002c01400, grpc.internal.subchannel_pool=0x6000029442a0, grpc.keepalive_time_ms=30000, grpc.primary_user_agent=grpc-c++/1.65.1, grpc.resource_quota=0x600000cbfe40, grpc.server_uri=dns:///firestore.googleapis.com}}: connect failed (UNKNOWN:(domain:NSPOSIXErrorDomain, code:50, description:The operation couldn’t be completed. Network is down) {file:"/var/folders/hn/5bx1f4_d4ds5vhwhkxc7vdcr0000gn/T/ZipRelease/2024-07-25T04-01-28/project-ios/Pods/gRPC-Core/src/core/lib/transport/error_utils.cc", file_line:150, created_time:"2024-08-30T00:48:40.853037+12:00", grpc_status:2}), backing off for 955 ms
我无法定位错误原因,恳请帮助。以下是源代码:
源代码
import SwiftUI import Firebase @main struct BizKoreaNZApp: App { init() { FirebaseApp.configure() } var body: some Scene { WindowGroup { ContentView() } } } import SwiftUI import FirebaseFirestore struct ContentView: View { @State private var users = [User]() @State private var isLoading = false var body: some View { Text("Start") NavigationView { List(users) { user in Text(user.name) } .navigationTitle("Users") .onAppear { fetchUsers() } .overlay(isLoading ? ProgressView() : nil) } } func fetchUsers() { isLoading = true let db = Firestore.firestore() db.collection("users").getDocuments { snapshot, error in isLoading = false if let error = error { print("Error fetching users: \(error.localizedDescription)") } else if let snapshot = snapshot { self.users = snapshot.documents.map { document in let data = document.data() let name = data["name"] as? String ?? "" return User(name: name) } } } } } struct User: Identifiable { let id = UUID() var name: String }
问题分析与解决建议
IPv6连接兼容性问题
日志显示尝试连接IPv6地址失败,部分网络或模拟器环境可能存在IPv6支持缺陷。可以强制Firestore使用REST API替代gRPC,绕开IPv6问题:
在FirebaseApp.configure()前添加配置:let settings = FirestoreSettings() settings.preferRestAPI = true Firestore.firestore().settings = settings FirebaseApp.configure()模拟器网络状态重置
- 打开模拟器,选择
Hardware > Erase All Content and Settings清除所有数据,重启后重新测试。 - 执行
Command + Shift + K清除项目缓存,重启Xcode和模拟器。
- 打开模拟器,选择
屏蔽冗余底层日志
这类日志多是Firebase依赖的gRPC库底层警告,不影响功能正常运行。可以降低Firebase日志级别来屏蔽:
在FirebaseApp.configure()后添加:FirebaseConfiguration.shared.setLoggerLevel(.min)检查网络环境与权限
- 关闭电脑上的VPN、代理工具,避免网络连接被干扰。
- 确认项目
Info.plist中NSAppTransportSecurity配置允许HTTPS连接(默认已开启,若有自定义配置需验证)。
内容的提问来源于stack exchange,提问作者Daniel Lee

