' FABException',原因:' [Fabric] Info.plist键的值" Fabric"必须是NSDictionary。'使用Firebase和Crashlytics时

时间:2018-05-10 13:42:47

标签: ios firebase crashlytics google-fabric

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

作为一个错误,当我运行项目但一切都很好。运行测试时会出现问题。我尝试过以下方法:

  1. 将Crashlytics和Fabric添加到项目目标中,我收到同样的错误。
  2. 我执行第1步,也执行单元测试目标,但仍然会遇到相同的错误。
  3. 我执行第2步,然后我还将Firebase Core添加到单元测试目标中,但仍然会出现相同的错误。
  4. 我执行第3步,然后将"${PODS_ROOT}/Fabric/run"添加到运行脚本中,但是在单元测试目标上仍然会出现相同的错误。
  5. 我认为Firebase未正确初始化,这反过来导致Fabric无法正确初始化,从而导致失败。但我不确定如何解决这个问题。任何指导和建议将不胜感激。

6 个答案:

答案 0 :(得分:5)

我只检查一件事。 如果您在Firebase控制台中注册了应用, 您的AppDelegate.swift文件应在Firebase.configure()函数中包含didFinishLaunchingWithOptions个代码。

像这样。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    print("[caution] : didFinishLaunchingWithOptions")
    FirebaseApp.configure()
    Messaging.messaging().delegate = self
    Fabric.with([Crashlytics.self])
    return true
}

我遇到了同样的问题。我只是添加代码和问题解决了。 我也希望你。

答案 1 :(得分:3)

错误信息很简单。

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>

答案 2 :(得分:3)

更改此配置:

df['Age'] = ((pd.to_datetime('2017-03-31') - df['DoB'])/np.timedelta64(1, 'Y')).astype(int)
print(df)
         DoB  Age
0 1973-12-19   43
1 1969-05-22   47
2 1959-09-23   57
3 1963-04-08   53
4 1962-03-25   55

对此:

def main_pods
    pod 'Fabric'
    pod 'Crashlytics'
    pod 'Firebase/Core'
end

target 'TargetName' do
    project 'Project.xcodeproj'
    main_pods
end

target 'OneMoreTargetName' do
    project 'Project.xcodeproj'
    main_pods
end

target 'TargetNameTests' do
    project 'Project.xcodeproj'
    main_pods
end

target 'TargetNameSwiftTests' do
    project 'Project.xcodeproj'
    main_pods
end

target 'TargetNameUITests' do
    project 'Project.xcodeproj'
    main_pods

    pod 'Utils', '~> 0.3.3'
    pod 'Pod', '~> 1.4.1'
end

答案 3 :(得分:1)

在单元测试中,我有一个项目的主要目标是@testable import,当在单元测试的Podfile中包含Fabric时,它因上述错误消息而崩溃。但是,当我从Fabric的单元测试目标中删除了Podfile时,一切都进行了而没有发生任何事情。

答案 4 :(得分:0)

Xcode 9

对于我的情况,我在Firebase集成之前和创建其他非测试目标之前创建了单元测试目标。 对我有用的是

  1. 删除单元测试目标
  2. 创建一个新的

答案 5 :(得分:0)

我正在升级Crashlytics,并且重现了该错误。就我而言,删除以下代码后,问题已解决:

//[Fabric with:@[[Crashlytics class]]];