Compilar, construir o archivar problemas con Xcode 4 (y dependencias)

96

Esta pregunta ha evolucionado durante las últimas semanas para cubrir cuestiones más generales con (y los proyectos de actualización son más antiguos s).

Sin embargo, muchos de los problemas se pueden resolver siguiendo el mismo conjunto de instrucciones.

Si tiene alguno de los siguientes problemas, pruebe los métodos de la respuesta aceptada:

  • Xcode 4 no puede archivar una aplicación
  • Xcode 4 crea un archivo inutilizable
  • Xcode 4 no crea un .ipa
  • Xcode 4 no se compila debido a errores del preprocesador
  • Xcode 4 no puede encontrar encabezados
  • El código completo de Xcode 4 no funciona
  • Las dependencias del proyecto no se compilan
  • Agregar una dependencia causa cualquiera de los problemas anteriores

Pregunta original

Título: "archivo de problema léxico o preprocesador no encontrado" en Xcode 4

Tengo un proyecto en Xcode 4 que se compilará bien y se ejecutará en el dispositivo y el simulador, pero cuando intento Archivarlo, se producen errores al buscar archivos de encabezados asociados con una biblioteca estática:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode da el error

lexical or preprocessor issue file not found 

Muchas búsquedas en Google han demostrado que muchas personas tienen este problema, pero no tienen solución. Cualquiera tiene una solución o incluso una pista.

Actualización: Las user headerrutas de búsqueda se fijan a ${BUILT_PRODUCTS_DIR}en todas las configuraciones. Se construye bien usando cualquier configuración, excepto al archivar.

Actualización 2: Merchant.h es una clase de datos básicos que se genera automáticamente y, por lo tanto, está dentro del .xcdatamodeldpaquete; sin embargo, todos los encabezados se copian en el directorio de encabezados públicos cuando se crea la biblioteca.

Richard Stelling
fuente

Respuestas:

119

NB: Los pasos a continuación resolverán el 90% de los problemas de su archivo Xcode, sin embargo, a partir de los comentarios, se sugiere que intente salir de Xcode primero. Esto puede ahorrarle horas de ajustes de configuración.

  1. Verifique que las "rutas de encabezado de usuario" sean correctas (agregue "" a las rutas de los espacios, tanto en su proyecto como en las dependencias)
  2. Establezca "Buscar siempre rutas de usuario" en SÍ
  3. Cree una llamada de grupo "Encabezados de indexación" en su proyecto y arrastre los encabezados a este grupo, NO agregue a ningún objetivo cuando se le solicite. Esto incluye cualquier encabezado dentro de su .xcdatamodeld , deberá hacer clic derecho y ver el contenido del paquete para encontrarlo.
  4. Para todas las dependencias, establezca la configuración de compilación "Omitir instalación " en "Sí"
  5. Mover los encabezados "Públicos" de las fases de compilación a "Proyecto"
  6. Establezca la configuración de compilación "Directorio de instalación" en su destino para$(LOCAL_APPS_DIR)
  7. Cambie la configuración de compilación de destino "escanear todos los archivos de origen para incluir" a SÍ. ( enlace )
  8. Con las versiones más recientes de Xcode (> 4.2), es posible que desee leer esta pregunta relacionada con los espacios de trabajo.
  9. Elimine manualmente los archivos project.xcworkspace de todos los proyectos referenciados
Richard Stelling
fuente
28
La última sugerencia es todo lo que necesitaba para solucionar este problema. Cierre y vuelva a abrir Xcode.
Chris Miles
1
Sí, lo mismo para mí, solo tuve que reiniciar Xcode. Sucedió después de que cambié el nombre y moví archivos en el proyecto.
Maurizio
Yo también. Nada más frustrante que un error que no debería existir. Genial tenerlo resuelto tan fácilmente.
maxedison
3
Nota para los usuarios de Three20 que migran proyectos antiguos de xcode3 a xcode4: es posible que deba cambiar la Preferencia de xcode / ubicaciones / avanzado / -> Ubicaciones especificadas por el objetivo. Consulte stackoverflow.com/questions/5261447/… para más información
Ben G
1
Santa mierda en el número 1. ¡Las citas! Environment $ (SRC_ROOT) por supuesto, "puede" resolverse con una ruta con espacios. ¡No pude entender por qué comprimir mi proyecto y extraerlo en otro lugar resultó en un error de compilación!
Erik Kerber
13

Tuve el mismo problema en XCode 4: "No se encontró el problema léxico o del preprocesador MyFile.h". Sin embargo, MyFile.m no era una biblioteca estática, solo una clase estándar. Y MyFile.m y MyFile.h se incluyeron correctamente e indexaron en el proyecto.

Entonces ... salí de XCode y el Simulador, luego los reinicié y el problema desapareció.

richardsun
fuente
Tuve una situación similar, pero el error no deseado se mostró debido a una referencia incorrecta a una propiedad no relacionada que estaba en la misma clase (básicamente me olvidé de usar self): extraño.
JARC
11

