Xcode 8 recompilando el código completo cada vez

131

Con cualquier cambio en el código (aunque el archivo no está en .pch), el proyecto completo se recompila cada vez.

Mahvish
fuente
31
¿Por qué es esto rechazado? Este es un problema legítimo. Toma 4 minutos compilar todo el tiempo, destruyó toda la productividad del equipo.
Josh
1
Yo también entiendo este problema.
AJ9
3
¿Estás modificando xib / storyboards con algunas cosas de IBDesignable?
Larme
1
Tema relacionado del foro de Apple: forums.developer.apple.com/thread/62737 . No hay solución aún.
ldiqual
1
Asegúrese de abrir un informe de error, como se sugiere en el foro de Apple.
Leo Natan

Respuestas:

34

Actualización 2017/1/2

Este problema no se ha resuelto en Xcode 8.2.1 (para mi proyecto)

¿Como sobrevivir?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

Actualizar 2016/12/17

Este problema no se ha resuelto en Xcode 8.2.

Actualizar 12/12/2016

El átomo para codificar y la línea de comandos para compilar y depurar es mi elección ahora. Espero que Apple arregle este error legítimo pronto.

Actualización 2016/12/04

Este problema parece resuelto con Xcode 8.2 (beta 2) .

Pero para mí no está resuelto, me enfrento a este problema incluso cuando uso Xcode 8.2. Puede intentarlo (descargue Xcode8.2 beta2 aquí )

Sistema de construcción • Xcode no reconstruirá un objetivo completo cuando solo se hayan producido pequeños cambios. (28892475)


Antigua respuesta: esta es una solución:

ingrese la descripción de la imagen aquí Pestaña "Configuración de compilación" -> "Dialecto del lenguaje C" -> Cámbielo a "Compilador predeterminado".

Para referencia :

El "Dialecto del lenguaje C" se configuró en "GNU99" en lugar de "Compilador predeterminado". Anteriormente el estándar era GNU99 pero ahora no lo es. En algún momento, Xcode no migró la configuración del proyecto de la biblioteca correctamente y, por lo tanto, se configuró en GNU99. Una vez que lo cambié a GNU99, ¡dejó de recompilar todo mi código cada vez!

Nhat Dinh
fuente
1
¡¡¡Hasta aquí todo bien!!! Dame una hora y la recompensa es tuya si sigue así.
Adam Waite
77
Argh ha vuelto a recompilar todo
Adam Waite
1
Tengo el mismo comportamiento Si borro los datos derivados (o cambio el dialecto del lenguaje C) funcionará durante aproximadamente 10 compilaciones. Después de eso, vuelve a reconstruir todo.
bluebamboo
1
Xcode 8.2 (beta 2) funciona para 10 compilaciones y luego reconstruye todo desde cero, pero aún mejor que el anterior.
Markus
3
Lamentablemente, el problema persiste en Xcode 8.3 beta 2 (al menos para nosotros). No se puede medir una mejora notable en nuestro proyecto.
Kasper Munck
20

Vaya a Producto -> Esquema -> Editar esquema. Seleccione Construir en la columna del lado izquierdo y desmarque " Buscar dependencias implícitas "

Pero esta bandera debe permanecer marcada cuando esté creando el proyecto por primera vez.

Madhuri Mane
fuente
@ Josh, ¿está utilizando múltiples proyectos dentro de su proyecto (por ejemplo, subproyecto o incluido)? ¿Y está seguro al mirar su salida de compilación que realmente está reconstruyendo todo?
Móvil Ben
3
Es un espacio de trabajo básico con cocoapods y el proyecto principal. CocoaPods permanece construido, pero el proyecto principal reconstruye cada archivo; viendo la salida de compilación y definitivamente sus más de 100 archivos de reconstrucción.
Josh
1
Actualización: parece que esta solución funciona para algunas compilaciones después de hacerlo, sin embargo, también lo hace la limpieza de todo el proyecto y la reconstrucción. Sin embargo, para la reconstrucción 2-8 veces, comienza a recompilar todo nuevamente. ¿Algunas ideas? Más que frustrante.
Josh
Esto no funciona, al menos no con un espacio de trabajo de CocoaPods. Todo se construye, cada vez. Súper molesto, especialmente porque Apple ha tenido años para solucionar este problema.
Womble
7

La solución para mí fue simplemente cerrar el guión gráfico, abrí el archivo fuente con el editor asistido y también abrí el archivo del guión gráfico (cerrando el guión gráfico, ya que no estaba haciendo ningún cambio) eliminé toda la compilación innecesaria

Emilio Concepción
fuente
1
Ja, puede ser tan fácil :)
manmal
5

ACTUALIZADO

La mejor mejora que pude hacer fue modularizar mi proyecto. Modularizando específicamente la capa ORM que se utiliza en casi todas las demás clases. Al mover ese código a un destino separado dentro de mi proyecto e importarlo como un módulo, pude mejorar enormemente los tiempos de compilación. Xcode ya no decide recompilar archivos innecesarios cuando hago una compilación.

