macOS沙盒环境下Firestore读取报错无法访问com.apple.dnssd.service
macOS端Firebase沙盒dnssd报错解决方案
报错根因
该报错和普通进出站网络权限无关,是Firebase SDK默认通过Bonjour服务(即com.apple.dnssd.service)做就近服务节点发现,macOS沙盒要求应用显式声明对应服务访问权限,仅开进出站网络权限不会授予Bonjour访问资格。
修复步骤
- 补充沙盒本地网络权限
打开macOS Target的Signing & Capabilities页,在App Sandbox配置栏勾选Local Network选项,该权限是应用访问Bonjour服务的前置依赖。 - 显式声明Bonjour服务
在同个Signing & Capabilities页添加Bonjour Services能力,点击新增按钮填入两个Firebase依赖的服务标识:_firebase._tcp_firestore._tcp
- 补全权限弹窗说明
打开macOS Target的Info.plist文件,添加NSLocalNetworkUsageDescription键,值填写权限用途说明即可,例如需要访问网络以连接Firebase云端服务,macOS 11及以上版本要求本地网络权限必须配置说明文案才会生效。 - 清理构建缓存重编译
按下Shift + Command + K执行Xcode清理操作,删除项目对应DerivedData缓存后重新全量编译,避免旧权限配置缓存导致修改不生效。
兜底修复方案
如果完成上述配置后仍触发报错,可以在Firebase初始化阶段关闭本地节点发现逻辑,强制直连Firebase官方节点,跳过Bonjour服务调用。在执行FirebaseApp.configure()前添加如下代码:
import FirebaseFirestore let firestoreSettings = FirestoreSettings() firestoreSettings.host = "firestore.googleapis.com" firestoreSettings.isSSLEnabled = true Firestore.firestore().settings = firestoreSettings
说明:该方案会跳过Firebase就近节点自动调度,首次连接延迟可能略有上升,但可以完全规避dnssd相关的沙盒拦截问题。
内容的提问来源于stack exchange,提问作者Mariglen Meta
相关产品推荐
相关产品推荐

