28 votes

La configuration de Firebase échoue - Swift

Dans mon application, j'utilise avec succès Firebase et dans AppDelegate, je fais la configuration:

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

Maintenant, je fais des tests unitaires sur la cible associée et quand je la lance, je reçois des erreurs:

 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)
 

Aucun conseil?

16voto

Michal Klein Points 220

Je viens de remarquer que ça commence à m'arriver et que mes builds travis échouent avec Firebase 3.16. J'ai rétrogradé à 3.7.1 qui était la version que j'avais précédemment sur le projet et cela fonctionne à nouveau.

Je n'ai pas eu le temps de m'y intéresser davantage, mais c'est une solution rapide. Il peut s'agir d'un bogue Firebase ou ils ont peut-être changé quelque chose et la configuration est différente maintenant.

Edit: Apparemment, le retour à 3.15 fonctionne assez bien.

12voto

markshiz Points 1040

Début de Firebase 3.16.0, il semble que Google Firebase n'est pas de ramasser l' GoogleService-Info.plist de l'unité de test de construire, même si l' plist est inclus dans l'application et de l'unité de test cibles. Cela ne semble pas être résolu en 3.17.0. Comme d'autres l'ont noté, la rétrogradation à la 3.15.0 semble éluder la question.

Mais pour beaucoup, l'initialisation de Firebase lors de tests unitaires peut ne pas être nécessaire, et en fait involontaire, par exemple, vous ne voulez probablement pas Firebase de déclaration de l'unité de test se bloque. Dans ces scénarios, vous pouvez facilement ajouter une garde autour de FIRApp.configure() de ne pas l'initialiser lors de l'exécution des tests unitaires via le suivant:

import Foundation

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

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

Ensuite, assurez-vous de définir la variable d'environnement TEST=1 seulement dans vos schémas de tests.

7voto

Rizwan Sattar Points 121

Cause Probable

C'est probable que se produise en raison de la façon dont votre Pod dépendances sont mis en place. Voyez-vous des avertissements à partir de Xcode sur de multiples implémentations définis dans les deux classes, tels que:

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 oui, cela signifie que vous avez probablement besoin d'ajuster votre pod dépendances de configuration. Depuis un XCTest la cible qui apporte également dans l'application hôte cible, il est possible d'obtenir plusieurs importations de l'objet même. Dans ce cas, FIRApp était initialisation de l'ID de l'Instance, mais il était à l'origine de l'ID d'Instance de vérifier avec les autres FIRApp, qui disait que ce n'était pas configurée. C'est ce qui explique pourquoi il plante en disant qu'il ne peut pas trouver l'application qui initialisé il.

Voir morganchen12@'s réponse dans Github pour voir un exemple d'un bon Podfile.

Réponse Originale À Cette Question Ci-Dessous:

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

  1. Firebase ne trouvez pas votre GoogleService-Info.plist dans vos tests unitaires d'accueil de l'application bundle, ou
  2. L' GoogleService-Info.plist le fichier est absent de l' GCM_SENDER_ID - clés ou a une valeur vide en elle.

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 (il sera un tas de chiffres, comme 3252652634).

Je vais essayer de comprendre pourquoi l' GoogleService-Info.plist peuvent apparemment être trouvés avec 3.15.x vs 3.16.0 et plus tard.

En outre, comme @markshiz dit, vous ne pouvez pas réellement envie Firebase pour être le démarrage lors de votre test unitaire pour votre application. Vous pouvez mettre votre FIRApp.configure() appel derrière un if, en vérifiant si l'application est en cours d'exécution comme une unité de test.

Pour également aider à déboguer cela, pourriez-vous exécuter votre application de test avec la variable d'environnement -FIRDebugEnabled ensemble? La sortie de ce serait très utile.

4voto

Hooman Points 11103

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

 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 écrivez 3.15 place, il installerait toujours le 3.16.0 défectueux.

1voto

William Hu Points 16

La base de feu mise à jour vers 4.1.0 a résolu mon problème. De nombreux avertissements ont également suivi. Je suggérerais de mettre à jour Firebase

 pod 'Firebase', '~> 4.1.0'
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X