xcode xcodebuild bamboo

xcodebuild dice que no contiene esquema



bamboo (7)

Definitivamente estás en el camino correcto con respecto al archivo .xcscheme: ¡tuve este problema al configurar mis propios proyectos!

Para la posteridad, o al menos para cualquiera que esté aquí desde una búsqueda, aquí hay dos versiones de las cosas: la versión "Estoy ocupado, tan solo los hechos por favor" y una discusión y un razonamiento más participativos. Ambas versiones suponen que está intentando compilar desde un archivo de Workspace; si no lo eres, mis disculpas ya que esto se aplica principalmente a los proyectos basados ​​en el espacio de trabajo.

Versión ''Fix-it'' condensada

La causa principal es que el comportamiento predeterminado de Schemes 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 comando, la IU de Xcode nunca se ejecuta y la herramienta xcoderun no tiene su propia caché de Esquemas con los que trabajar. El objetivo es generar, compartir y comprometer el esquema que desea que ejecute Bamboo:

  1. En una copia de trabajo limpia del código, abra el espacio de trabajo de su proyecto.
  2. Elija Esquema> Gestionar esquemas ... en el menú Producto.
  3. Aparece la lista de Esquemas definidos para el proyecto.
  4. Ubique el esquema que Bamboo está tratando de ejecutar
  5. Asegúrese de que la casilla ''Compartido'' esté marcada para ese esquema y que la configuración ''Contenedor'' esté configurada en el Espacio de trabajo y no en el archivo del proyecto en sí.
  6. Haga clic en ''Aceptar'' para cerrar la hoja Gestionar esquemas.
  7. Se ha creado un nuevo archivo .xcscheme en su proyecto en WorkspaceName.xcworkspace / xcshareddata / xcschemes.
  8. Confirme este archivo en su repositorio y ejecute una compilación de Bamboo.

Discusión más profunda y fundamento

Xcode 4 introdujo Espacios de trabajo y Esquemas como una forma de ayudar a tratar de domesticar parte del caos que es inherente al tratar con la mecánica del cableado relacionado con los proyectos de Xcode, construir objetivos y construir configuraciones juntos. El propio espacio de trabajo tiene su propio conjunto de datos de configuración que describe cada uno de los "cuadros" de datos más pequeños que contiene y actúa como un esqueleto para adjuntar archivos .xcodeproj y un conjunto de datos de configuración compartidos que se duplican en cada máquina desarrolladora o sistema CI . Este es tanto el poder como la trampa de los Espacios de trabajo: hay 1) muchas formas en las que uno puede configurar las cosas al 100% correctamente, pero ponerlas en el contenedor equivocado o 2) ponerlas en el contenedor correcto, pero configuradas incorrectamente, de esta forma los 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 espacio de trabajo. Aquellos de ustedes que han agregado varios archivos .xcodeproj pueden haber notado que su lista de esquemas se vuelve rápidamente ingobernable especialmente cuando los archivos del proyecto se agregan, luego se eliminan y luego se vuelven a asignar al mismo espacio de trabajo. Todos los esquemas, autogenerados o creados manualmente, de forma predeterminada son esquemas ''privados'' visibles solo para el usuario actual, incluso cuando los archivos .xcuserdata se comprometen con los datos y la configuración del proyecto. Esta es la causa raíz de ese críptico error de compilación. Bamboo informa desde xcodebuild: como Bamboo opera la compilación a través de la línea de comandos y no de la interfaz de usuario de Xcode, no tiene la oportunidad de que los esquemas se generen automáticamente y depende únicamente de los que se definen en el espacio de trabajo mismo. Asumiendo que ha configurado Bamboo para construir desde un espacio de trabajo usando un comando como este:

xcodebuild -workspace MyWorkspace.xcworkspace -scheme MyApplication -configuration Debug

xcodebuild busca el archivo <''scheme'' Valor del parámetro> .xcscheme existente en <''workspace'' Valor del parámetro> / xcshareddata / xcschemes.

Obviamente hay muchos modos en los que uno puede configurar tanto Bamboo como 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:

  1. Ciertas tareas automatizadas que la interfaz de usuario Xcode se ocupa mágicamente no están disponibles a través de la CLI de Xcodebuild.
  2. Puede adjuntar esquemas y generar datos de configuración en 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 Objetivo de compilación).
  3. Considere dónde en la jerarquía de contenedores la herramienta xcodebuild puede estar buscando datos de configuración; un gran indicador de dónde comenzará a buscarse se basa en el uso de argumentos ''-workspace'' o ''-project''.

