not found firebasecore swift xcode unit-testing firebase

swift - firebasecore - firebase h file not found



La configuraciĆ³n de Firebase falla-Swift (8)

Causa probable

Es probable que esto ocurra debido a la configuración de las dependencias de su Pod. ¿Estás viendo advertencias de Xcode sobre múltiples implementaciones definidas en ambas clases, tales como:

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 es así, significa que probablemente necesite ajustar la configuración de dependencias de su pod. Como un objetivo XCTest realmente también trae el objetivo de la aplicación host, es posible obtener múltiples importaciones del mismo objeto. En este caso, FIRApp estaba inicializando ID de instancia, pero estaba causando que el ID de instancia verificara con el otro FIRApp, que decía que no estaba configurado. Esto explica por qué se cuelga diciendo que no puede encontrar la aplicación que lo inicializó.

Vea la respuesta de morganchen12 @ en Github para ver un ejemplo de un Podfile correcto .

Respuesta original a continuación:

Entonces, esto está sucediendo por posiblemente dos razones:

  1. Firebase no puede encontrar su GoogleService-Info.plist en el paquete de la aplicación de host de prueba de la unidad, o
  2. El archivo GoogleService-Info.plist no tiene la clave GCM_SENDER_ID o tiene un valor vacío.

Podemos eliminar (2) con bastante facilidad: ¿puede inspeccionar su archivo GoogleService-Info.plist para ver si tiene un GCM_SENDER_ID aspecto GCM_SENDER_ID (será un grupo de números, como 3252652634).

Investigaré por qué el GoogleService-Info.plist aparentemente se puede encontrar con 3.15.x vs 3.16.0 y posterior.

Además, como dijo @markshiz , es posible que en realidad no quieras que Firebase se inicie durante la prueba de tu aplicación. Puede poner su llamada a FIRApp.configure() detrás de una instrucción if, verificando si la aplicación se está ejecutando como una prueba unitaria.

Para ayudar a depurar esto, ¿podría ejecutar su aplicación de prueba con la variable de entorno -FIRDebugEnabled set ? El resultado de eso sería muy útil.

En mi aplicación, estoy usando Firebase con éxito y en AppDelegate hago la configuración:

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

Ahora hago algunas pruebas unitarias en el objetivo relacionado y cuando lo lanzo obtengo errores:

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

Versiones:

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

¿Algún consejo?


¿Has probado esto?

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)


A partir de Firebase 3.16.0 , parece que Google Firebase no está recogiendo el GoogleService-Info.plist de la compilación de prueba de la unidad, incluso si el plist está incluido tanto en la aplicación como en los objetivos de prueba de la unidad. Esto no parece resolverse en 3.17.0 . Como otros han notado, la degradación a 3.15.0 parece eludir el problema.

Sin embargo, para muchos, la inicialización de Firebase durante las pruebas unitarias puede no ser necesaria, y en realidad no intencionada; por ejemplo, probablemente no quieras que Firebase informe sobre bloqueos de pruebas unitarias. En estos escenarios, puede agregar fácilmente un guardián alrededor de FIRApp.configure() para no inicializarlo mientras ejecuta las pruebas unitarias a través de lo siguiente:

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

Luego, asegúrese de definir la variable de entorno TEST=1 solo en su esquema de prueba.


La base de fuego mejorada a 4.1.0 resolvió mi problema. También muchas advertencias fueron muy lejos. Sugeriría actualizar Firebase

pod ''Firebase'', ''~> 4.1.0''


Me acabo de dar cuenta de que comenzó a sucederme y mis compilaciones travis están fallando con Firebase 3.16. Bajé a 3.7.1, que era la versión que tenía anteriormente en el proyecto y está funcionando de nuevo.

No he tenido tiempo de investigar más, pero es una solución rápida. Puede ser un error de Firebase o podrían haber cambiado algo y la configuración ahora es diferente.

Editar: Aparentemente retroceder a 3.15 funciona bastante bien.


Me encontré con el mismo problema y ninguna de las soluciones propuestas me ayudó.

Estaba viendo las advertencias de implementación de clases duplicadas como se menciona al final de este problema: https://github.com/firebase/FirebaseUI-iOS/issues/271

Eliminar todos los marcos de Firebase de los Objetivos de prueba mencionados en esa publicación me ha solucionado el problema.


Me tomó un tiempo encontrar la versión correcta para instalar hasta que 3.17.0 esté fuera.

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

Esto funciona garantizado

Si olvida el .0 y escribe 3.15 lugar, aún así instalaría el 3.16.0 defectuoso.


Recibí el mismo error pero desde la aplicación principal , y encontré este hilo cuando busqué. La siguiente respuesta puede no ser aplicable para pruebas unitarias , pero la dejo en caso de que alguien más aterrice aquí con el mismo mensaje de error pero en su aplicación principal .

Si recibe Google Sender ID must not be nil or empty de su aplicación, es probable que se deba a una entrada faltante en GCM_SENDER_ID en el archivo .plist ).

Hay 2 formas en que puedes arreglar:

Escopeta

Simplemente reemplace todo GoogleService-Info.plist en su proyecto con un archivo .plist recién descargado de firebase, que debe contener la entrada adecuada para el GCM_SENDER_ID su aplicación.

One-Line-of-Code

En la consola de Firebase, vaya a Configuración (ícono de ajustes al lado de Información general), luego, Mensajería en la nube. Copie el valor debajo de Sender ID . Del Sender ID . En Xcode vaya a su archivo GoogleService-Info.plist , cree una entrada para GCM_SENDER_ID y pegue el valor.