iphone - ¿Cómo disminuir los tiempos de compilación/acelerar el tiempo de compilación en XCode?
build compilation (14)
A menudo, lo más importante que puede hacer es controlar su inclusión de archivos de encabezado.
La inclusión de archivos de encabezado "adicionales" en el código fuente ralentiza drásticamente la compilación. Esto también tiende a aumentar el tiempo requerido para la verificación de dependencia.
Además, el uso de la declaración directa en lugar de tener encabezados incluyen otros encabezados que pueden reducir drásticamente la cantidad de dependencias y ayudar a todos los tiempos.
¿Qué estrategias se pueden usar en general para disminuir los tiempos de construcción para cualquier proyecto XCode? Estoy más que interesado en las estrategias específicas de XCode.
Estoy haciendo un desarrollo de iPhone usando XCode, y mi proyecto se está volviendo cada vez más grande. Encuentro que las fases de compilación / enlace están comenzando a tomar más tiempo del que me gustaría.
Actualmente, soy:
Usar bibliotecas estáticas para hacerlo, así que la mayoría de mi código no necesita ser compilado cada vez que limpio y construyo mi proyecto principal
He eliminado la mayoría de los recursos de mi aplicación, y la prueba con una ruta del sistema de archivos codificados en el simulador de iPhone siempre que sea posible para que mis recursos no tengan que estar empaquetados constantemente a medida que los cambio.
Me di cuenta de que la fase de "comprobación de dependencias" parece tardar más de lo que me gustaría. ¡Cualquier consejo para disminuir eso también sería apreciado!
Cambié a Hackintosh con una CPU 5960x, overclockeado a 4.4 GHz solo para reducir el tiempo de compilación de Xcode. Eso es 8 núcleos y 16 hilos. Costo total $ 3000 para una computadora que aplasta todas las macs. Sin embargo, pasé al menos 10 días preparándolo, primero con Yosemite, el. Tenía seis meses de inactividad cuando no podía actualizar macOS mientras que Xcode necesitaba un sistema operativo más nuevo. Lo tengo funcionando en Sierra y la vida vuelve a ser buena.
Mi 2,8 GHz i7 de doble núcleo y 16 GB de RAM MacBook Pro compila mi proyecto en 75 segundos, el Hackintosh en 20 segundos. (Swift, dlib, opencv c ++ en el proyecto)
Sin embargo, el mayor problema es que Xcode no parece usar múltiples hilos al compilar velozmente. Este es el cuello de botella, espero que lo arreglen pronto.
Escribí una extensa publicación en el blog sobre cómo mejoré el ciclo de desarrollo de iOS en Spotify:
Reducir el 50% del tiempo de espera del ciclo de iOS Edit-Build-Test
Se redujo a:
1) Deja de generar paquetes dSYM.
2) Evite compilar con -O4 si usa Clang.
Hola, te recomendaría que optimices la estructura física de tu proyecto. Hay algo de buena lectura sobre esto (al menos en el mundo de C ++), pero sí el objetivo C y a menudo se aplican los mismos principios.
Aquí hay un excelente artículo sobre la optimización de la estructura física del proyecto, que tiende a mejorar los tiempos de compilación Games From Within: Physical Structure Part 1
Buena suerte :)
La cantidad de subprocesos que Xcode utilizará para realizar las tareas tiene el mismo número de núcleos que su CPU. Por ejemplo, una Mac con un Intel Core i7 tiene dos núcleos, por lo que Xcode usará un máximo de dos hilos por defecto. Como los tiempos de compilación a menudo están vinculados a E / S en lugar de a CPU, aumentar el número de subprocesos que utiliza Xcode puede proporcionar un impulso de rendimiento significativo para las compilaciones.
Intente configurar Xcode para usar 3, 4 u 8 hilos y vea cuál proporciona el mejor rendimiento para su caso de uso.
Puede establecer la cantidad de procesos que Xcode usa desde el Terminal de la siguiente manera:
defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4
Consulte los valores predeterminados de usuario de Xcode para obtener más información.
Mencionaste usar libs estáticas para tus archivos más utilizados para evitar la compilación. Puede lograr algo similar colocando encabezados en su código que se usa con frecuencia, pero no en sus libs estáticos en el encabezado precompilado. Al menos solo se compilarán una vez.
Se debe tener cuidado para evitar problemas si tiene múltiples tipos de compilación en su proyecto (por ejemplo, Obj-C, Obj-C ++, C ++).
Nota rápida sobre el enfoque ''Lanzar más hardware en él'' ...
RESUMEN: Experimenté un pequeño aumento de velocidad al realizar una actualización de hardware SIGNIFICATIVA
Prueba: compilar / ejecutar exactamente el mismo proyecto en macbooks clonados (donde la única diferencia debería ser su hardware)
Viejo Macbook Air (1.86GHZ Core 2 Duo SÓLO 2GB de RAM) vs Nuevo Macbook Pro (2.3GHZ Core i7 8GB RAM)
CONSTRUYENDO EN IPHONE 3GS
Macbook Air 1:00 - 1:15
Macbook Pro ~ 1: 00
=> 0 a 0:15 de aumento de velocidad
CONSTRUYENDO EN IPHONE 4S
Macbook Pro ~ 0: 35
Macbook Air ~ 0: 50
=> ~ 15 segundos de aumento de velocidad
** Parcialmente probado: HACE aparecer una diferencia significativa entre los tiempos de construcción para el SIMULADOR entre las 2 máquinas
En mi experiencia continua ... obtendrá un aumento significativo al realizar grandes cambios en el hardware de PHONE (es decir, tiempo de compilación en un 3GS vs iphone 5 (o 4 para el caso)) ... al menos en mi experiencia, el factor limitante fue el hardware del teléfono (no el hardware de la computadora).
SO ... para obtener el tiempo de construcción más rápido ...
option1) escribe el código y se ejecuta en el simulador en una computadora rápida O
opción 2) construir en el dispositivo con el último iphone
Personalmente cambié el compilador a LLVM-Clang para mis proyectos de desarrollo de Mac y he visto una disminución dramática en los tiempos de compilación. También está el compilador LLVM-GCC, pero no estoy seguro de que esto ayude con los tiempos de compilación, pero eso es algo que también puedes probar si LLVM-Clang no funciona para la compilación de la aplicación iPhone.
No estoy 100% seguro de que LLVM sea compatible con el desarrollo en el iPhone, pero creo que recuerdo haber leído un feed de noticias. ¡Esa no es una optimización que pueda implementar en su código, pero vale la pena intentarlo!
Respuesta fácil: agregue otra máquina ejecutando XCode en su red local. XCode incorpora distcc para hacer compilaciones distribuidas. Incluso puede usar Bonjour para encontrar otros hosts de compilación, lo que simplifica enormemente el proceso de configuración. Para construcciones grandes, la distribución puede obtener un aumento de velocidad que es casi linealmente proporcional al número de máquinas de construcción (2 máquinas tardan la mitad de tiempo, tres toman un tercio, etc.).
Para ver cómo configurar esto, puede consultar este documento de desarrollo . También presenta otras estrategias útiles de mejora del tiempo de compilación, como el uso de encabezados precompilados y compilaciones predictivas.
Editar: lamentablemente, parece que Apple ha eliminado esta función a partir de Xcode 4.3: http://lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html
Xcode 5 tiene una versión de servidor que puede hacer CI, pero dudo que esto otorgue ningún beneficio para las compilaciones de desarrolladores ad hoc. Sin embargo, hay algunas características no anunciadas que deberían acelerar drásticamente los tiempos de construcción.
Si no está usando 8 GB de RAM, actualice ahora.
Acabo de actualizar mi macbook pro de 4GB a 8GB. El tiempo de construcción de mi proyecto fue de 2:10 a 0:45. Me quedé impresionado por la mejora. También hace que la navegación web busque una investigación más rápida y el rendimiento general de Xcode al indexar, etc.
Si todo tu proyecto se reconstruye cada vez que ejecutas ejecutar, probablemente sea el error en XCode 7.0 <= 8.1 lo que te dificulte.
Al crear la configuración de compilación definida por el usuario HEADERMAP_USES_VFS en YES, se corta el tiempo de compilación del macbook de 75 segundos cada vez, a 25 segundos. Ver Xcode 8 hace una reconstrucción completa del proyecto para más información.
Un gran consejo para reducir a la mitad los tiempos de compilación (al menos para los proyectos de iOS) es establecer Configuraciones de compilación / Arquitecturas / Construir arquitectura activa solamente en SÍ .
Lo que hace esto (especialmente con la llegada del compilador de 64 bits de iPads / 64-bit) es no construir el binario para las arquitecturas que no estás usando actualmente.
Asegúrese de recordar volver a habilitar esta configuración en el envío a la tienda de aplicaciones, o su binario no se validará.
Usé una secuencia de comandos para hacer uso de una unidad de RAM, junto con algunas optimizaciones de "declaraciones hacia adelante", el tiempo de construcción limpio de mi proyecto pasó de 53 segundos a 20 segundos.
Estuve tentado de obtener el Gui en la AppStore, pero opté por ir a la línea de comando. Puse el script como parte del repositorio de git.
Para ver los tiempos de compilación, ingréselo en una terminal: "valores predeterminados write com.apple.dt.Xcode ShowBuildOperationDuration YES"
Reinicie Xcode para observar los tiempos de compilación en la barra de herramientas. (este es mi tiempo de compilación no limpio usando Object-c)
Ajusta la secuencia de comandos a tu gusto. - Tenga en cuenta que el script borra la carpeta de datos derivados.
#!/bin/sh
#2 GIG RAM
GIGA_BYTES=$((2*1024*1024*1024))
# a sector is 512 bytes
NUMSECTORS=$((${GIGA_BYTES}/512))
#ram disk
mydev=`hdiutil attach -nomount ram://$NUMSECTORS`
newfs_hfs $mydev
# make mount point
MOUNT_POINT=/Users/your_user_name/Library/Developer/Xcode/DerivedData
# *******************************************
# ** WARNING - MOUNT POINT WILL BE DELETED **
# *******************************************
rm -rf ${MOUNT_POINT}
mkdir -p ${MOUNT_POINT}
# mount
mount -t hfs $mydev ${MOUNT_POINT}
echo unmount $(MOUNT_POINT)
Para ver el efecto y controlar la unidad RAM:
mount - see mount points
umount mount_point - unmount point
diskutil list - see disks
diskutil eject /dev/diskX - eject the disk
df -ahl - see free space
NOTA: esencialmente uso el hdiutil proporcionado por macOs. Intenté cambiar la opción -kernel (sin intercambio en el disco) pero falló en mi máquina, diciendo que no está implementada.
Tal vez el nuevo sistema operativo que viene pronto, veremos aún más mejoras, ya que la nueva función de copia del sistema de archivos es realmente rápida, y posiblemente haga que este script sea redundante.
una palabra: TmpDisk
- Use TmpDisk para crear un disco RAM de 1.5Gb
- Cambie Xcode> Preferencias> Ubicación> Datos derivados a /Volumes/1.5Gb/xcode data
- Disfruta la velocidad!