La configuration de la base de données Firebase échoue-Swift

Dans mon application que je suis avec succès à l'aide de Firebase et dans AppDelegate je fais de la configuration:

// ### Initialize Firebase
FIRApp.configure()

Maintenant je fais un peu tests unitaires connexes sur la cible et lorsque je le lance, j'obtiens une erreur:

2017-04-14 14:53:22.351 MyProject[28753] <Error> [Firebase/Core][I-COR000004] App with name __FIRAPP_DEFAULT does not exist.
2017-04-14 14:53:22.354 MyProject[28753] <Error> [Firebase/Messaging][I-IID001000] Firebase is not set up correctly. Sender ID is nil or empty.
2017-04-14 14:53:22.356 MyProject[28753] <Notice> [Firebase/Analytics][I-ACS023007] Firebase Analytics v.3800000 started
2017-04-14 14:53:22.356 MyProject[28753] <Notice> [Firebase/Analytics][I-ACS023008] To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled
2017-04-14 14:53:22.381 MyProject[28753:712475] *** Terminating app due to uncaught exception 'com.firebase.instanceid', reason: 'Could not configure Firebase InstanceID. Google Sender ID must not be nil or empty.'

Versions:

Firebase/Core (3.16.0)
Firebase/Messagging (3.16.0)

un conseil?

24
demandé sur Luca Davanzo 2017-04-14 16:01:13
la source

8 ответов

je viens de remarquer que ça commence à m'arriver et mes constructions travis sont en panne avec la base de données 3.16. J'ai rétrogradé à 3.7.1 qui était la version que j'avais auparavant sur le projet et il fonctionne à nouveau.

je n'ai pas eu le temps d'y regarder de plus mais c'est une solution rapide. Il peut être un Firebase bug ou ils ont peut-être changé quelque chose, et la configuration est différente maintenant.

Edit: apparemment revenir à 3.15 fonctionne assez bien.

15
répondu Michal Klein 2017-04-19 15:05:15
la source

début dans Firebase 3.16.0, il semble que Google Firebase ne capte pas le GoogleService-Info.plist de la construction de test de l'Unité, même si le plist est inclus dans l'application et de l'unité de test cibles. Cela ne semble pas être résolu 3.17.0. Comme d'autres l'ont fait remarquer, rétrogradation à 3.15.0 semble esquiver le problème.

mais pour beaucoup, l'initialisation de Firebase pendant les tests unitaires peut ne pas être nécessaire, et en fait non intentionnel --par exemple, vous ne voulez probablement pas de rapport de Firebase sur l'unité de test se bloque. Dans ces scénarios, vous pouvez facilement ajouter un garde autour de FIRApp.configure() de ne pas l'initialiser lors de l'exécution de tests unitaires par l'intermédiaire de ce qui suit:

import Foundation

func isUnitTesting() -> Bool {
    return ProcessInfo.processInfo.environment["TEST"] != nil
}

if !isUnitTesting() {
    FIRApp.configure()
}

Alors assurez-vous de définir la variable d'environnement TEST=1 dans votre schéma de test.

10
répondu markshiz 2017-05-02 01:10:53
la source

Cause Probable

cela se produit probablement en raison de la façon dont vos dépendances de Pod sont configurées. Voyez-vous des avertissements de Xcode sur des implémentations multiples définies dans les deux classes, comme:

objc[54869]: Class FIRApp is implemented in both /Users/hli/Library/Developer/CoreSimulator/Devices/7766B001-8A5F-43B6-8860-5D36E8DC452C/data/Containers/Bundle/Application/8A18B716-D1D2-4110-83E2-9AE577A034CD/FirebaseDemo.app/FirebaseDemo (0x10d306d30) and /Users/hli/Library/Developer/Xcode/DerivedData/FirebaseDemo-ddfdueufgmkxwzameiwbuhnokgax/Build/Products/Debug-iphonesimulator/FirebaseDemo.app/PlugIns/FirebaseDemoTests.xctest/FirebaseDemoTests (0x11df8cbb0). One of the two will be used. Which one is undefined.

