web-dev-qa-db-fra.com

'FABException', raison: '[Fabric] La valeur de la clé Info.plist "Fabric" doit être un NSDictionary. " lors de l'utilisation de Firebase et de Crashlytics

J'ai un scénario assez particulier lorsque je travaille avec Firebase dans notre application. Sans ajouter Crashlytics et Fabric au projet, lorsque je lance des tests unitaires pour le projet, le code suivant est lu:

@try {
        [FIRApp configure];
} @catch (NSException *exception) {
        DLog(@"**** Unable to configure Firebase due to exception %@", exception.description);
}

Lors du débogage des tests unitaires, une exception n'est pas levée et je suppose donc que firebase est configuré et que tout fonctionne. Les tests réussissent et il n'y a pas de problèmes. 

J'ajoute alors simplement le projet à Crashlytics avec Fabric. J'ajoute ceci en tant que script d'exécution à mes phases de construction "${PODS_ROOT}/Fabric/run" pour le projet, puis je relance les tests unitaires. Les tests unitaires échouent et j'obtiens:

Terminating app due to uncaught exception 'FABException', reason: '[Fabric] Value of Info.plist key "Fabric" must be a NSDictionary.'

comme une erreur, quand je lance le projet cependant tout va bien. Le problème seulement se pose lors de l'exécution de tests. J'ai essayé ce qui suit:

  1. Ajoutez Crashlytics et Fabric à la cible du projet et vous obtenez la même erreur.
  2. Je fais l'étape 1 et aussi à la cible de tests unitaires et je reçois toujours la même erreur.
  3. Je fais l’étape 2 puis j’ajoute également Firebase Core à la cible des tests unitaires et j’obtiens toujours la même erreur.
  4. Je fais l'étape 3, puis j'ajoute aussi "${PODS_ROOT}/Fabric/run" à un script d'exécution, mais la cible de tests unitaires reçoit toujours la même erreur.

Je pense que Firebase n’est pas initialisé correctement, ce qui a pour conséquence que Fabric ne s’initialise pas correctement et est donc l’échec. Mais je ne suis pas sûr de savoir comment résoudre le problème. Toute orientation et suggestions seraient appréciées.

9
user481610

Le message d'erreur est assez simple.

Vos clés Fabric dans votre Info.plist ont un format incorrect.

Il doit s'agir d'un dictionnaire tel qu'indiqué dans son document:

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>
3
GIJOW

changer cette configuration: 

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

pour ça:

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
3
Dmitry Coolerov

Je viens de vérifier une chose ... Si vous avez enregistré votre application dans la console Firebase, votre fichier AppDelegate.Swift devrait avoir le code Firebase.configure() dans la fonction didFinishLaunchingWithOptions.

comme ça.

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

J'ai subi le même problème. Je viens d’ajouter que le code et le problème sont résolus ... Je vous souhaite aussi.

3
user7614285

J'étais en train de mettre à jour Crashlytics et j'ai reproduit l'erreur. Dans mon cas, le problème a été résolu lorsque j'ai supprimé le code suivant:

//[Fabric with:@[[Crashlytics class]]];
0
Jorge Piera Llodrá

Xcode 9

pour mon cas, j'ai créé la cible de test unitaire avant l'intégration de Firebase et avant de créer d'autres cibles non-test . Ce qui a fonctionné pour moi est, 

  1. supprimer la cible de test unitaire
  2. créer un nouveau
0
Ted