pods ios xcode unit-testing cocoapods xctest

ios - pods - pod init



Prueba de la Unidad Xcode con Cocoapods (11)

He estado golpeándome la cabeza contra la pared con esto durante los últimos días, pero a pesar de las múltiples búsquedas de Google / SO / Github, ¡no puedo encontrar una solución a los problemas que estoy teniendo!

Todo lo que estoy tratando de hacer es crear algunas pruebas unitarias para mi aplicación que utilicen vainas Firebase.

Estoy usando Xcode 7.3.1 y Cocoapods 1.0.1. Actualización: el problema persiste con Xcode 8.0

Con este podfile:

platform :ios, ''9.0'' use_frameworks! inhibit_all_warnings! target ''MyApp'' do pod ''Firebase'' pod ''Firebase/Auth'' pod ''Firebase/Database'' pod ''Firebase/Storage'' target ''MyAppTests'' do inherit! :search_paths end end

En mi clase XCTest obtengo

Falta el módulo requerido ''Firebase''

error en @testable import MyApp

Alternativamente con este podfile:

platform :ios, ''9.0'' use_frameworks! inhibit_all_warnings! def common_pods pod ''SwiftyTimer'' pod ''Firebase'' pod ''Firebase/Auth'' pod ''Firebase/Database'' pod ''Firebase/Storage'' end target ''MyApp'' do common_pods end target ''MyAppTests'' do common_pods end

Las pruebas se compilan pero mi consola está llena de advertencias, por ejemplo:

La clase <-FirebaseClassName-> se implementa en ... MyApp ... y ... MyAppTests ... Se usará uno de los dos. Cuál es indefinido


  1. Seleccione la configuración del objetivo de prueba de la unidad.
  2. Vaya a Configuración de compilación.
  3. Busque rutas de búsqueda de encabezado.
  4. Agregue este valor $ (SRCROOT) / Pods con recursivo, luego Xcode resolverá la ruta por usted.

Example


Agregue "$ {PODS_ROOT} / Firebase / Core / Sources" a su objetivo de Pruebas solo en Configuración de compilación -> Rutas de búsqueda de encabezado


Como mencionó un problema relacionado con las rutas de búsqueda de encabezado después de la instalación de CocoaPods.

Tengo un proyecto con múltiples objetivos donde el pod ''Firebase'' incrustado en un módulo separado, digamos MyProject-Shared . Firebase pod en ''Podfile'' instalado solo para el objetivo ''MyProject-Shared''. Otros módulos que desean usar ''MyProject-Shared'' no se pueden compilar debido a un error:

''falta el módulo requerido "Firebase"''

El truco en mi caso fue agregar la siguiente ruta de búsqueda de encabezado faltante en la configuración de compilación de cada objetivo que hace referencia a Analytics-Framework :

"${PODS_ROOT}/Firebase/CoreOnly/Sources"

Por favor vea la foto a continuación:

Espero que te ahorre tiempo.


El problema es que Firebase hace algo especial con las Rutas de búsqueda de encabezado después de que CocoaPods genera su propio valor para la configuración para que CocoaPods no detecte este cambio para llevarlo al objetivo de prueba. Puedes resolver esta de dos maneras:

  1. Localice MyAppTests.<configuration>.xcconfig en el navegador de archivos y agregue lo siguiente a HEADER_SEARCH_PATHS :

    ${PODS_ROOT}/Firebase/Analytics/Sources [*]

  2. Busque la configuración de las rutas de búsqueda de encabezado en Configuración de compilación y agregue el mismo valor que en la opción 1 a la lista. No debería necesitar configurarlo como recursivo.

* Según el comentario de AKM, esto cambió a ${PODS_ROOT}/Firebase/Core/Sources en la versión 3.14.0


El problema se registra en el proyecto firebase aquí:

https://github.com/firebase/firebase-ios-sdk/issues/58

Hay una solución alternativa:

Agregue "$ {PODS_ROOT} / Firebase / Core / Sources" a su objetivo de Pruebas solo en Configuración de compilación -> Rutas de búsqueda de encabezado

pero esto también se soluciona actualizando a CocoaPods 1.4.0 o posterior, que es una mejor solución.

En el momento en que escribo esto (noviembre de 2017), cocoapods 1.4.0 todavía está en beta, por lo que para instalarlo debe solicitar explícitamente la beta:

gem install cocoapods --pre

Esto y luego hacer una pod install resolvió el problema al ejecutar mis pruebas.


Intenté todo lo anterior y me encontré con varios errores diferentes, originalmente comenzando con la Missing required module ''Firebase'' , luego obteniendo "Class ... is implemented in both ... " o problemas con el enlazador si intenté agregar Firebase Pods a mi prueba objetivo.

La solución que funcionó para mí fue:

  1. Elimine el objetivo de prueba por completo del Podfile y ejecute ''pod update'' para asegurarse de que el proyecto XCode esté sincronizado.
  2. Abrir la configuración de compilación de mi objetivo de prueba y actualizar las rutas de búsqueda de encabezado para incluir solo los siguientes 3 elementos:
    • $(inherited) non-recursive
    • $(SRCROOT)/Pods/Headers/Public recursive
    • $(SRCROOT)/Pods/Firebase recursive

En este punto, limpiar la carpeta de compilación, reconstruir y volver a ejecutar las pruebas funcionó para mí. ¡Espero que esto ayude a alguien!


Intente cambiar la herencia a :complete , como en:

target ''MyAppTests'' do inherit! :complete end

Es importante destacar que permite a cualquier otra persona que revise su repositorio simplemente hacer una pod update como de costumbre, sin tener que copiar archivos .xcconfig u otro hacker solo para construir.


La solución para mí fue actualizar cocoapods a la versión 1.1.0.rc.2.

sudo gem install cocoapods --pre


Tres pasos antes de que pueda hacer que esto funcione:

CocoaPods: 1.5.0 Swift 4 Firebase: 4.13.0

Paso 1: asegúrese de agregar el siguiente bloque de destino en su podfile.

# Uncomment the next line to define a global platform for your project platform :ios, ''11.3'' target ''TIMII'' do # Comment the next line if you''re not using Swift and don''t want to use dynamic frameworks use_frameworks! # Pods for TIMII pod ''Firebase/Core'' pod ''Firebase/Database'' pod ''Firebase/Auth'' pod ''Firebase/Storage'' target ''TIMIITests'' do inherit! :search_paths pod ''Firebase/Core'' end end

Paso 2: dentro de la pestaña Configuración de compilación de YourAppTests Project Navigator. Busque la fila Ruta de búsqueda de encabezado y agregue a Depurar la siguiente línea

$ (heredado) $ {PODS_ROOT} / Firebase / Core / Sources

Paso 3: en la ejecución del terminal:

actualización de pod


Tuve el mismo problema. Lo resolví moviendo el pod ''Firebase'' a mi objetivo de prueba. Cambie su Podfile a esto:

platform :ios, ''9.0'' use_frameworks! inhibit_all_warnings! target ''MyApp'' do pod ''Firebase/Auth'' pod ''Firebase/Database'' pod ''Firebase/Storage'' target ''MyAppTests'' do inherit! :search_paths pod ''Firebase'' end end


Tuve un problema similar. Expresado en términos de su pregunta, copié el contenido de mi archivo MyApp.<configuration>.xcconfig a mi archivo MyAppTests.<configuration>.xcconfig . Limpié y construí las pruebas, y funcionó.