iOS: la compilación falla con CocoaPods no puede encontrar archivos de encabezado

190

Tengo un proyecto de iOS usando CocoaPods. Todo funcionaba sin problemas hasta que otro desarrollador comenzó a trabajar en el mismo proyecto. Hizo algunos cambios (solo hasta el código que yo sepa) e hizo una nueva rama en el repositorio. Revisé su rama e intenté compilarla, pero recibo un error: no se encontró el archivo ASLogger / ASLogger.h.

Incluso si elimino todo el proyecto y hago una copia nueva y uso 'pods install'. El fallo de construcción sigue ahí. ¿Tienes alguna idea de dónde puede estar el problema? Si necesita más información, solo pregunte.

Filip Majernik
fuente
3
En lugar de usar el estilo de comillas dobles, #import "ASLogger.h" probé esto, #import <ASLogger.h> Y funcionó para mí :)
Baig
2
FYI: La respuesta simple de Baigs resolvió mi problema al no encontrar el encabezado.
Pedroinpeace

Respuestas:

205

Actualizar

Asegúrese de que su Podfileincluye link_withen los destinos que faltan un archivo de configuración. Cocoapods solo establece el primer objetivo por defecto de lo contrario. p.ej

platform :osx, '10.7'
pod 'JSONKit',       '~> 1.4'

link_with 'Pomo', 'Pomo Dev', 'Pomo Tests'

------ Fin de actualización


Nota: Tenga en cuenta que debe buscar en Proyecto-> Información-> Configuraciones para los pasos a continuación.


Tuve síntomas similares y descubrí que el pods.xcconfigarchivo no estaba incluido en el específico targetque estaba tratando de construir. Algunas de las otras soluciones sugeridas funcionaron para mí, pero esta parecía abordar parte del problema subyacente.

Pods.xcconfig not working

La solución simple era cambiar el conjunto del archivo de configuración para los objetivos que no tenían un conjunto.

Pods.xcconfig working

menea
fuente
44
Para mí, '' instalación de pods '' solo establece esto en el primer objetivo. Hacer lo que se sugiere en esta respuesta resolvió mi problema.
Troy
1
Finalmente, una solución: ¡Se agregaron Pods SOLO al primer objetivo, no a varios objetivos de lanzamiento de prueba (alfa, beta, candidato de lanzamiento)! ¡Muchas gracias!
JOM
Usar link_withpara especificar mi otro objetivo funcionó para mí. Muchas gracias. Acabo de pasar varias horas en esto.
Dylan Hand
esto funcionó para mí! Cloné un proyecto existente y luego actualicé los pods. así que supongo que los pods de actualización cambiaron algunas configuraciones, o el desarrollador anterior estaba usando xcode 5 o algo así (estoy en xcode 6), ¡gracias!
invernadero
44
link_withno es compatible con Cocoapods 1.0 o superior.
Vive
90

Actualizar

He actualizado esto desde mi respuesta original, que recibió el voto negativo, así que espero que esto ayude. Y si lo hace, espero que recupere mi voto.

Si los encabezados no se importan, probablemente tenga un conflicto en el HEADER_SEARCH_PATHS. Intente y agregue $(inherited)a las rutas de búsqueda de encabezado en su Configuración de compilación para asegurarse de que extraiga cualquier ruta de búsqueda incluida en el archivo .xcconfig de sus CocoaPods.

Esto debería ayudar con cualquier conflicto e importar su fuente correctamente.

Bill Burgess
fuente
2
Me enfrenté a un problema: los archivos de pod no se detectaban en la aplicación y el 'problema de carpeta obstruida svn' que ocurre cuando ha eliminado o movido los subdirectorios .svn: Solución: siguiendo los pasos: 1. Desinstale CocoaPods de la aplicación solo. El archivo xcodeproj existe (referido: stackoverflow.com/questions/16427421/… ) 2.Instale podfiles nuevamente (referido: raywenderlich.com/12139/introduction-to-cocoapods ) 3. Se agregó el indicador $ (heredado) en el objetivo 'HEADER_SEARCH_PATHS' y 'OTHER_LDFLAGS' de la aplicación.
Alphonse R. Dsouza
1
También es posible que deba agregar $ (heredado) a su configuración FRAMEWORK_SEARCH_PATHS.
George
1
@ AlphonseR.Dsouza su solución funcionó para mí: agregó $ (heredado) a OTHER_LDFLAGS ¡gracias un millón!
Nika Kasradze
3
Se debe agregar $ (heredado) en la configuración del proyecto o en la configuración de destino?
skypirate
Tuve un problema similar, no tenía experiencia previa con cápsulas. En el Podfile también, no mencioné 2 objetivos. Sí, tenía 2 objetivos. Una vez que mencioné el segundo objetivo y actualicé el archivo Pod, la terminal indicó una advertencia similar a su sugerencia de agregar $ heredado. Lo hice y funcionó perfectamente.
Jasmeet
78

