Huelga antigua de XCode
A partir de este año, durante el proceso de desarrollo del proyecto principal de un componente del proyecto, lleva mucho tiempo ejecutarlo y compilarlo. ¿XCode siempre se convierte en crisantemo? El tiempo de compilación promedio es de aproximadamente 5 minutos cada vez, lo que en gran medida afecta la eficiencia del desarrollo. Acabo de terminar la prueba hoy. Tómese el tiempo para observar más de cerca por qué está tan atascado.
- ambiente
llave | valor |
---|---|
Mac OS | 13.2.1 (22D68) |
Memoria | 16 GB |
chip | manzana m1 |
almacenamiento | 512G |
códigoX | 14.0.1 |
código de componente | 19 MB |
Abra el monitor de actividad cuando esté atascado y descubra que XCode ocupa una memoria muy alta, con un promedio de aproximadamente 20 GB y un pico de 60 GB.
Después de que Comando + k elimine el caché en DerivedData, todavía no hay un resultado de aceleración obvio.
busca la razón
Ver registro de compilación
Se encuentra que todos los archivos en el componente tendrán varias advertencias similares al compilar.
Estas advertencias provienen del mismo archivo, al que se hace referencia a través del archivo pch.
El archivo con advertencias es el archivo de solicitud de red del componente, que se creó hace mucho tiempo. Probablemente hay NS_ASSUME_NONNULL_BEGIN
cientos de advertencias en el archivo que no se generan automáticamente. Al compilar archivos, estas advertencias se almacenarán en caché y se analizarán. Hace que funcione muy lento.
resolver
¡Elimine la advertencia, vuelva a compilar y descubra que el proyecto se ejecuta muy cómodamente!
Si hay advertencias de otras bibliotecas o componentes de terceros, puede agregar: a podFile inhibit_warnings => true
para evitar verificar las advertencias durante la compilación. Este enfoque también acelera la compilación.
pod 'XXNetEngineModule', :inhibit_warnings => true
复制代码
Se puede ver que el tamaño de la memoria de XCode después de resolverlo es básicamente de alrededor de 1 GB. La velocidad de compilación básicamente puede alcanzar el segundo inicio (dentro de 10 segundos).