Ahora uso el método de compilación Single File para compilaciones de depuración incrementales rápidas.

Hay algunas otras buenas sugerencias en este enlace, incluida la refactorización de código, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

ANTIGUO

Todavía ha sido un problema constante para mí con Xcode 9. Al igual que muchos de ustedes, estoy trabajando en un gran proyecto rápido de 4 / cocoapods con muchos archivos fuente y volver a compilar cada archivo cada vez es irritante.

Hasta ahora obtengo los mejores resultados con la siguiente configuración. Le sugiero que lo pruebe y vea cómo funciona para usted.

  • Esquema -> Compilación -> "Buscar dependencias implícitas" = VERDADERO
  • Configuración de compilación -> Optimización de tiempo de enlace = Incremental
  • Configuración de compilación -> Nivel de optimización (depuración) = Ninguno [-OO]
  • Configuración de compilación -> Nivel de optimización (versión) = más rápido, más pequeño [-Os]
  • Configuración de compilación -> Aumentar el uso compartido de encabezados precompilados = SÍ
  • Configuración de compilación -> Habilitar destilación incremental = SÍ

Se agregaron configuraciones de compilación personalizadas definidas por el usuario,

  • Configuración de compilación -> HEADERMAP_USERS_VFS = YES

Nota: No tengo la configuración personalizada definida por el usuario para la optimización de todo el módulo.

Anders
fuente
3

Cambié algunas cosas con mi código con respecto al encabezado del prefijo que parece haber solucionado este problema. No sé cuál realmente hizo el truco, pero los compartiré con la esperanza de que ayude a alguien más. Si no tiene un encabezado de prefijo establecido, entonces supongo que este no es el problema (o el problema es multifacético).

  1. Elimine las importaciones del encabezado de prefijo que son archivos del directorio de productos compilados para que pueda cambiar la configuración de compilación para esto ("El encabezado precompilado usa archivos del directorio de compilación") a "No". Asegúrese de que no se importe indirectamente a través de otras importaciones también.
  2. Elimine cualquier importación del encabezado de prefijo que use módulos Clang (bibliotecas o marcos que tienen un archivo module.modulemap en su directorio Headers, para que pueda escribir código como @import MyModule). (Para mí, esto y el paso 1 eran lo mismo).
  3. Establezca la configuración de compilación para compartir encabezado de prefijo en "Sí". (No creo que esto sea necesario, y no debería tener ningún efecto en mi propio proyecto. Solo digo esto porque lo cambié porque estaba dispuesto a intentar cualquier cosa. :))
  4. Salga de Xcode y elimine su directorio DerivedData / ModuleCache (configurado para estar en ~ / Library / Developer si no recuerdo mal).

Si eso todavía no funciona, puede intentar eliminar algunas importaciones más de su encabezado de prefijo. Puede haber algo tropezando ...

Christopher Rogers
fuente
3

Parece que están trabajando activamente en ello de acuerdo con https://forums.developer.apple.com/thread/62737 pero una solución es agregar

HEADERMAP_USES_VFS = YES

en la configuración de compilación de su objetivo (Proyecto -> Destino -> Configuración de compilación -> Definido por el usuario).

Esta solución funcionó siempre para mí hoy, después de que ninguna otra solución haya funcionado de manera constante durante el último mes.

EDITAR: todavía a veces recompila todo, aunque parece hacerlo con mucha menos frecuencia con esta configuración definida.

Josh
fuente
También agregué este valor, el tiempo de construcción es más rápido pero no resolvió la construcción incremental. He cambiado el compilador Swift - Generación / depuración de código a optimización rápida y completa del módulo ... es el mejor resultado hasta ahora
Antonio Junior
ni siquiera puedo encontrar Definido por el usuario)
David Seek
2
@DavidSeek está en la parte inferior de la Configuración de compilación
Laser Hawk
1
si no lo ve, lea este meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk el
3

Consulte todo el código de las @IBDesignabledirectivas en mi caso particular, el proyecto de construcción de Xcode todo el tiempo porque tenía algunas vistas en mi guión gráfico que contenía estos @IBDesignableatributos en él. Lo segundo es que también tengo mi guión gráfico abierto en una ventana separada (no en una pestaña) que empuja mi Xcode para crear compilaciones para todos los simuladores para siempre.

ua24
fuente
Usamos bastantes @IBDesignabledirectivas ... ¿hay algo en particular que debamos buscar?
Stan
Creo que es posible encontrarlos excluyendo uno por uno, y verificar el resultado, mi caso fue solo 2 de las directivas @IBDesignable en todo el proyecto.
ua24
2

Madhuri Mane tiene toda la razón con respecto a esto. Para agregar un poco más de claridad, algunos puntos importantes a tener en cuenta:

Esto SÓLO es aplicable si tiene dependencias implícitas en bibliotecas / marcos en los que se basa su objetivo.

Si "Buscar dependencias implícitas" está deshabilitado:

Resultado: la biblioteca no se creará antes de crear el destino de la aplicación. El objetivo de la aplicación no se puede construir.

Solución: para asegurarse de que no ocurra el segundo escenario, debe agregar los objetivos necesarios en la lista de objetivos y ordenarlos correctamente.

Fuente y lectura adicional sobre el tema: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Ahora, si todo su proyecto está alojado dentro de un objetivo y eso toma 4 minutos para compilar, no hay mucho que pueda hacer al respecto, excepto dividirlo en marcos para aprovechar lo anterior o descubrir dónde queda la compilación. Si está usando algo como PaintCode o tiene grandes porciones de código UIKit en un cambio rápido, cámbielo a Objective-c, se compila mucho más rápido

pflous
fuente
2

Vaya a la configuración de compilación de su objetivo y configúrelo Defines Moduleen Yes.

Trabajó para mí para un par de compilaciones, demasiado pronto para afirmar que esta es una solución definitiva, pero al menos lo estamos intentando.

ldiqual
fuente
2

Apple lanzó ayer una nueva versión beta de Xcode (14 de noviembre)

Xcode 8.2 beta 2

Y este problema se ha marcado como resuelto en la nota de lanzamiento.

Sistema de construcción

• Xcode no reconstruirá un objetivo completo cuando solo se hayan producido pequeños cambios. (28892475)

Me esta funcionando. La velocidad de construcción volvió como siempre. ¡Todos los que se enfrentan a este problema deberían intentarlo!

https://developer.apple.com/download/

Johnny
fuente
2

Vaya a la configuración de compilación del proyecto y cambie el "Dialecto del lenguaje C".

El "Dialecto del lenguaje C" se establece en "GNU99" en lugar de "Compilador predeterminado" cuando actualiza la versión de xcode. En algún momento, Xcode no migró la configuración del proyecto de la biblioteca correctamente y, por lo tanto, se configuró en GNU99. Esto solucionará el problema

Samarth Kejriwal
fuente
1

Si ha realizado cambios en el archivo Swift, comience a compilar la aplicación, vaya a la última pestaña y haga clic en el registro de compilación, durante la etapa "Comprobar dependencias", detenga la compilación y ejecútela de nuevo. En la segunda ejecución, solo debería compilar los archivos que modificó. Si se hace correctamente, he encontrado que funciona cada vez. No es necesario realizar ningún cambio en la configuración del proyecto.

Esto parece ser un error en Xcode.

ingrese la descripción de la imagen aquí

Si ve que la aplicación está haciendo una compilación completa, deténgala e intente este truco nuevamente.

Si no ha realizado ningún cambio en el código, utilice CMD + CTRL + R para ejecutar sin compilar la aplicación que adjunta el depurador. No creará una aplicación, pero puede ayudar a ahorrar tiempo innecesario.

Vlad
fuente
Esto realmente funciona, pero a veces XCode fallará con el código 1 y tendrá que hacer una compilación limpia. Es una pesadilla
Antonio Junior
Hay otros escenarios en los que Xcode siempre realizará una compilación completa. He descubierto que si modifica el archivo .h incluido en el encabezado de puente, reconstruirá todos los archivos Swift. Puede haber otros escenarios que no están relacionados con el error de Xcode.
Vlad
Hay escenarios en los que el único cambio es un cambio de nombre de función o una nueva propiedad agregada a una clase / estructura existente que resulta en una reconstrucción completa.
Antonio Junior
Consulte esta pregunta / respuesta, este hilo es un duplicado de esto: Tenga una solución que funcione mejor: stackoverflow.com/questions/39456223/…
Vlad
1

Problema de mi lado solucionado aplicando la desmarcación a la solución "Buscar dependencias implícitas".

PERO recuerde si está utilizando cocoapods, para aplicar esta configuración también a su proyecto de pod seleccionándolo desde

Producto -> Esquema -> Pods- "yourProjectName"

también se aplica en:

Producto -> Esquema -> "yourProjectName"

Me ayudó, así que espero que esta pista ayude a alguien más.

Gracias

Mazen Sa
fuente
1

Intente: 1. Navegar al Proyecto 2. Haga clic en Configuración de compilación 3. Verifique que OptimizationLevel esté configurado en Ninguno para la depuración. 4. Haga clic en Agregar configuración definida por el usuario 5. Establezca SWIFT_WHOLE_MODULE_OPTIMIZATION en YES.

ingrese la descripción de la imagen aquí

Naloiko Eugene
fuente
nada para trabajar todavía se compila cuando escribo una sola carta.
Chandni
-2

para facilitar el tiempo de compilación de xcode, puede hacer uso de IRAMDISK (disco de memoria virtual). Medios muy útiles y efectivos para reducir el tiempo de compilación.

También se puede usar para acelerar la aplicación de uso frecuente.

consulte el siguiente enlace para descargar y usar: http://iramdisk.findmysoft.com/mac/

Mahvish
fuente
Esto no acelerará la compilación si ya tiene un disco SSD.
Jano