Descubrí que el problema desapareció cuando cambié la configuración de compilación de destino "escanear todos los archivos de origen en busca de inclusiones" de no a sí.

doc taco
fuente
6

Pude resolver este problema sin ningún cambio en ninguna de las configuraciones de compilación simplemente copiando los archivos .h en el directorio del Proyecto en el buscador. NO los agregué al proyecto en absoluto. Simplemente tenerlos en el directorio del sistema de archivos del proyecto parecía ser suficiente para permitir que el enlace implícito de Xcode funcionara correctamente. Más detalles aquí .

David Avendasora
fuente
+1 He agregado un enlace a la pregunta int él aceptó la respuesta, ¡gracias por la información!
Richard Stelling
4

Tuve un problema extraño como este. Cambiar "Analizar todos los archivos de recursos ..." a Sí no ayudó. Eché un vistazo a las rutas de búsqueda de Framework y noté que tenía

  • $ (heredado)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / my / correct / path"

Parecía correcto pero seguía fallando. Luego intenté reorganizar el orden de 2 y 3 y, de repente, se construyó bien. Así que no estoy seguro de por qué fue el problema, pero quería agregarlo a la lista de cosas para probar en caso de que ayude a alguien más.

mareado
fuente
4

Mi solución fue cambiar mi

#import "HeaderFile.h"

a

#import <FrameworkName/HeaderFile.h>

y todo empezó a funcionar de nuevo. Lo inusual fue que había dejado de funcionar repentinamente después de construir varias veces.

Slcott
fuente
Probé todo lo demás con mi subproyecto y esto fue lo único que funcionó. Gracias.
dirkoneill
Aún debe usar comillas dobles para las bibliotecas estáticas. Los corchetes angulares buscan las rutas del encabezado del sistema y no buscarán las rutas del encabezado del usuario a menos que también habilite la opción Buscar siempre rutas del usuario , lo cual no debería hacer si no es necesario.
devios1
2

El problema se resolvió solo cuando configuré

Configuración de compilación-> Proyecto-> Rutas de búsqueda a Sí

Karolyn
fuente
2

Tenía lo mismo: 2 objetivos en mi proyecto ( Project y ProjectTest of GHUnit). Cuando mi esquema se configuró en Project , la importación <GHUnitIOS/GHUnit.h>fue un problema de "archivo de problema léxico o preprocesador no encontrado" . Pero cuando configuré como esquema ProjectTest , todo estaba bien. Entonces, también he agregado GHUnitIOS.frameworken Project .

buena vida
fuente
Tuve el problema opuesto. Vea mi respuesta: stackoverflow.com/a/16783389/629014
slcott
1

Parece que las rutas de búsqueda de su encabezado son incorrectas y no están configuradas correctamente en su configuración de compilación para el esquema activo. Verifíquelos y actualice su pregunta con la configuración actual.

Joshua Nozzi
fuente
1

Tengo problemas similares en el simulador, pero no el dispositivo y los campos de ruta de búsqueda de mi encabezado están vacíos (parece ser el predeterminado). Pero cambiar los espacios de trabajo parece haber resuelto el problema. Quizás podría intentar crear un nuevo espacio de trabajo, agregarle su proyecto y ver si eso ayuda. Ahora estoy investigando por qué.

Norman G
fuente
1

Recibía este error de "archivo no encontrado" para un archivo .h en particular en mi proyecto. Resolví el problema eliminando ese archivo .h del proyecto (seleccionando "Eliminar referencias") y volviéndolo a agregar.

cduhn
fuente
1

Añadiendo más variantes: tuve dos instancias de foo.men la Compile Sourcefase de compilación, lo que de alguna manera causó "Encabezado no encontrado" foo.h.

espacio libre
fuente
1

Otra oportunidad:

En el proyecto del espacio de trabajo: mire en Target la sección Fases de construcción. Como dicen muchos manuales, debe tener una Fase de creación de archivos de copia para copiar todos sus encabezados a otro lugar, ya que iOS Framework no puede contener archivos de encabezado para compartir (este es mi caso).

Elija la opción Copiar archivos como destino "Directorio de productos". U otro directorio de su estilo donde residirán los encabezados.

Eso funcionó para mí. Probablemente la compilación del directorio Archive (o Release) sea muy diferente de lo esperado en la compilación de Debug.

También verifique en la configuración de su espacio de trabajo su directorio de compilación.

XD

SustanciaMX
fuente
0

Para mí, este problema ocurrió después de agregar nuevos archivos al proyecto; un .my .h en blanco derivado de NSObject. Así es como lo resolví:

  1. XCode cerrado y reiniciado
  2. Eliminó los dos archivos nuevos a través de XCode
  3. Recompilado exitosamente

Luego los volví a agregar y también funcionó.

Definitivamente un error en xCode ...

g-perro
fuente