2012-07-23 11 views
34

No entiendo el uso de un espacio de trabajo de Xcode para organizar proyectos con dependencias entre ellos. Por ejemplo, veo una gran cantidad de desarrolladores crear estructuras de espacios de trabajo que se ven así:Xcode Workspace vs Nested Projects

 
Workspace 
|-- App 
|-- A Common Library 
|-- Another Common Library 

¿Qué beneficio proporciona esto? Si alguien abre directamente el proyecto "Aplicación", ¿no podrán ellos realmente crear la aplicación? Tendrían que darse cuenta de que existe un espacio de trabajo con las dependencias necesarias.

Me parece como el mejor enfoque es utilizar proyectos anidados como esto:

 
App 
|-- Libraries 
| |-- A Common Library 
| |-- Another Common Library 

Entonces existe de que no se puede construir ningún proyecto. También parece estar más en línea con la idea de Git de los submódulos.

El único uso que veo para un espacio de trabajo es agrupar proyectos comunes sin dependencias entre ellos. Me gustaría escuchar las opiniones de otras personas sobre esto porque me puede estar perdiendo algo.

+22

Woa!Una pregunta etiquetada con Xcode que en realidad se trata de Xcode. :) – Almo

+1

@ Almo: Sucede cada dos días. Sin embargo, generalmente tienen el problema opuesto: etiquetado [objc] cuando no se aplica. :) –

+1

Algunas razones para usar espacios de trabajo se mencionan aquí: https://developer.apple.com/library/ios/featuredarticles/XcodeConcepts/Concept-Workspace.html – pi3

Respuesta

17

Utilizo espacios de trabajo cuando quiero combinar proyectos y al mismo tiempo mantener la independencia del proyecto.

Un ejemplo en el que utilizo espacios de trabajo es una serie de proyectos tutoriales que progresan de muy simple a más complejo. Cada proyecto puede funcionar como un proyecto independiente, pero agruparlos en un espacio de trabajo ayuda a mi organización en el proyecto en general.

En otra instancia, tengo una aplicación desarrollada para un cliente. La aplicación funciona como una aplicación independiente y un módulo en el proyecto general. El proyecto independiente puede construir la aplicación independiente. La otra aplicación usa un espacio de trabajo que incluye dos proyectos. La versión de módulo de la aplicación se crea a partir de un esquema especial, y esta aplicación combinada no se crea sin utilizar el espacio de trabajo.

Una vuelta de tuerca con las dos situaciones anteriores es donde se almacena la carpeta de compilación. Tengo que cambiar la preferencia de Xcode para colocar los productos de compilación en carpetas únicas para el grupo de proyectos de tutoriales, usar una carpeta de compilación común para el módulo dentro de la configuración de la otra aplicación.

En otras circunstancias, tengo muchos proyectos con proyectos integrados. En estas situaciones, los proyectos de la biblioteca son estables. No intento un mayor desarrollo de los proyectos de la biblioteca, por lo que son solo otro recurso para el proyecto. Me resulta más fácil trabajar donde la organización de mi sistema de archivos de los recursos del proyecto refleja algo la organización de mi proyecto Xcode. Entonces, estos proyectos de biblioteca se copian en la jerarquía de archivos del proyecto principal. Tendría sentido usar espacios de trabajo si estuviera desarrollando las bibliotecas y utilizándolas en múltiples proyectos. Por conveniencia, frecuentemente no me molesto.

A veces incluso combino espacios de trabajo con proyectos que contienen proyectos integrados.

Así que mi opinión es que las herramientas de organización, los proyectos integrados y los espacios de trabajo, tienen sus ventajas y problemas. Elijo usar uno u otro (o una combinación) dependiendo de las circunstancias particulares.

+0

Gracias por su visión. Estoy de acuerdo con la mayoría de sus puntos, sin embargo, incluso si la biblioteca está en constante cambio, no veo el beneficio de usar un espacio de trabajo. Si su biblioteca se mantiene en un repositorio de Git, debería poder agregarla a los proyectos como un submódulo y luego actualizar el submódulo según sea necesario. – mark

+0

Sí, los submódulos de git son un método alternativo (y posiblemente mejor) para administrar el desarrollo de la biblioteca. Los submódulos son una función avanzada de git, que muchos desarrolladores de iOS no pueden usar por diversas razones, desde la falta de conocimiento hasta el requisito de utilizar otros sistemas de control de versiones. En tales situaciones, los espacios de trabajo pueden ser una mejor opción que los proyectos integrados. –

+0

@ Mr.Berna - lo siento pero usar git con xcode es un dolor en el ... usted no tiene control alguno de qué versión/rama/fork está utilizando en cada proyecto a menos que vaya al directorio por directorio a mano usando terminal y toma notas de forma manual. – SpaceDog

1

Añadimos proyectos anidados en los Frameworks del proyecto principal, para poder "incluirlos" en el producto .framework.

Main 
|-- Main 
|-- MainTests 
|-- Frameworks 
| |-- CommonLibrary.xcodeproj 
| |-- AnotherCommonLibrary.xcodeproj 
| |-- UIKit.framework 
| |-- Foundation.framework 
| |-- CoreFoundation.framework 
|-- Products 

Ver this Great Tutorial by Jeff Verkoeyen para añadir marcos universales a un proyecto. No es fácil, al principio, pero sigue trabajando en eso y lo entenderás.

+0

¿Es posible esta estructura al tener CocoaPods en cada .xcodeproj? – user023