2011-10-07 9 views
5

Tengo una aplicación, actualmente se encuentra en la tienda de aplicaciones.Dos aplicaciones, una base de código. ¿Cómo puedo conseguir esto?

Tengo una idea para otra aplicación, que compartiría mucho la misma estructura que mi aplicación publicada. Ambas son aplicaciones de manipulación de fotos, por lo que la base de código para importar, compartir, guardar, rotar, etc. sería compartida entre los dos. El tipo de manipulación de fotos sería diferente, sin embargo.

Mi pensamiento es que cuando actualice la aplicación n. ° 1, quiero esos cambios en la aplicación n. ° 2 y viceversa.

¿Cuál es la mejor manera de lograr dos aplicaciones de una base de código?

estrategias que he contemplado,

  1. un archivo de proyecto, dos objetivos. De esa forma, la base de código para ambas aplicaciones siempre estará actualizada, aunque el archivo/directorio del proyecto será un poco desordenado, sin dudas.
  2. Succione la aplicación en git, con frecuencia combine los cambios entre las dos ramas para las clases utilizadas por ambos.

Estoy abierto a otras ideas, también.

He encontrado personas que discuten esto, pero sobre todo en relación con cambios menores ... es decir, una aplicación con algunas marcas/archivos de datos diferentes. Mis dos aplicaciones serán bastante distintas, por lo que no creo que esas técnicas se apliquen necesariamente.

+0

Por cierto, eliminé la etiqueta 'multiple-targets' porque es muy específica y probablemente puedas usar algo más genérico para mostrar el punto, como' deployment-target'. – darvids0n

Respuesta

2

Sugiero dividir su aplicación existente en DOS partes. Separe todas las partes comunes como una biblioteca DLL/clase genérica y use el dll en su proyecto existente y nuevo.

A medida que avanza el desarrollo del primer proyecto, utilice la versión más reciente de la dll en su proyecto más nuevo, utilizando las secuencias de comandos de implementación adecuadas. De esta forma su nuevo proyecto puede estar en una base de código separada

+1

oops estoy usando la terminología .net. Conviertalos en terminología c objetiva donde corresponda – Zasz

+1

Una biblioteca estática sería el equivalente correcto. Las cosas de Apple son compatibles con las bibliotecas dinámicas (como las DLL), pero no está permitido el uso de bibliotecas o marcos dinámicos en las aplicaciones de la App Store de iOS. –

3

Cree una biblioteca estática con su manipulación de fotos común u otras funciones compartidas, y vuelva a trabajar el proyecto existente para agregar la biblioteca como una dependencia y use la carpeta de cabeceras de la biblioteca en Ruta de búsqueda del encabezado del usuario. Entonces, puede esencialmente clonar su proyecto anterior y comenzar a modificar directamente con acceso a todas las funciones de la biblioteca compartida.

Dos objetivos del mismo proyecto parecen aplicables a su situación, sin embargo. Si tienes una gran cantidad de superposición, básicamente necesitas escribir una segunda interfaz de usuario/flujo de trabajo para eso, ¿verdad? Si es así, usar dos objetivos tiene mucho sentido.

+1

Las partes que me gustaría replicar entre los dos proyectos son en su mayoría * estructura de la aplicación *. Soy escéptico de que incluso se pueda llamar a un delegado de aplicaciones desde una biblioteca compartida ... de manera similar, ¿archivos nib? Parece una técnica incorrecta para una aplicación de cacao. Has usado esta técnica antes, ¿cómo te fue? –

+0

Utilizo bibliotecas estáticas para un reproductor de películas personalizado. Para utilizar la biblioteca, necesito agregar los encabezados a la ruta de búsqueda y agregar la biblioteca como una dependencia, pero también copiar a través de un '.xib' que contiene la vista del jugador. Considero que es una operación normal de una sola vez para permitir que mi proyecto use la clase de reproductor de películas personalizada. No he intentado llamar a un delegado de aplicaciones de una biblioteca, pero es casi seguro que no es lo que realmente quieres. Comenzaría una biblioteca con la vista raíz de su * application-structure * a diferencia de la clase de delegado de la aplicación. Siempre puedes '# import' en la clase de delegado. – darvids0n

2

Sugiero que eche un vistazo al uso de submódulos de git en ambas aplicaciones. Esto funcionó perfectamente para nosotros cuando compartimos código en varias aplicaciones. Básicamente utilizamos una estructura en la que en cada proyecto de Xcode tenemos una carpeta "Components/" donde guardamos los submódulos.

Aplicación A puede tener los submódulos de esta manera:

Components/SomeAmazingPhotoManipulationStuff 
Components/MaybeSomeUsefullFoundationThingsYouUseOften 

Aplicación B sólo podría utilizar:

Components/MaybeSomeUsefullFoundationThingsYouUseOften 

La idea aquí es que usted puede actualizar sus proyectos submódulo por separado y sólo tiene que ir en cada uno Aplicación donde se usa y actualización del submódulo a la última versión del componente, compartiendo material entre aplicaciones sin perder el control de la versión.También se adaptará bien a muchos proyectos.

Y, por supuesto, puede ramificar sus submódulos y hacer que la Aplicación A use una rama y la App B otra, si hace cosas específicas o experimentales en una sola aplicación o en cualquier situación que se le ocurra.

Desde que empezamos a usar los submódulos de git como este, no hemos vuelto la vista atrás ni hemos considerado ninguna otra solución.

+1

Los submódulos GIT definitivamente son una herramienta que recomendaría usar. En realidad, combinaría todas las respuestas dadas. Use submódulos para sus bibliotecas estáticas personalizadas. De esa forma obtienes todos los beneficios; control de versión adecuado (submódulos de git), estructuras de aplicación adecuadas (bibliotecas estáticas), código bien compartible entre compañeros de trabajo (ambos), responsabilidades asignadas entre compañeros de trabajo (ambos), ... – Till

Cuestiones relacionadas