Definitivamente está en el camino correcto con respecto al archivo .xcscheme. ¡Apareció este problema al configurar mis propios proyectos!
Para la posteridad, o al menos para cualquiera que llegue aquí desde una búsqueda, aquí hay dos versiones de las cosas: la versión "Estoy ocupado, así que solo los hechos, por favor" y una discusión y justificación más complicada. Ambas versiones suponen que está intentando construir desde un archivo de Workspace; si no es así, mis disculpas, ya que esto se aplica principalmente a proyectos basados en el espacio de trabajo.
Versión condensada 'Fix-it'
La causa raíz es que el comportamiento predeterminado de los esquemas es mantener los esquemas 'privados' hasta que se marquen específicamente como compartidos. En el caso de una compilación iniciada por línea de comandos, la interfaz de usuario de Xcode nunca se ejecuta y la herramienta xcoderun no tiene su propia caché de esquemas para trabajar. El objetivo es generar, compartir y confirmar el esquema que desea que Bamboo ejecute:
- En una copia de trabajo limpia del código, abra el espacio de trabajo de su Proyecto.
- Elija Esquema> Gestionar esquemas ... en el menú del producto.
- Aparece la lista de esquemas definidos para el proyecto.
- Busque el esquema que Bamboo está intentando ejecutar
- Asegúrese de que la casilla 'Compartido' esté marcada para ese esquema y que la configuración 'Contenedor' esté establecida en el Espacio de trabajo y no en el archivo del proyecto en sí.
- Haga clic en 'Aceptar' para cerrar la hoja Administrar esquemas.
- Se ha creado un nuevo archivo .xcscheme en su proyecto en WorkspaceName.xcworkspace / xcshareddata / xcschemes.
- Confirme este archivo en su repositorio y ejecute una compilación de Bamboo.
Discusión más profunda y justificación
Xcode 4 introdujo Espacios de trabajo y esquemas como una forma de ayudar a tratar de dominar parte del caos inherente a lidiar con la mecánica del cableado de proyectos Xcode relacionados, construir objetivos y construir configuraciones juntos. El espacio de trabajo en sí tiene su propio conjunto de datos de configuración que describe cada uno de los 'cuadros' más pequeños de datos que contiene y actúa como un esqueleto para adjuntar archivos .xcodeproj y un conjunto de datos de configuración compartidos que se refleja en cada máquina de desarrollador o sistema de CI . Esto es tanto el poder como el peligro de los espacios de trabajo: hay 1) muchas formas en que uno puede configurar las cosas al 100% correctamente, pero ponerlas en el contenedor incorrecto o 2) ponerlas en el contenedor correcto, pero configuradas incorrectamente, por lo tanto, la generación de datos inaccesible por otras partes del sistema!
El comportamiento predeterminado de los esquemas Xcode 4 es generar automáticamente nuevos esquemas a medida que los proyectos se agregan al archivo del área de trabajo. Aquellos de ustedes que han agregado varios archivos .xcodeproj pueden haber notado que su lista de esquemas rápidamente se vuelve rebelde, especialmente cuando se agregan, luego se eliminan y luego se vuelven a agregar al mismo espacio de trabajo. Todos los esquemas, autogenerados o creados manualmente, por defecto son esquemas 'privados' visibles solo para el usuario actual, incluso cuando los archivos .xcuserdata se confirman con los datos y la configuración del proyecto. Esta es la causa raíz de ese error de compilación críptico. Bamboo informa desde xcodebuild: debido a que Bamboo opera la compilación a través de la línea de comando y no de la interfaz de usuario de Xcode, no tiene la oportunidad de que los esquemas se generen automáticamente y se basa solo en aquellos que se definen en el propio espacio de trabajo.
xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug
xcodebuild busca el archivo <'esquema' Valor de parámetro> .xcscheme existente en <'espacio de trabajo' Valor de parámetro> / xcshareddata / xcschemes.
Obviamente, hay un montón de formas en que uno podría configurar Bamboo y un espacio de trabajo, así que tenga en cuenta que su configuración única puede no corresponder al 100% con lo que se presenta aquí. Los puntos clave:
- Ciertas tareas automatizadas que la UI de Xcode se encarga mágicamente no están disponibles a través de la CLI de Xcodebuild.
- Puede adjuntar datos de configuración de esquema y compilación a muchos lugares en la 'jerarquía de contenedores': asegúrese de que sus datos terminen en el contenedor correcto (Espacio de trabajo, Proyecto y / o Compilar objetivo)
- Considere en qué parte de la jerarquía de contenedores la herramienta xcodebuild puede estar buscando datos de configuración; un gran indicador de dónde comenzará a buscar se basa en el uso de argumentos '-workspace' o '-project'.
La casilla 'Compartido' ya está marcada ... ¿y ahora qué?
Encontré este mismo problema en mi propia instancia de Bamboo; Resultó que el esquema que se confirmó en mi repositorio estaba desactualizado y la última versión de las herramientas de línea de comandos no lo estaba manejando con gracia. Como esto existía anteriormente, eché un vistazo a la configuración para asegurarme de que no había nada claramente personalizado sobre el esquema, eliminé y recreé el esquema asegurándome de que lo marqué como 'Compartido' y volví a enviar el nuevo archivo .xcscheme al repositorio.
Si todo se ve bien y la reconstrucción no resuelve el problema, verifique la configuración del contenedor: ¡es realmente fácil vincular ese esquema al contenedor incorrecto en la jerarquía!