¿Es posible usar distcc para build comstackciones de dispositivos iPhone?

Por lo que puedo decir, en el momento en que cambio cualquiera de mis proyectos de Simulator a la configuration de compilation de dispositivos, la compilation ya no se distribuye, sino que se construye localmente.

Entonces, ¿hay algún tipo de magia involucrada para que Xcode use el mecanismo de construcción distribuido para las comstackciones de dispositivos? ¿Alguien tiene una palabra definitiva sobre esto o incluso alguna experiencia práctica?

No vayas hacia abajo ni cierres a less que entiendas el tema de las comstackciones distribuidas y Xcode. Esta no es una pregunta no obvia sobre la firma para distribución.

También hemos encontrado que Xcode 3.2.5 no distribuye las comstackciones de dispositivos, mientras que las comstackciones de simuladores se distribuyen correctamente con distcc, a pesar de establecer todas las opciones necesarias en Xcode Preferences -> Distributed Builds .

Sin embargo, es posible solucionar la limitación de Xcode y obligarlo a distribuir también las comstackciones de dispositivos. Parece una desviación (error!) En la parte de Apple que no han habilitado las comstackciones distribuidas de dispositivos por defecto.

Los pasos que debe seguir son los siguientes:

  • Aumente el valor de las PBXNumberOfParallelBuildSubtasks por defecto del usuario Xcode. Esto limita el número máximo de tareas de compilation paralelas y pnetworkingeterminados al número de núcleos de CPU (consulte el documento de reference pnetworkingeterminado de usuario de Xcode de Apple para más detalles). Lo aumenté de 2 a 16, como sigue:

    write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 16 o para Xcode 4.2 defaults write com.apple.dt.Xcode IDEBuildOperationMaxNumberOfConcurrentCompileTasks 16

  • Asegúrese de reiniciar Xcode para que el cambio anterior surta efecto.

  • Deberá establecer su propio valor de la variable de entorno DISTCC_HOSTS como se detalla en la página de manual de distcc .

  • Para hacer esto, necesitará configurar DISTCC_HOSTS desde su propia /Developer/usr/bin/distcc script (que luego llama al binary original /Developer/usr/bin/distcc , al que cambia el nombre a otra cosa). Tenga en count que Xcode llama /Developer/usr/bin/distcc para cada unidad de compilation y establece DISTCC_HOSTS antes de cada llamada, por lo tanto, debe usar este script de mascarada para anular Xcode.

  • Mi propio script distcc es simplemente como sigue (y distcc el nombre del binary distcc original a distcc.orig ):

     #!/bin/sh export DISTCC_HOSTS="--randomize your list of hosts, each followed by ',cpp,lzo'" /Developer/usr/bin/distcc.orig "$@" exit $? 

Hay muchas opciones para ajustar en DISTCC_HOSTS , particularmente en lo que respecta a usar su propio host local para también hacer algo de la compilation en lugar de cultivar todo, pero lo anterior debería al less comenzar. Lo que funcione mejor para usted, obviamente, dependerá de su propio performance de hardware y networking de Mac.

En mi propia experiencia, el uso de una configuration distribuida del server de compilation compuesta por un par de Mac de cuatro núcleos junto con mi propio Mac de doble núcleo en una networking relativamente lenta networkingujo el time de reconstrucción completa del dispositivo de aproximadamente 15 minutos a aproximadamente 5.

De hecho, escribí una herramienta para administrar grupos de máquinas en una networking para distribuir comstackciones. Incluye soporte para configurar el ajuste PBXNumberOfParallelBuildSubtasks (diferente entre XCode 3.x + 4.x). También funciona sin necesidad de crear máquinas de soporte que tengan que instalar XCode. Lo hice parcialmente debido a las terribles velocidades de construcción distribuidas que obtuvimos con XCode. ¡Lo hemos estado usando en el trabajo durante el último año con ~ 50-100 CPUs disponibles para las versiones simultáneas de Android / iOS / Desktop y la velocidad es increíble! Aquí está el sitio SourceForge: http://sourceforge.net/projects/distccmanager .

Lo imaginé para permitir el soporte de compilation multiplataforma (es decir, máquinas windows + mac que ayudan con las comstackciones de Android).

¡Cualquier contribución es bienvenida!

Estaba a punto de marcar esto como un duplicado cuando me di count de que la pregunta anterior estaba cerrada por no ser una pregunta real.

No tengo experiencia con distcc, pero tengo una idea de cuál podría ser el problema. Las comstackciones de dispositivos deben firmarse en contraposition a las comstackciones de simuladores. Supongo que el problema podría ser que la firma solo puede ocurrir localmente o que XCode se niega a firmar cualquier cosa que se haya creado de forma remota.

Otra posibilidad es que haya hecho la configuration de distcc solo para comstackciones de simuladores y no para comstackciones de dispositivos.