Estoy usando Xcode 6 Beta 6.
Esto es algo que me ha estado molestando desde hace un tiempo, pero está llegando a un punto en el que ahora apenas se puede usar.
Mi proyecto está empezando a tener una buena tamaño de 65 archivos Swift y algunos archivos Objective-C en puente (que en realidad no son la causa del problema).
Parece que cualquier ligera modificación en cualquier archivo Swift (como agregar un espacio en blanco simple en una clase que apenas se usa en la aplicación) hará que se vuelvan a compilar todos los archivos Swift para el objetivo especificado.
Después de una investigación más profunda, descubrí que lo que toma casi el 100% del tiempo del compilador es la CompileSwift
fase en la que Xcode ejecuta elswiftc
comando en todos los archivos Swift de su objetivo.
Investigué un poco más, y si solo mantengo al delegado de la aplicación con un controlador predeterminado, la compilación es muy rápida, pero a medida que agregaba más y más archivos de mi proyecto, el tiempo de compilación comenzaba a ser muy lento.
Ahora con solo 65 archivos de origen, se tarda unos 8/10 segundos en compilar cada vez. No muy rápido en absoluto.
No he visto ninguna publicación que hable sobre este problema, excepto esta , pero era una versión antigua de Xcode 6. Así que me pregunto si soy el único en ese caso.
ACTUALIZAR
He comprobado algunos proyectos Swift en GitHub como Alamofire , Euler y CryptoSwift , pero ninguno de ellos tenía suficientes archivos Swift para comparar. El único proyecto que encontré que estaba comenzando a tener un tamaño decente fue SwiftHN , y aunque solo tenía una docena de archivos fuente, todavía pude verificar lo mismo, un espacio simple y todo el proyecto necesitaba una recompilación que comenzaba a tomar un poco tiempo (2/3 segundos).
En comparación con el código Objective-C, donde tanto el analizador como la compilación son extremadamente rápidos, realmente parece que Swift nunca podrá manejar grandes proyectos, pero por favor dígame que estoy equivocado.
ACTUALIZAR con Xcode 6 Beta 7
Todavía no hay mejora alguna. Esto está empezando a ponerse ridículo. Con la falta de #import
Swift, realmente no veo cómo Apple podrá optimizar esto.
ACTUALIZACIÓN con Xcode 6.3 y Swift 1.2
Apple ha agregado compilaciones incrementales (y muchas otras optimizaciones del compilador). Tienes que migrar tu código a Swift 1.2 para ver esos beneficios, pero Apple agregó una herramienta en Xcode 6.3 para ayudarte a hacerlo:
SIN EMBARGO
No te regocijes demasiado rápido como lo hice. El solucionador de gráficos que usan para hacer que la construcción sea incremental aún no está muy bien optimizado.
De hecho, en primer lugar, no analiza los cambios en la firma de la función, por lo que si agrega un espacio en el bloque de un método, se volverán a compilar todos los archivos dependiendo de esa clase.
En segundo lugar, parece crear el árbol en función de los archivos que se volvieron a compilar, incluso si un cambio no los afecta. Por ejemplo, si mueve estas tres clases a archivos diferentes
class FileA: NSObject {
var foo:String?
}
class FileB: NSObject {
var bar:FileA?
}
class FileC: NSObject {
var baz:FileB?
}
Ahora, si modifica FileA
, el compilador obviamente marcará FileA
como recompilado. También se recompilará FileB
(eso estaría bien en función de los cambios FileA
), pero también FileC
porque FileB
se vuelve a compilar, y eso es bastante malo porque FileC
nunca se usa FileA
aquí.
Así que espero que mejoren el solucionador de árboles de dependencia ... Abrí un radar con este código de muestra.
ACTUALIZACIÓN Con Xcode 7 beta 5 y Swift 2.0
Ayer Apple lanzó la versión beta 5 y dentro de las notas de la versión pudimos ver:
Swift Language & Compiler • Compilaciones incrementales: cambiar solo el cuerpo de una función ya no debería causar la reconstrucción de archivos dependientes. (15352929)
Lo he probado y debo decir que está funcionando realmente (¡realmente!) Ahora. Optimizaron enormemente las compilaciones incrementales en Swift.
Le recomiendo que cree una swift2.0
rama y mantenga su código actualizado con XCode 7 beta 5. Le agradarán las mejoras del compilador (sin embargo, diría que el estado global de XCode 7 sigue siendo lento y con errores)
ACTUALIZAR con Xcode 8.2
Ha pasado un tiempo desde mi última actualización sobre este tema, así que aquí está.
Nuestra aplicación ahora tiene aproximadamente 20k líneas de código Swift casi exclusivamente, que es decente pero no sobresaliente. Sufrió una migración rápida 2 y rápida 3. Se tarda unos 5 / 6m en compilar en una Macbook pro de mediados de 2014 (Intel Core i7 de 2.5 GHz), lo cual está bien en una compilación limpia.
Sin embargo, la construcción incremental sigue siendo una broma a pesar de que Apple afirma que:
Xcode no reconstruirá un objetivo completo cuando solo se hayan producido pequeños cambios. (28892475)
Obviamente, creo que muchos de nosotros simplemente nos reímos después de revisar estas tonterías (agregar una propiedad privada (¡privada!) A cualquier archivo de mi proyecto recompilará todo ...)
Me gustaría señalarles este hilo en los foros de desarrolladores de Apple que tiene más información sobre el problema (así como también agradeció la comunicación de desarrollo de Apple sobre el tema de vez en cuando)
Básicamente, las personas han ideado algunas cosas para tratar de mejorar la compilación incremental:
- Agregar una
HEADER_MAP_USES_VFS
configuración de proyecto establecida entrue
- Deshabilitar
Find implicit dependencies
de su esquema - Cree un nuevo proyecto y mueva su jerarquía de archivos al nuevo.
Intentaré la solución 3 pero la solución 1/2 no funcionó para nosotros.
Lo que es irónicamente gracioso en toda esta situación es que al mirar la primera publicación sobre este tema, estábamos usando Xcode 6 con el código Swift 1 o Swift 1.1 cuando llegamos a la primera lentitud de compilaciones y ahora unos dos años más tarde a pesar de las mejoras reales de Apple. la situación es tan mala como lo fue con Xcode 6. Qué irónico.
En realidad REALMENTE lamento elegido Swift sobre Obj / C para nuestro proyecto debido a la frustración diaria que esto implica. (Incluso cambio a AppCode pero esa es otra historia)
De todos modos, veo que esta publicación SO tiene más de 32k vistas y 143 ups al momento de escribir esto, así que supongo que no soy el único. Esperen, muchachos, a pesar de ser pesimistas sobre esta situación, puede haber algo de luz al final del túnel.
Si tienes tiempo (¡y coraje!), Supongo que Apple agradece el radar sobre esto.
¡Hasta la próxima! Salud
ACTUALIZAR con Xcode 9
Tropezar con esto hoy. Xcode presentó silenciosamente un nuevo sistema de compilación para mejorar el horrible rendimiento actual. Debe habilitarlo a través de la configuración del espacio de trabajo.
Ya lo probé, pero actualizaré esta publicación una vez que haya terminado. Sin embargo, parece prometedor.