El cuadro "Compartido" ya está marcado ... ¿ahora qué?

Encontré este mismo problema en mi propia instancia de Bamboo; Resultó que el esquema que se había comprometido en mi repositorio estaba desactualizado y la última versión de las herramientas de línea de comandos no lo manejaba correctamente. Como esto existía anteriormente, eché un vistazo a la configuración para asegurarme de que no había nada notablemente personalizado sobre el esquema, borré y recreé el esquema asegurándome de que lo marqué como ''Compartido'' y volviendo a comprometer el nuevo archivo .xcscheme al repositorio.

Si todo se ve bien y reconstruirlo no resuelve el problema, comprueba dos veces la configuración del contenedor: ¡es realmente fácil asociar ese esquema al contenedor incorrecto en la jerarquía!

Tengo un problema curioso.

Tengo un proyecto en el que trabajé y que siempre construí desde XCode IDE, y funcionó bien. Ahora estoy configurando Bamboo para construir el proyecto y, como tal, lo estoy construyendo desde la línea de comando.

El problema es que si reviso mi código fuera de GIT y luego uso xcodebuild para compilarlo, dice que no se puede encontrar el esquema, pero si lo abro, se compila y si intento volver a compilarlo desde la línea de comando con el mismo comando, funciona.

¿Qué magia está haciendo XCode cuando abro el proyecto o estoy haciendo algo tonto, tal vez excluyendo un archivo en mi .gitignore que no debería?


Depure el problema de esta manera:

xcodebuild -list

o si está utilizando un espacio de trabajo (por ejemplo, con pods)

xcodebuild -workspace MyProject.xcworkspace -list

Si su esquema no está en la lista, corríjalo así:


La mayoría de las respuestas sugieren que haga que su esquema se comparta con Xcode y luego confirme los cambios en el repositorio. Eso funciona, por supuesto, pero solo si tiene acceso al código fuente y tiene derechos para realizar cambios, y otras dos suposiciones.

Pero hay una serie de " qué pasaría si " para considerar

  • ¿Qué pasa si simplemente no puede modificar el proyecto de Xcode por alguna razón?
  • ¿Qué ocurre si crea un nuevo esquema automáticamente en el servidor de CI?
    Esto realmente sucede con bastante frecuencia. Si utiliza el marco de automatización de prueba, como Calabash, normalmente terminará duplicando un objetivo existente, que también duplica automáticamente un esquema, y ​​el nuevo esquema no se comparte, incluso si el esquema original fue.

Gema Ruby y xcodeproj

Yo recomendaría usar xcodeproj Ruby gem. Esta es una herramienta de código abierto realmente genial que puede ayudarlo a automatizar toneladas de tareas relacionadas con Xcode.

Por cierto, esta es la gema utilizada por CocoaPods para perder el tiempo con tus proyectos de Xcode y espacios de trabajo.

Entonces instálalo

sudo gem install xcodeproj

Luego, escriba un simple script de Ruby para volver a compartir todos los esquemas, la gema tiene el método recreate_user_schemes para ese propósito

#!/usr/bin/env ruby require ''xcodeproj'' xcproj = Xcodeproj::Project.open("MyProject.xcodeproj") xcproj.recreate_user_schemes xcproj.save

No solo copia los archivos de esquema de la carpeta del usuario en xcshareddata / xcschemes , sino que también los crea primero mediante el análisis del archivo pbxproj .



Tengo el mismo problema pero durante la construcción con xcode como subproyecto de la principal. Subproyecto construido en xcode independiente - después de eso este error desapareció.


Tuve este error al implementar CI. La Pregunta anterior es idéntica a mis problemas, excepto que estoy usando la herramienta CI de Gitlab. Puede verificar si hay algún archivo de este tipo en Bamboo.
Lo resolví haciendo algunos cambios en el archivo gitlab-ci.yml .
Después de que hayas hecho tu scheme disponible scheme compártelo. En Xcode, vaya a Products>Scheme>Manage Scheme y marque compartir para compartir.

Cambios

Establecer ruta absoluta en todas partes.
p.ej. xcodebuild clean archive -archivePath /path/to/your/project/build/testDemo -scheme testDemo | xcpretty
aquí debe cambiar /path/to/your/project/ con su ruta y testDemo con su nombre de proyecto.


Una razón común para que el esquema se pierda es olvidarse de enviar los commits al origen. Si recibe un mensaje de esquema faltante, primero debe verificar que el esquema se haya compartido, luego verifique que haya confirmado los cambios Y los haya enviado al servidor de origen.