2011-09-29 9 views
5

En un nuevo proyecto que he comenzado, XCode ha decidido compilar todos los archivos del proyecto cada vez que lo ejecuto, en lugar de simplemente compilar los archivos que cambian (y los archivos que dependen de ellos) Como cada vez hay más archivos en el proyecto, esto se convierte en una carga cada vez mayor tanto en tiempo como en batería.XCode compila todo el proyecto cada vez que ejecuto

Es posible que haya cambiado una configuración en algún lugar que haya afectado a esto; o tal vez no. ¿Cuáles son algunas configuraciones de proyectos que debería estar mirando?

+0

¿Alguna vez encontró una solución para esto? – ekeren

+0

@ekeren No, no lo hice. Suponiendo que se trata de un error en Xcode que se ha solucionado desde entonces. – leecbaker

Respuesta

7

Si Xcode recompila la mayoría o la totalidad de sus archivos fuente cada vez que hace una compilación, eso significa que esos archivos dependen directa o indirectamente de algún archivo de encabezado que haya cambiado. Aquí hay algunas cosas que debe buscar:

  1. hacer los archivos de origen tienden a #import algún archivo de cabecera de nivel superior que sí de forma recursiva importa un montón de archivos de cabecera de nivel inferior? Si se modifica cualquier archivo en ese árbol de encabezados dependientes, se forzará la recompilación de cualquier archivo .m que importe el archivo de encabezado de nivel superior. Puede reducir estas dependencias importando encabezados para submódulos de nivel inferior, o mejor aún, solo para los encabezados específicos que necesita para cada archivo. (Nota: algunas bibliotecas que no están diseñadas para usarse de esta manera pueden hacer que este enfoque sea desafiante o imposible en algunos casos).

  2. Algunas herramientas de desarrollo de terceros y bibliotecas estáticas ejecutan scripts que generan o modifican código como parte de su proceso de construcción. Si los archivos de origen dependen de un archivo de encabezado generado por una secuencia de comandos, se volverán a compilar cada vez que la secuencia de comandos regenere ese archivo de encabezado. Incluso si el código generado por el script no cambia, los archivos fuente dependientes se volverán a compilar si cambia la fecha de la última modificación del archivo del encabezado. Puede tomar algún tipo de piratería inteligente para eliminar la compilación redundante si este es su problema.

  3. No olvide verificar su archivo de encabezado precompilado (.pch) para ver qué se está importando allí. El contenido de ese archivo se inyecta efectivamente en la parte superior de cada archivo .m en su proyecto en tiempo de compilación.

  4. Intente minimizar las dependencias moviendo tantas declaraciones #import como sea posible desde sus archivos .h a sus archivos .m. En general, puede salirse con la suya simplemente importando los encabezados de la clase superior de su clase y los protocolos que su clase implementa en su archivo .h. Puede usar declaraciones forward en lugar de las declaraciones #import para cualquier otra clase, tipo de datos o protocolo que use en el @interface de su clase.

+0

Ninguno de estos parece ser un problema que estoy enfrentando, sin embargo, estoy marcando esto como la respuesta aceptada porque creo que podría beneficiar a los principiantes que encontrarán esta página. – leecbaker

7

que darse cuenta de esta pregunta es más de un mes de edad, pero tuve un problema similar en el movimiento de un viejo proyecto de Xcode 4. Después de mucho pelo desgarradora, descubrí que Xcode 4 (4.2 en mi caso) tiene un error donde, si hay caracteres no ASCII en la ruta completa de un archivo fuente, o en la ruta completa de los encabezados que incluye el archivo fuente, se volverá a compilar cada vez que compile. Esto incluye el encabezado de prefijo, en cuyo caso se generará una compilación completa cada vez. En mi caso, el programador anterior había agregado 'ƒ' a varios nombres de carpeta, y una vez que los quité, funcionó perfectamente.

De todos modos, me encontré con esta pregunta durante mis intentos (infructuosos) de buscar una respuesta en Google y pensé en compartir mi solución.

+0

sería bueno si agregaste "Este problema con Xcode se corrigió en Xcode xxx). De lo contrario, los lectores deben tener una configuración que consuma tiempo solo para comprobar si esto es un problema o no. Estamos en Xcode 7.2.1 ahora , fíjate. –

Cuestiones relacionadas