2011-02-03 16 views
9

La idea es que tengo una plantilla de aplicación que debe personalizarse para diferentes clientes. El objetivo principal es proporcionar una cantidad de aplicaciones personalizadas con casi la misma funcionalidad.Gestión de proyectos Xcode: un solo motor: diferentes aplicaciones personalizadas

¿Cuál es el mejor método de organización del proyecto Xcode (y tal vez la gestión) con el fin de lograr los siguientes puntos para la aplicación de cada cliente:

  1. imágenes siempre diferentes establecidos para los elementos visuales (para controles, vistas, iconos etc.)
  2. Archivos XIB raramente diferentes para la modificación de la estructura de la IU pequeña;
  3. Personalizaciones visuales: nivel de código;
  4. Pequeñas modificaciones funcionales;
  5. Posibilidad de volver a las versiones personalizadas anteriores;
  6. Un motor funcional (por ejemplo, funcionalidad de búsqueda);

Por el momento, para cada solicitud de personalización se crea en el directorio raíz del mismo proyecto nuevo archivo de proyecto, y los correspondientes archivos XIB, conjunto de imágenes y archivos de origen (para algunos directorios de solicitudes funcionales). Cada archivo de proyecto tiene una referencia al directorio de archivos de origen principal (motor).

Pero supongo que esa no es la mejor manera de organizar este tipo de proyectos.

+0

@Joe biblioteca estática representa el motor en sí. Ok, pero ¿y todas las otras cosas a su alrededor? –

Respuesta

2

cree una plantilla de proyecto, o simplemente un archivo zip con la plantilla.

primero, determine dónde puede usar (algo como) xml defs en lugar de anular y otros cambios de nivel de fuente.

Siempre diferentes imágenes establecidas para elementos visuales (para controles, vistas, iconos, etc.);

recursos complemento de marcador de posición a la plantilla de proyecto

archivos XIB En raras ocasiones diferentes para la modificación de la estructura pequeña interfaz de usuario

se suman al proyecto, refiriéndose cambios (si se ha cambiado) a través de vc

Personalizaciones visuales - nivel de código;

bibliotecas principales, compartidas en todos los proyectos. considere usar c o C++ si la biblioteca será grande. objc no puede ser despojado. esto contiene stubs de implementación, así como código común, clases base e interfaces.

pequeñas modificaciones funcionales

extienden la interfaz de sus clases básicas por lo que las subclases pueden implementar fácilmente las alteraciones frecuentes. estos archivos son parte de la plantilla.

Posibilidad de volver a las versiones personalizadas anteriores;

debe estar en vc, y las versiones de dependencia también deben rastrearse.

Un motor funcional (por ejemplo, funcionalidad de búsqueda);

una función definida de fábrica es bastante simple:

id<MONSearchEngineProtocol> MONAppCoreCreateSearchEngine(); 

declaran que en el lib estática, sino que define (y poner en práctica lo que sea necesario) en una de las fuentes específicas del proyecto. puede agregar estos otros lugares; algunas personas lo rellenarán en el controlador de la aplicación y lo anularán.

si tiene que administrar muchos de estos, considere mover sus recursos al código (en lugar de administrar una tonelada de plumillas). una punta define una gran cantidad de código, que es una gran cantidad de código casi duplicado para administrar. esto tendrá sentido para algunos recursos, y no tiene mucho sentido para otros.

1

Usa los objetivos de Xcode. Puede especificar diferentes recursos y/o archivos fuente para ser incluidos en un objetivo.

Si desea tener múltiples personalizaciones de código en un archivo, defina un compilador-macro para cada objetivo y use #ifdef MY_MACRO para incluir el código para ese objetivo específico.

+0

+1 para objetivos (pero all-in-one no es un "must"). Sin embargo, '#ifdef MY_MACRO' es una buena solución para 2-3 proyectos. Tengo más de 15 años, y esto dará como resultado un desastre :) –

10

Probablemente elegiría hacer este tipo de cosas usando el control de versiones, y mantener ramas separadas para cada versión personalizada. De esta forma, el maestro/troncal puede ser su código no personalizado.

Cuando necesite crear una versión personalizada, simplemente cree otra rama. Si su aplicación central necesita cambiar, la fusión de los cambios de la línea troncal en las sucursales debería ser sencilla, y esto le da la ventaja de mantener separados todos los códigos/archivos personalizados.

No sé cuán fácilmente esto encajaría en su flujo de trabajo, pero creo que cumple todos los requisitos, incluida la posibilidad de volver a las versiones anteriores.

+0

Después de un par de días, estoy realmente sorprendido de ver cualquier otra respuesta que sugiera una solución, ya sea en el código, o utilizando el sistema de destino de Xcode. ¿Me estoy perdiendo de algo? Para mí, esto parece ser exactamente el tipo de cosa que una herramienta de control de versiones decente está hecha para hacer. – paulbailey

+0

Esa es otra lata de gusanos. Mi preferencia personal es Git, pero estoy seguro de que Mercurial también haría un trabajo decente o empujaría a Subversion (aunque eso no es tan bueno para unirme en mi humilde opinión). – paulbailey

+1

Estoy de acuerdo con Paul. SCM es la mejor manera en mi mente. Yo también sugiero git. Si desea usar git, incluso puede hacer que su "motor" sea un submódulo. Esto captura mejor la capsulación (es decir, la personalización visual no es realmente una "rama" del motor) y podría ser útil para asegurarse de que el cambio de funciones en una aplicación pueda ser utilizado por las demás, pero no para las demás. – mohsenr

0

Para múltiples personalizaciones de código en un uso de archivo - Macros de compilación (Definir y usar).

Puede usar X-Code Targets pero sé que esto no será de mucha ayuda.

Empecé a trabajar en él también. :-)

feliz XCoding

1

Usted puede hacer un montón de gestión de contenidos mediante el uso de XML para proporcionar el contenido. ex. si quieres una imagen de gráficos diferentes, ya sea para iPad o iPad puede crear una etiqueta algo como esto:

<MyLogo logoID="0"> 
<ipad image="someImage2X" height="50" width="50" position="100, 100"/> 
<iphone image="someImage2" height="50" width="50" position="100, 100"/> 
</MyLogo> 

Y luego por supuesto crear un programa de análisis para el XML. Esto puede crear muchos productos diferentes del mismo tipo con diferente contenido.

También compruebe el dispositivo/contenido en el que está trabajando y luego analícelo para corregir la etiqueta según sus necesidades.

Hench: Puede crear diferentes atributos xml para diferentes efectos, siempre que haya implementado la funcionalidad principal para el efecto.

feliz de codificación

2

Crear una biblioteca estática con todas sus funciones básicas. Entonces, cada proyecto puede vincularse a esta biblioteca estática. Significa que si encuentras un error, solo tienes que arreglarlo una vez, y simplemente reconstruir todos los programas del cliente.

Cuestiones relacionadas