1.Compruebe

configuración de compilación -> Ruta de búsqueda -> Rutas de búsqueda de encabezado de usuario ->

  • "$ {PODS_ROOT} /" recursivo

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

2.Compruebe el estilo de importación (KEY POINT), si podfileha configurado

use_frameworks!

En el tuyo File-Bridging-Header.h, al formateador debería gustarle esto

#import "MBProgressHUD.h"

más debería estar debajo

#import <MBProgressHUD.h>

3. ¡Eso debe ser trabajo! Créeme

Albert.Qing
fuente
1
La mayoría de los errores desaparecen. Sin embargo, ¿qué debo hacer cuando una dependencia tiene una declaración de importación como: #import <EARestrictedScrollView / EARestrictedScrollView.h>. Luego, el compilador me dice que escriba en su lugar #import EARestrictedScrollView.h. Pero no puedo modificar mi pod.
producción
62

Archivos de encabezado, serás mi muerte ...

Finalmente conseguí que funcione agregando (incluyendo comillas)

"${PODS_ROOT}/BuildHeaders"

a la entrada Rutas de búsqueda de encabezado de usuario y marcando 'recursivo'.

averydev
fuente
66
Tenga en cuenta que las citas son muy importantes aquí. Sin ellos, no podría hacerlo funcionar.
DiscDev
55
Ya tenía +1 $(inherited)(no estaba funcionando) pero agregar esto funcionó para mí.
Fui robado el
No entendí lo que intentas decir. : / ¿Podrías dar más detalles?
rohan-patel
Otro truco útil es eliminar el espacio de trabajo y el directorio de pods y la instalación de pod desde cero. Esta es generalmente una solución más completa.
averydev
1
Esto finalmente ayudó a AppCode a encontrar correctamente todas las importaciones de archivos de encabezado. Sin esto, funcionó en xCode, pero no en AppCode. ¡Gracias!
sarsonj
52

Descubrí ${PODS_HEADERS_SEARCH_PATHS}que falta y no está definido en mi rama de desarrollo de git, así que agregué "$(SRCROOT)/Pods/Headers/"para las rutas de búsqueda de encabezado con recursive

Eso esta bien para mi

mactive
fuente
Esta fue la respuesta para mí, actualicé cocoapods y creo que eso hizo que los PODS_HEADERS_SEARCH_PATHS desaparecieran. Mi solución fue similar a esta, pero usé "$ (PODS_ROOT) / Headers"
Andrew Aitken
Las otras respuestas no funcionaron para mí, pero esta sí. $(SRCROOT)/Pods/Headers
Notaré que no incluí
@Hlung hola, ¿dónde debo agregar $ (SRCROOT) / Pods / Headers /? Se lo
agradezco
1
@VAAA Target> Configuración de compilación>
Ruta de
Creo que esta es la respuesta correcta, lo que debería aceptarse, ¿qué opinas @Filip Majernik
Ratul Sharker
35

Las otras dos respuestas no ayudaron aquí. Encontré otros 2 problemas que podrían solucionarlo:

EDITAR Puede verificar un enlace simbólico de esta manera: cree un archivo de texto llamado 'verificar' sin una extensión. copie estas líneas en él:

file=/Users/youUserName/XcodeProjectName/Pods/BuildHeaders/SVProgressHUD/SVProgressHUD.h
if [[ ! -e $file &&  -L $file ]]; then
  echo "$file symlink is  broken!"
else
  echo "symlink works"
fi

Luego vaya a la terminal, cambie a la carpeta donde se encuentra su archivo de verificación y escriba

bash check
brainray
fuente
¡Muchas gracias! La primera entrada lo resolvió para mí. Pods se estableció solo para el primer objetivo en nuestro proyecto. Esto compiló bien, pero el otro objetivo no. Así que también le agregué la configuración de Pods y ahora el problema desapareció.
mwidmann
No veo 'Pods' en las Configuraciones ... ¿significa esto que mi enlace simbólico está roto?
Adamski
35

