在我们的应用程序中使用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>