Unity macOS Xcode添加App Sandbox后Firebase Auth崩溃问题
解决方案
1. 调整配置文件位置,确保Sandbox可访问
将google-services-desktop.json和google-services.json移动到Unity项目的Assets/StreamingAssets目录下。这个目录在构建后会被打包进应用包内,App Sandbox默认允许应用访问自身包内的资源,可避免因文件系统权限限制导致的崩溃。
构建完成后在Xcode中确认:
- 两个文件的Target Membership已勾选主应用目标
- 在
Build Phases > Copy Bundle Resources列表中能看到这两个文件
2. 配置App Sandbox必要权限
在Xcode的Signing & Capabilities标签页中,针对App Sandbox开启以下权限:
- 勾选
Network > Outgoing Connections (Client):Firebase Auth和Firestore需要发起网络请求,必须开启该权限 - 无需额外添加文件系统权限(配置文件在包内,Sandbox默认允许访问)
3. 手动指定配置文件路径(解决自动读取失败)
如果Firebase无法自动识别配置文件,在初始化代码中手动加载google-services-desktop.json(macOS/Windows通用):
using Firebase; using Firebase.Auth; using System.IO; using UnityEngine; public class FirebaseSetup : MonoBehaviour { void Start() { // 加载StreamingAssets目录下的配置文件 string configFilePath = Path.Combine(Application.streamingAssetsPath, "google-services-desktop.json"); // 初始化Firebase App FirebaseApp.Create(new AppOptions().SetConfigurationFromJsonFile(configFilePath)); // 监听依赖检查结果 FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { if (task.Result == DependencyStatus.Available) { // 初始化Auth服务 FirebaseAuth.DefaultInstance.StateChanged += OnAuthStateChanged; } else { Debug.LogError($"Firebase依赖缺失: {task.Result}"); } }); } void OnAuthStateChanged(object sender, System.EventArgs e) { // 处理Auth状态变更逻辑 } }
4. 排查崩溃日志定位问题
打开Xcode Organizer,找到对应版本的崩溃报告,查看具体报错信息:
- 如果日志中出现
Sandbox: [AppName](PID) deny(1) file-read-data,说明是文件访问权限被Sandbox拦截,回到步骤1确认配置文件位置 - 如果出现配置文件解析错误,检查json文件是否完整、有无格式错误
5. 确保初始化流程顺序正确
- 避免在
Awake中提前调用Firebase服务,将初始化逻辑放在Start或协程中,确保配置文件加载完成后再初始化Auth/Firestore - 始终通过
CheckAndFixDependenciesAsync()确认Firebase依赖加载完成后,再初始化具体服务
内容的提问来源于stack exchange,提问作者EterNity
相关产品推荐
相关产品推荐

