¿Qué quiso decir Jason Prado exactamente cuando dijo “Xcode no puede manejar nuestra escala”?

Creo que puedo comentar sobre esto. Trabajé en Google en el pasado, en Chrome para iOS.

Quien haya trabajado o conozca la arquitectura del proyecto Chromium sabe que es un gran proyecto con muchos submódulos y dependencias, Chrome para iOS es el mismo. (Instrucciones de compilación de Chrome para iOS: Instrucciones de compilación (iOS) – The Chromium Projects)

En un Macbook Pro con 32 GB de RAM y un procesador muy rápido, Xcode tuvo muchos problemas al abrir el proyecto principal. Quiero decir que creo que fui uno de los únicos que lo usó, le tomó algo así como 3 a 8 minutos para que Xcode respondiera y fuera utilizable. (SSD no es de ayuda aquí, solo es lento) El proyecto principal consta de otros 100 proyectos, tal vez.
Algunos otros ingenieros usaban Xcode (y me refiero a xcodebuild) solo para ejecutar la aplicación en simuladores y dispositivos. Estaban usando Sublime Text / vi para editar código, creo que era una forma mucho más sensata de hacer las cosas.

Una vez que se cargó el proyecto, pudo editar el código, pero fue una experiencia dolorosa, la finalización del código fue lenta y CMD + SHIFT + O no fue una opción, debe confiar en algunos scripts externos para buscar código y archivos
La indexación de Xcode también está completamente rota para grandes proyectos, por algunas razones, Xcode no estaba manteniendo el índice en un archivo o algo así, cada vez que realiza una confirmación, sale de Xcode, reconstruye el archivo de proyectos y lo abre de nuevo, Xcode pensó que era un nuevos proyectos y comencé a indexarlo nuevamente, durante unos 30 minutos.
Fueron algunas bromas sobre la ejecución de un disco RAM que contiene la salida del índice Xcode para que sea más rápido. Una vez más, creo que fui el único que se molestó con Xcode.

Además, los proyectos y el espacio de trabajo de Xcode no están versionados (OMG OF COURSE), todo se genera del lado del cliente a partir de archivos JSON. Entonces, si genera el proyecto mientras Xcode está abierto … bueno, tendrá malos momentos.

Ningún Xcode no escala en absoluto, la mejor manera de trabajar en grandes proyectos es tener muchos submódulos / subproyectos, tener uno maestro solo para construir y ejecutar la aplicación. Pero haga toda la edición en el subproyecto (incluso puede hacer que se compilen como una biblioteca independiente si lo desea).

Me pregunto cómo está Apple haciendo las cosas.

Desglosar el código en bibliotecas más estáticas no es tan trivial como nos gustaría.

1. Xcode no ayuda a rastrear dependencias recursivas de la biblioteca. Digamos que divido una biblioteca grande en dos más pequeñas. Tengo que actualizar cada binario (y prueba) que depende de forma transitiva de esa biblioteca para vincular esa biblioteca, cuando esta es una biblioteca básica de bajo nivel incluida por todos, el proceso es tedioso. Cualquier persona que cree una nueva biblioteca (o prueba) también debe buscar manualmente las bibliotecas estáticas recursivas para agregarlas a su fase de enlace. También tengo que actualizar cada esquema para construir la nueva biblioteca.

2. Los espacios de trabajo de Xcode tardan en cargar varios proyectos. Xcode se carga y responde mucho más rápido cuando se trata de menos proyectos grandes frente a muchos proyectos más pequeños cuando se carga un espacio de trabajo. Por ejemplo, un espacio de trabajo de 50 proyectos se carga mucho más lento (2 veces más, por encima de mi cabeza) que un proyecto que se ha combinado con el contenido de esos 50 proyectos.

3. Las referencias de proyectos de Xcode son lentas. He intentado anotar un espacio de trabajo de proyectos con dependencias correctas de proyecto y destino, lo que permite que xcode paralelice de forma nativa la compilación entre objetivos, lo cual es importante cuando se vinculan en paralelo binarios de prueba y el escaneo de dependencias en compilaciones incrementales. Hacerlo en un árbol de objetivos 70ish más del doble del tiempo de inicio de xcode porque xcode genera objetos proxy para objetos y archivos del proyecto referenciado, para cada referenciador. También se convierte en una pesadilla de control de versiones, ya que un cambio en un proyecto puede cambiar el archivo del proyecto de muchos otros.

Es una especie de trampa 22. Xcode tiene problemas de rendimiento cuanto más modular hagamos nuestro código y lo carguemos todo de una vez. Al mismo tiempo, nos impide cargar y trabajar en componentes por separado debido a la falta de seguimiento de dependencia recursivo, que requiere cargar todo o crear muchos esquemas de compilación, uno para cada componente.

Este comentario se refiere al hecho de que la jerarquía del espacio de trabajo / proyecto de Xcode en Facebook es tan compleja, que Xcode realmente tiene problemas para que las Mac más recientes puedan abrirla y construirla. Si bien es algo menos problemático para Paper que la aplicación principal de Facebook, Xcode se colgará rutinariamente durante varios segundos completos incluso en el Macbook Pro más rápido que pueda comprar, y toma entre 5 y 10 minutos compilar el proyecto.