Tengo un problema curioso
Tengo un proyecto en el que he trabajado y siempre he creado 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 comandos.
El problema es que si reviso mi código de GIT y luego uso xcodebuild para compilarlo, dice que no se puede encontrar el esquema, pero si abro el proyecto, se compila y si trato de compilarlo nuevamente desde la línea de comandos 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?
xcode
xcodebuild
bamboo
Zac Tolley
fuente
fuente
Respuestas:
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:
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 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:
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!
fuente
Depure el problema de esta manera:
o si está utilizando un espacio de trabajo (por ejemplo, con pods)
Si su esquema no está en la lista, corrija así:
fuente
xcodebuild -list
... ¡gracias!La mayoría de las respuestas sugerirían que compartiera su esquema usando Xcode, y luego confirmara los cambios en el repositorio. Eso funciona, por supuesto, pero solo si tiene acceso al código fuente y tiene derechos para cometer cambios, y un par de otras suposiciones.
Pero hay una serie de " qué pasaría si " a tener en cuenta
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 lo fuera.
Ruby y gema xcodeproj
Yo recomendaría usar xcodeproj gema Ruby. 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 con tus proyectos y espacios de trabajo de Xcode.
Así que instálalo
Luego, escriba un script Ruby simple para volver a compartir todos los esquemas, la gema tiene el método recrete_user_schemes para ese propósito
No solo copia los archivos de esquema de la carpeta del usuario a xcshareddata / xcschemes , sino que también crea esos archivos primero al analizar el archivo pbxproj .
fuente
recreate_user_schemes
no maneja los objetivos de prueba correctamente. He presentado un informe de error al respecto .xcodebuild -project Finance.xcodeproj -scheme "Finance" -configuration Release clean archive CODE_SIGN_IDENTITY="My Identity"
ejecuté, obtuve 'Scheme <IDEScheme: 0x7fc9ea5e5fd0:' Finance '> se le pidió que compilara y archivara, pero el destino de ejecución <IDERunDestination: 0x7fc9eb47c6c0:' iPad 2 '> no es una plataforma de implementación y esta acción no debería tener sido permitido ". Pero cuando abro XCode todo funciona bienarchive
La acción siempre implica la firma y el destino debe establecerse en un dispositivo real. En su caso, el destino esiPad 2
, lo que creo que es un simulador, por lo que no es posible archivar. Hay una opción importante que falta en su comando, es-sdk iphoneos
probar primero y ver cómo funciona. Cuando lo ejecuta desde Xcode IDE, probablemente tenga el destino configuradoiOS Device
o tal vez tenga un dispositivo real enchufado para que esté configurado como destino. Es por eso que el archivo funciona desde IDE. La línea de comando es más "tonta" y a veces puede usar opciones "incorrectas" de manera predeterminada, por lo que debe ser más específico.Ok, sé que son 2 minutos más tarde, pero encontré otro desbordamiento de pila que dice que el esquema debe establecerse como compartido ... ¿Dónde almacena Xcode 4 los datos del esquema?
fuente
Una razón común para que falte el esquema es olvidarse de llevar los commits al origen. Si recibe un mensaje de esquema faltante, primero debe verificar que el esquema sea compartido, luego verificar que ha confirmado los cambios Y los ha enviado al servidor de origen.
fuente
Tuve este error al implementar CI. La pregunta anterior es idéntica a mis problemas, excepto que estoy usando la propia herramienta de CI de Gitlab. Puede verificar si hay algún archivo de este tipo en Bamboo.
Lo resolví haciendo algunos cambios en el
gitlab-ci.yml
archivo.Después de que haya hecho su
scheme
disponibilidad compartiendo. En Xcode, vaya aProducts>Scheme>Manage Scheme
y marque compartir para compartir.Cambios
fuente
Tengo el mismo problema pero durante la construcción con xcode como subproyecto del principal. Subproyecto integrado en xcode independiente: después de eso, este error desapareció.
fuente
Me enfrenté a este problema e incluso si algunas de las respuestas aquí realmente proporcionan la solución, no lo encontré muy claro. Así que solo agregaré uno más. En pocas palabras, cómo compartir un esquema de excode.
Vaya a
Product
>Scheme
>Manage Schemes
Luego se le mostrará una lista de esquemas, cada uno de los cuales se indica como compartido o no. Solo marque las que desea compartir (pueden ser diferentes para las versiones de desarrollo y producción)
Imágenes tomadas de este artículo https://developer.nevercode.io/docs/sharing-ios-project-schemes
fuente
Quiero agregar una solución para mi caso relacionado con este hilo. Este es para usted que clona proyectos existentes, con todos los esquemas que necesita ya se comparten:
, con
fastlane lanes
mostrar correctamente todos sus carriles, incluidos todos sus esquemas:, pero
fastlane gym
solo muestra los esquemas principales (no los esquemas de desarrollo y prueba):La solución es desmarcar la opción compartida para esquemas que no figuran en la lista
fastlane gym
y luego volver a marcarla . Generará .xcscheme para los esquemas:Ahora, si verifica con
fastlane gym
, se enumerarán todos los esquemas:Luego debe enviar esos archivos .xcshemes al repositorio, para que otros desarrolladores que clonen el proyecto obtengan los archivos.
fuente
Para cualquier persona con Xcode 11.4 que intente encontrar el botón "Compartido" en el esquema, ahora se ha movido al esquema individual.
fuente