si c'est le cas, cela signifie que vous devez probablement modifier la configuration de vos dépendances de pod. Depuis qu'une cible XCTest apporte en fait aussi la cible de l'application hôte, il est possible d'obtenir des importations multiples du même objet. Dans ce cas, le FIRApp initialisait ID d'Instance, mais il faisait que L'ID D'Instance vérifiait avec le autres FIRApp, qui disait qu'il n'était pas configuré. C'est ce qui explique pourquoi il plante en disant qu'il ne peut pas trouver l'application qui initialisé.

voir la réponse de [email protected] Github pour voir un exemple d'un Podfile correct.

Réponse Originale Ci-Dessous:

Donc, ce qui se passe peut-être deux raisons:

  1. Firebase ne trouve pas votre GoogleService-Info.plist dans votre unité tester le paquet de l'application hôte, ou
  2. GoogleService-Info.plist le fichier est manquant GCM_SENDER_ID ou, a une valeur vide.

Nous pouvons éliminer (2) assez facilement - peut inspecter votre GoogleService-Info.plist le fichier pour voir si elle est valide à la recherche GCM_SENDER_ID (ce sera un tas de nombres, comme 3252652634).

je vais étudier pourquoi l' GoogleService-Info.plist apparemment, peut être trouvé avec 3.15.x vs 3.16.0 et plus tard.

en plus, @markshiz dit, il se peut que vous ne vouliez pas que Firebase démarre pendant votre test unitaire pour votre application. Vous pouvez mettre votre FIRApp.configure() appeler derrière un IF-statement, en vérifiant si l'application fonctionne comme un test unitaire.

Pour également aider à déboguer cela, pourriez-vous exécuter votre application de test avec la variable d'environnement -FIRDebugEnabled set

Il m'a fallu un certain temps pour trouver la bonne version pour installer jusqu'à 3.17.0 est.

pod 'Firebase/Core', '~> 3.15.0'
pod 'Firebase/Database', '~> 3.15.0'
pod 'Firebase/Auth', '~> 3.15.0'

cela fonctionne garanti.

si vous oubliez le .0 et écrire 3.15 au lieu de cela, il installerait quand même le faulty 3.16.0.

4
répondu Houman 2017-04-25 00:40:54
la source

amélioration de firebase à 4.1.0 résolu mon problème. Aussi de nombreuses mises en garde est allé le chemin. Je suggère de mettre à jour Firebase

pod 'Firebase', '~> 4.1.0'
1
répondu William Hu 2017-10-11 12:32:20
la source

Avez-vous essayé?

let options = FIROptions(googleAppID: String!,
                             bundleID: String!,
                             gcmSenderID: String!,
                             apiKey: String!,
                             clientID: String!,
                             trackingID: String!,
                             androidClientID: String!,
                             databaseURL: String!,
                             storageBucket: String!,
                             deepLinkURLScheme: String!)
FIRApp.configure(with: config)
0
répondu Quver 2017-04-26 15:23:26
la source

j'ai rencontré le même problème et aucun des correctifs proposés n'a aidé.

je voyais les avertissements de mise en œuvre de classes en double comme mentionné au bas de ce numéro: https://github.com/firebase/FirebaseUI-iOS/issues/271

enlever tous les cadres firebase des cibles D'essai comme mentionné dans ce post a résolu le problème pour moi.

0
répondu JanR 2017-08-29 16:59:50
la source

j'ai reçu la même erreur mais de la application, et est tombé sur ce fil lors de la recherche. La réponse suivante peut ne pas s'appliquer à tests unitaires, mais je suis en laissant au cas où quelqu'un d'autre terres ici avec le même message d'erreur mais dans leur application.

Si vous recevez Google Sender ID must not be nil or empty à partir de votre application, il est probablement causé par une Entrée manquante sous GCM_SENDER_ID dans le .plist fichier).

il y a 2 façons en mesure de résoudre:

Fusil de chasse

il suffit de remplacer l'ensemble de l' GoogleService-Info.plist dans votre projet avec un fraîchement téléchargé .fichier plist de firebase, qui devrait contenir l'entrée appropriée pour votre application GCM_SENDER_ID.

Une seule Ligne de Code

dans la console firebase, allez dans Paramètres (icône de vitesse à côté de la vue D'ensemble), puis dans messagerie Cloud. Copier la valeur sous Sender ID. Dans Xcode allez à votre GoogleService-Info.plist fichier, de créer une entrée pour GCM_SENDER_ID coller de la valeur.

-1
répondu Thompsonmachine 2017-04-26 00:15:38
la source

Autres questions sur