Esto es lo que funcionó para mí:

Vaya a la pestaña Destino> "Configuración de compilación" y busque la configuración "Rutas de búsqueda de encabezado de usuario".

Establezca esto en "$ (BUILT_PRODUCTS_DIR)" y marque la casilla de verificación "Recursiva".

Ahora el objetivo creado buscará en el directorio de compilación compartido del espacio de trabajo para ubicar los archivos de encabezado enlazables.

====

ACTUALIZAR

Tuve un problema similar (aunque ligeramente diferente) recientemente. Resultó que Xcode no pudo encontrar los Pods porque había abierto el .xcodeprojarchivo en lugar del .xcworkspacearchivo. Podría ayudar a otros en el futuro.

Snowcrash
fuente
1
Esto funcionó para mí, pero solo después de salir de Xcode, ejecutar pod instally volver a abrir.
Ken M. Haggerty
@Snowcrash qué Target? el objetivo de la vaina o el objetivo principal del proyecto?
VAAA
19

Si nada de lo anterior funcionó para usted y está encontrando este error porque acaba de cambiar a use_frameworks!su Podfile, siga leyendo:

Probé todas las soluciones anteriores y mucho más antes de saber que no se trata de buscar rutas de encabezado en mi caso particular; es que cuando cambias ause_frameworks! su Podfile ya no necesita incluir marcos en su encabezado de puente, y de hecho Xcode arrojará el muy inútil error "no se puede encontrar el encabezado".

Lo que debe hacer es eliminar todas las importaciones del archivo de encabezado de puente y, en su lugar, usar Swift import Module en sus archivos Swift individuales según sea necesario, tal como lo haría para los marcos Swift.

Y si está utilizando cualquiera de los encabezados de marco en sus clases de Obj-C (en mi caso tenemos una clase de conveniencia que usó el FBSDK), debe cambiarlo de una importación local a una global (esto significa cambiar #import "Module.h"a #import <Module/Module.h>, que debería completarse automáticamente) para ti cuando comienzas a escribir el nombre del marco. En mi caso lo fue <AFNetworking/AFHTTPRequestOperationManager.h>).

Editar: desde entonces aprendí que hacer un @import Moduleusa el archivo paraguas que es aún más seguro.

Scott Fister
fuente
16

¿Intentaste importar el estilo Cocoapods?

#import <ASLogger.h>

La información en el sitio no es realmente clara, presenté una solicitud de extracción:

https://github.com/CocoaPods/cocoapods.org/pull/34

Actualización: retiraron mi solicitud :)

Tieme
fuente
En lugar de usar el estilo de comillas dobles, #import "ASLogger.h" probé esto, #import <ASLogger.h> Y funcionó para mí :)
Baig
He intentado esto antes y me ha funcionado, pero a veces ocurre un problema diferente cuando no funciona. También puede usar el formato <Podname / Filename.h> en al menos algunas situaciones.
funroll
¡Sí, esto también funcionó para mí! Ninguna cantidad de limpieza y eliminación de los datos derivados lo resolvió, pero esto funcionó.
PostCodeism
10

El wiki da consejos sobre cómo resolver este problema:

Si Xcode no puede encontrar los encabezados de las dependencias:

