Xcode: ¿Qué es un objetivo y un esquema en lenguaje sencillo?

Respuestas:

309

¡También agregué en Workspace y Project!

  • Espacio de trabajo : contiene uno o más proyectos . Estos proyectos generalmente se relacionan entre sí
  • Proyecto - Contiene código y recursos, etc. (¡Estarás acostumbrado a esto!)
  • Objetivo : cada proyecto tiene uno o más objetivos.
    • Cada objetivo define una lista de configuraciones de compilación para ese proyecto
    • Cada objetivo también define una lista de clases, recursos, scripts personalizados, etc. para incluir / usar al construir.
    • Los objetivos generalmente se usan para diferentes distribuciones del mismo proyecto.
      • Por ejemplo, mi proyecto tiene dos objetivos, una compilación "normal" y una compilación "office" que tiene características de prueba adicionales y puede contener varias pistas de música de fondo y un botón para cambiar la pista (como lo hace actualmente).
      • Estarás acostumbrado a agregar clases y recursos a tu objetivo predeterminado a medida que los agregues.
      • Puede elegir qué clases / recursos se agregan a qué destino.
        • En mi ejemplo, tengo una clase "DebugHandler" que se agrega a la compilación de mi oficina
      • Si agrega pruebas, esto también agrega un nuevo objetivo.
  • Esquema : un esquema define lo que sucede cuando presiona "Construir", "Prueba", "Perfil", etc.
    • Por lo general, cada objetivo tiene al menos un esquema
    • Puede crear automáticamente esquemas para sus objetivos yendo a Esquema> Administrar esquemas y presionando "Crear esquemas ahora"
James Webster
fuente
Intentemos si entendí correctamente ... Estoy programando una aplicación y hago dos objetivos. Una que subiré a la tienda de aplicaciones y otra en la que desarrolle la próxima versión de la misma aplicación. ¿Y en los esquemas hago, por ejemplo, un esquema en ambos objetivos para ejecutar y un esquema para la depuración? Pero, ¿por qué necesito diferentes esquemas para eso? No entendía la ventaja de BJ Homer ..
MichiZH
FWIW, no uso diferentes esquemas para el lanzamiento y la depuración a menos que agregue características de depuración adicionales como describo en mi respuesta.
James Webster
2
Excelente explicación hermano! ! !
Sagar Kalathil
66
¿Qué quieres decir con que la construcción de tu oficina tiene un botón de música en la parte inferior? ¿Su aplicación real tiene un código adicional que solo se activa en la compilación de la oficina o la música se ejecuta en su Mac? Lo siento, estoy confundido
3366784
Este tipo de define qué cosas componen cada concepto, pero no el propósito de cada elemento. Para mí eso es lo que estaba preguntando el OP.
O'Rooney
67

Un objetivo es un producto final creado ejecutando "build" en Xcode. Puede ser una aplicación, un marco, una biblioteca estática o un paquete de prueba unitaria. Sea lo que sea, generalmente corresponde a un solo elemento en la carpeta "productos compilados".

Un esquema representa una colección de objetivos con los que trabajan juntos. Define qué objetivos se usan cuando elige varias acciones en Xcode (Ejecutar, Probar, Perfil, etc.) A menudo, tendrá un solo esquema, que utiliza el objetivo principal de la aplicación para las acciones Ejecutar, Archivar y Perfil, y un objetivo de prueba de unidad para la acción de prueba. Si estaba creando dos aplicaciones relacionadas, podría tener dos esquemas que usaran el mismo paquete de prueba unitaria pero diferentes objetivos de aplicación.

El principal beneficio de los esquemas (introducidos en Xcode 4) es que le permiten cambiar entre ejecutar su aplicación y las pruebas de su unidad sin necesidad de alternar el objetivo seleccionado.

BJ Homer
fuente
61

Soy una persona visual, por lo tanto, para explicar el concepto, usaré un diagrama.

Cuando tiene múltiples objetivos , pueden combinarse uno a uno con las acciones Ejecutar, Probar, Perfil de Xcode, este concepto define un esquema

ingrese la descripción de la imagen aquí

Un objetivo es una versión de su proyecto , es decir, los objetivos difieren ligeramente en clases y recursos para usar durante el tiempo construido. Un proyecto puede tener una configuración de tiempo de construcción múltiple para requisitos de distribución separados.

Abhinav Singh
fuente
77
Este diagrama parece estar mal. Un esquema debe estar vinculado a un objetivo en particular, no veo dónde dentro de un esquema puede tener múltiples objetivos.
Boon
66
@Boon No, descuidadamente Choosy es correcto. En el editor de esquemas, haga clic en el elemento 'construir' a la izquierda. En el área de la derecha, haga clic en '+' y puede agregar más objetivos a este esquema. Marque las casillas que desee. Los ejecutables de estos objetivos están disponibles en las otras acciones (Ejecutar, Perfil, etc.) en el menú desplegable ejecutable.
occulus
Esto es bueno, pero le falta la parte de configuración de compilación de los esquemas. Pienso en el esquema como una colección de cómo las acciones (Ejecutar, Probar, Perfil) coinciden con una combinación de objetivos y configuraciones de compilación (depuración, lanzamiento, qa, prod, etc.).
Steve Moser
3

Workspace( .xcworkspace) - es un contenedor de múltiples projects. Fue creado como el siguiente paso de cross-project references[Acerca de]

  • Workspacecontiene todo schemesde incluidoprojects
  • Workspacemaneja todo implicit dependencies[Acerca de]

Observaciones:

  • Es seguro trabajar con diferentes proyectos dentro del mismo workspacey no atraparCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Acerca de] trabajar conworkspacedonde crea el Podsproyecto

Project( .xcodeproj) - Es un contenedor para targetsy scheme. Define archivos de código, recursos ...

Target- PBXNativeTargetsección. Define un conjunto específico de configuraciones de compilación que generan:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Sobre] . Por ejemplo, se usa para crear unUniversal frameworkoUmbrella framework

Scheme- una Project'sconfiguración para la acción en Xcode: ejecutar , probar , perfilar , analizar y archivar . Schemase puede compartir, lo que le ayuda en CI, Carthage... y ubicar:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetspuede tener dependencies. La dependencia es un enlace fuente en contra. Estas dependencias se pueden vincular de forma estática o dinámica [Acerca de] Hay dos tipos de ellas:

  • Explicit Dependency[Acerca de] : código fuente de la dependencia que se encuentra en el mismo proyecto o proyecto anidado
  • Implicit Dependency[Acerca de] : código fuente / cerrado de la dependencia que se encuentra en el proyecto que forma parte del mismo espacio de trabajo.

[Vocabulario]

yoAlex5
fuente