«FABException», причина: «[Fabric] Значение ключа Info.plist« Fabric »должно быть NSDictionary.»при использовании Firebase и Crashlytics - PullRequest
0 голосов
/ 10 мая 2018

У меня довольно специфический сценарий при работе с 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.'

как ошибка, когда я запускаю проект, однако все в порядке. Проблема only возникает при запуске тестов. Я пробовал следующее:

  1. Добавьте Crashlytics и Fabric к цели проекта, и я получаю ту же ошибку.
  2. Я делаю шаг 1, а также для цели модульных тестов, и все равно получаю ту же ошибку.
  3. Я делаю шаг 2, а затем добавляю Firebase Core к цели модульных тестов, и все равно получаю ту же ошибку.
  4. Я делаю шаг 3, а затем также добавляю "${PODS_ROOT}/Fabric/run" к сценарию запуска, но к цели модульных тестов, и все равно получаю ту же ошибку.

Я думаю, что Firebase не инициализируется правильно, и это, в свою очередь, приводит к неправильной инициализации Fabric и, следовательно, к сбою. Но я не уверен, как решить проблему. Будем благодарны за любые рекомендации и предложения.

Ответы [ 5 ]

0 голосов
/ 20 февраля 2019

Я обновлял Crashlytics и воспроизвел ошибку.В моем случае проблема была решена, когда я удалил следующий код:

//[Fabric with:@[[Crashlytics class]]];
0 голосов
/ 05 октября 2018

изменить эту конфигурацию:

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

на эту:

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

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

    # Move tests inside target block
    target 'TargetNameTests' do
        inherit! :search_paths # add custom flag
    end

    target 'TargetNameSwiftTests' do
        inherit! :search_paths # add custom flag
    end

    target 'TargetNameUITests' do
        inherit! :search_paths # add custom flag

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

target 'OneMoreTargetName' do
    project 'Project.xcodeproj'
    main_pods
end
0 голосов
/ 11 июня 2018

Я просто проверяю одну вещь. Если вы зарегистрировали свое приложение в консоли 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
}

Я страдал от той же проблемы. Я просто добавляю этот код и проблема решена. Я тоже желаю тебе.

0 голосов
/ 22 июня 2018

Xcode 9

для моего случая Я создал цель модульного тестирования перед интеграцией с firebase и перед созданием других целей без тестирования.Для меня сработало:

  1. удалить цель модульного теста
  2. создать новую
0 голосов
/ 10 мая 2018

Сообщение об ошибке довольно простое.

Ваши ключи Fabric в вашем Info.plist имеют неправильный формат.

Это должен быть словарь в качестве состояния в документе:

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>
...