Verifique si los archivos de encabezado de pod están correctamente enlazados en Pods / Headers y no está anulando HEADER_SEARCH_PATHS (ver # 1). Si Xcode aún no puede encontrarlos, como último recurso puede anteponer sus importaciones, por ejemplo, #import "Pods / SSZipArchive.h".

tilo
fuente
14
¿Podría alguien explicar exactamente cómo "Verificar si los archivos de encabezado de pod están correctamente enlazados en Pods / Headers" por favor?
Dave Collins el
por favor vea mi respuesta anterior para saber cómo verificar un enlace simbólico
brainray
Consulte también la respuesta de brainray sobre Configuraciones antes de modificar sus declaraciones de importación.
Rog
Sí, algunos pods están vinculados a un directorio no válido, como $(PROJECT_DIR)/Pods/Headers/Public/xxx/ios/xxx.h, hay un extra de ioscarpeta ...
Dong Ma
9

Fui el único desarrollador en el equipo que experimentó este mismo problema, funcionó perfectamente para todos, así que me di cuenta de que tenía que ser mi entorno. Intenté uno git clonedel mismo proyecto en otro directorio y se compiló perfectamente, luego me di cuenta de que tenía que ser algo de almacenamiento en caché de Xcode para mi ruta de proyecto en algún lugar, que "en algún lugar" es la carpeta DerivedData, simplemente elimínelo y haga una compilación limpia de su proyecto, funcionó para mí.

Puede obtener la ruta e incluso abrir la carpeta en el buscador yendo a:

Xcode -> Preferencias -> Ubicaciones -> ** DerivedData

bithavoc
fuente
1
En mi caso, el problema apareció después de actualizar las cápsulas, así que pensé que en cocoapods debería buscar el problema. He probado todas las soluciones aquí sin suerte y finalmente acabo de borrar DerivedData, ¡y me ayudó! gracias
Varrry
3

Actualizaré las siguientes cosas en mi configuración de compilación y no obtuve ningún error. Para verificar estas son las cosas mientras actualiza sus cocoapods.

Configuración de compilación

Habilitar código de bit: SÍ (si está utilizando código de bit)

Preprocesador de macros - $ (heredado)

Otro indicador de enlazador: objc, -lc ++, $ (heredado)

Construir solo arquitectura

Depuración: sí

Relese - No

Ruta de búsqueda

Ruta de búsqueda del marco: $ (heredado) $ (PROJECT_DIR)

Ruta de búsqueda de la biblioteca: $ (heredada)

Ruta de búsqueda de encabezado: $ (heredado)

Surezz
fuente
2

Si tuvo los errores de construcción después de una " instalación de pod " o una " actualización de pod ", puede ser que uno de sus pods haya sido construido con XCode 6.3 mientras todavía está utilizando una versión anterior.

En mi caso, tuve que actualizar mi OSX de disidentes a Yosemite para tener Xcode 6.3 y resolver el problema

Omaty
fuente
Hola @omaty, ¿es esta la única solución? Actualmente estoy ejecutando Mavericks con Xcode 6.2
goelv
1
Hola @goelv en mi caso fue la única solución que encontré. Yo era como tú en Mavericks y Xcode 6.2.
Omaty
Creo que incluso yo tengo el mismo problema. Mi compañero de equipo tiene Xcode 6.3 en Yosemite y funciona bien para él, mientras que estoy luchando por deshacerme del problema del encabezado no encontrado en Mavericks en Xcode 6.2.
Sagar S. Kadookkunnan
1
Seguimiento: También actualicé la máquina a Yosemite y Xcode 6.3.1, ahora puedo construir sin ningún problema.
Sagar S. Kadookkunnan
1

para mí el problema estaba en el valor de otras banderas de Linker. Por alguna razón no tenía citas en banderas como -l"xml2" -l"Pods-MBProgressHUD".

berilio
fuente
Estaba teniendo problemas con el Cocoapod de Localytics. Debajo Other Linker Flagsencontré dos entradas: -|Localyticsy |-PodsLocalytics. Los eliminé y luego pude compilar.
Chris
1

Tuve que descargar el zip desde git hub y arrastrar los archivos faltantes al Finder en las rutas correspondientes en Pod / ...

neelamc23
fuente
1

Lo que funcionó para mí fue seleccionar el proyecto Pods, encontrar y seleccionar el marco de destino con el encabezado faltante en el directorio de destino del proyecto Pod y establecer "Build Active Architecture Only" en "No" en "Arquitecturas" en la configuración de compilación del objetivo.

Aaron
fuente
1

Tengo el mismo problema, pero las soluciones anteriores no pueden funcionar. Lo arreglé haciendo esto:

  1. Eliminar todo el proyecto
  2. Ejecute git clone el proyecto y ejecute el paquete de instalación de pod exec
  3. cd el objeto y ejecutar add remoto upstream your-remote-rep-add
  4. git buscar aguas arriba
  5. git checkout master
  6. git merge upstream / master

Y luego funciona.

Azure Yu
fuente
1

Para mí, lo que solucionó fue que el objetivo de implementación de iOS para mi proyecto Pods era más bajo que mi proyecto en sí. Una vez que hice lo mismo que mi proyecto, pude encontrar el archivo de encabezado.

Josh
fuente
hermano! te mereces 1000 votos a favor. Estuve atrapado con esto durante 4 horas y su solución me ayudó. muchas gracias hermano muchas gracias!
warzone_fz
0

Estaba en la semilla GM de Xcode 5.0 y no pude conseguir que ninguna de estas respuestas funcionara. Intenté cada respuesta en SO en múltiples preguntas diferentes sobre las importaciones de encabezados con cocoapods.

Finalmente encontré una solución que me funcionó : me actualicé a Xcode 5.0 a través de Mac AppStore (instalado encima de la semilla GM) y ahora las importaciones de encabezado funcionan como se esperaba.

También todavía tenía una versión beta de Xcode 5 en mi sistema y también la eliminé. Tal vez fue una combinación de las dos cosas, pero espero que esto ayude a alguien más.

DiscDev
fuente
0

Esta fue la respuesta para mí, actualicé cocoapods y creo que eso hizo que los PODS_HEADERS_SEARCH_PATHS desaparecieran. Mi solución fue similar a esta pero usé "$ (PODS_ROOT) / Headers" - Andrew Aitken

Muchas gracias por esta respuesta. Tuve dificultades para buscar formas de solucionar mi problema. Muchas gracias.

usuario1494912
fuente
0

Ninguna de las respuestas me ayudó (tenía mis pods vinculados con todos los objetivos, configuró las configuraciones correctamente, configuré correctamente las rutas de búsqueda "$ (heredado)", etc.).

El problema desapareció por sí solo después de que actualicé cocoapods a la versión más reciente de depuración usando el comando estándar de instalación / actualización:

   gem install cocoapods --pre

o:

   sudo gem install cocoapods --pre

(si se usó sudo durante la instalación).

Debe haber sido cocoapods bug.

Lukasz
fuente
0

Una solución simple es: 1. Eliminar la carpeta Pods y el archivo Podfile.lock. Pero no elimine Podfile 2. Ejecute el siguiente comando en la carpeta raíz del proyecto:

pod install
farhad rubel
fuente
Solucioné mi problema con esta solución.
dobiho
0

Aquí hay otra razón: todas las rutas de encabezado parecían estar bien, pero aún teníamos un error en el archivo precompilado (.pch) al intentar leer un encabezado de pod

(es decir, #import <CocoaLumberjack / CocoaLumberjack.h>).

Al observar la salida de compilación en bruto, finalmente noté que el error estaba rompiendo nuestro objetivo de extensión de Watch OS, no el objetivo principal que estábamos construyendo, porque también estábamos importando el archivo de encabezado precompilado .pch en los objetivos de Watch OS, y estaba fallando ahí. Asegúrese de que la configuración de destino de Watch OS que la acompaña no intente importar el archivo .pch (¡especialmente si establece esa importación desde la configuración de objetivo maestro, como hice yo!)

Owen Hartnett
fuente
0

Descubrí que incluir la biblioteca como una instalación de pod directamente ayuda a las bibliotecas dinámicas. Por ejemplo, para Firebase:

pod 'RNFirebase', :path => 'path/to/node_modules/react-native-firebase/ios'

O para ASLogger:

pod 'ASLogger', :path => 'path/to/node_modules/aslogger/ios' // path to header files

Cambiar o codificar HEADER_SEARCH_PATHSno me ayudó. Si el error se repite, no es necesario rm -rf node_modulesni eliminar el archivo pod, etc., me pareció útil borrar el caché.

Para reaccionar nativo, corro

    rm -rf $TMPDIR/react-native-packager-cache-*
    rm -rf $TMPDIR/metro-bundler-cache-*
    rm -rf $TMPDIR/metro-* 
    rm -rf $TMPDIR/react-* 
    rm -rf $TMPDIR/haste-*
    rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
    npm start -- --reset-cache

Para Xcode elimino carpetas en ~/Library/Developer/Xcode/DerivedData

ehacinom
fuente
0

Creo que una solución definitiva es ir Build settings -> Search Path -> User Header Search Paths, encontrar la ruta de la biblioteca y recorrerla en un Finder. Asegúrese de que exista toda la ruta, incluida su ruta de importación.

Para mí mi camino era más corto que en un tutorial. En el tutorial fue algo así #import <SDK/path/to/sdk/File.h>, pero resulta que es solo#import <SDK/File.h>

Simon Moshenko
fuente
-1

Tengo otra solución trabajada aquí,

  1. Salir de Xcode
  2. Abrir Xcode y limpiar proyecto
  3. Construir pods proyecto primero
  4. Proyecto de construcción
Pramod Más
fuente
-2

Resolví estos problemas para Xcode 8.2.1 arrastrando y soltando el marco que quiero usar.

Dhruv Narayan Singh
fuente