在我们的应用程序中使用Firebase时,我有一个相当特殊的场景.在不向项目添加Crashlytics和Fabric的情况下,当我为项目运行单元测试时,会触及以下代码:
@try { [FIRApp configure]; } @catch (NSException *exception) { DLog(@"**** Unable to configure Firebase due to exception %@",exception.description); }
在调试单元测试时,不会引发异常,因此我假设已配置firebase并且所有内容都正常工作.测试通过,没有问题.
然后我非常简单地将Crashlytics with Fabric添加到项目中.我将此作为运行脚本添加到项目的构建阶段“${PODS_ROOT} / Fabric / run”,然后再次运行单元测试.单元测试失败,我得到:
Terminating app due to uncaught exception 'FABException',reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'
作为一个错误,当我运行项目,但一切都很好.只有在运行测试时才会出现此问题.我尝试过以下方法:
>将Crashlytics和Fabric添加到项目目标中,我得到相同的错误.
>我执行第1步,也执行单元测试目标,我仍然得到相同的错误.
>我执行第2步,然后我还将Firebase Core添加到单元测试目标,我仍然得到相同的错误.
>我执行第3步,然后还将“${PODS_ROOT} / Fabric / run”添加到运行脚本,但是在单元测试目标上仍然会得到相同的错误.
我认为Firebase没有正确初始化,这反过来导致Fabric无法正确初始化,从而导致失败.但我不确定如何解决这个问题.任何指导和建议将不胜感激.
解决方法
错误信息非常简单.
Info.plist中的Fabric键格式不正确.
它必须是一个字典作为其文档中的状态:
https://fabric.io/kits/ios/crashlytics/install
<key>Fabric</key> <dict> <key>APIKey</key> <string>YOUR_FABRIC_API_KEY</string> <key>Kits</key> <array> <dict> <key>KitInfo</key> <dict/> <key>KitName</key> <string>Crashlytics</string> </dict> </array> </dict>