Unity iOS集成Firebase报错:NSInvalidArgumentException未识别选择器
我之前帮朋友解决过几乎一模一样的问题——Unity 2017.3这种老版本搭配Firebase,最容易踩版本兼容和CocoaPods配置的坑,给你一步步理清楚怎么解决:
先搞懂问题根源
这个NSInvalidArgumentException: +[FIRApp registerLibrary:withVersion:]: unrecognized selector错误,本质是Firebase的SDK版本和Unity不匹配,或者Pods依赖没正确拉取,导致FIRApp类的关键方法找不到。Unity 2017.3不支持最新的Firebase SDK,必须锁定到兼容iOS 9且适配老Unity的版本。
第一步:把Podfile配置改对
你现在Podfile注释了platform :ios, '9.0',这会让CocoaPods默认用更高的iOS版本,和Unity设置的最低9.0冲突,而且Firebase 7.x及以上已经放弃支持iOS 9了。直接替换成下面的配置:
platform :ios, '9.0' target '你的Unity项目Target名称' do # 锁定到支持iOS9的最后稳定Firebase版本,同时兼容Unity2017 pod 'Firebase/Core', '~> 6.34.0' # 如果你用了其他Firebase模块(比如Auth、Database),也要对应同版本 pod 'Firebase/Auth', '~> 6.34.0' end
注意:Target名称要和Unity导出的iOS项目里的Target完全一致,别写错!
第二步:彻底清理并重装Pods
之前拉的Pods大概率是不兼容的版本,必须清干净重来:
- 打开终端,cd到你的iOS项目目录,执行:
pod deintegrate rm Podfile.lock rm -rf Pods - 然后重新安装,记得更新Pod索引:
pod install --repo-update
一定要加
--repo-update,不然可能还是拉到旧的索引,装错版本
第三步:匹配Unity里的Firebase插件版本
你在Unity里导入的Firebase Unity插件,必须和Podfile里的SDK版本完全对应!Unity 2017.3最高兼容到Firebase Unity SDK 6.15.0,如果你之前装了新版插件,赶紧换成这个版本(去Firebase控制台下载历史版本的Unity插件就行)。
第四步:Unity构建后的Xcode检查
- 构建完成后,必须打开
.xcworkspace文件,别碰.xcodeproj,否则Pods不会被正确整合进项目 - 去Build Settings里找
Other Linker Flags,确保里面有-ObjC和-all_load——Firebase靠这些标志才能加载类的静态方法 - 检查
Framework Search Paths,确认包含Pods/Frameworks路径,并且设置为recursive
第五步:验证Firebase初始化代码
确保你在Unity里的初始化逻辑没问题,别在Awake里急着初始化,放在Start里更稳妥:
using Firebase; using UnityEngine; public class FirebaseInitializer : MonoBehaviour { void Start() { FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var status = task.Result; if (status == DependencyStatus.Available) { // 初始化成功,继续你的业务逻辑 FirebaseApp.DefaultInstance; } else { Debug.LogError($"Firebase依赖加载失败:{status}"); } }); } }
如果还是不行,最后排查两个细节:
- Unity的iOS构建设置里,有没有勾选
Strip Engine Code?这个选项可能会误删Firebase需要的代码,取消勾选后重新构建试试 - 确认Xcode项目的Deployment Target确实是9.0,和Unity里的设置完全一致
内容的提问来源于stack exchange,提问作者eagle

