Dos aplicaciones, una base de código. ¿Cómo puedo conseguir esto?

Tengo una aplicación, actualmente está en la tienda de aplicaciones.

Tengo una idea para otra aplicación, que compartiría 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, save, rotar, etc., se compartirá entre los dos. Sin embargo, el tipo de manipulación de fotos sería diferente.

Mi opinión es que, cuando actualizo la aplicación # 1, quiero esos cambios en la aplicación # 2 y viceversa.

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

Estrategias que he contemplado,

  1. Un file de proyecto, dos objectives. De esta forma, la base de código para ambas aplicaciones siempre estará actualizada, aunque el file / directory del proyecto será un poco desorderado, para estar seguro.
  2. Rama la aplicación en git, a menudo combina los cambios entre las dos twigs para las classs utilizadas por ambos.

Estoy abierto a otras ideas también.

Encontré personas discutiendo esto, pero sobre todo en relación con cambios menores … es decir, una aplicación con unos pocos brandings / files de datos diferentes. Mis dos aplicaciones serán razonablemente distintas, así que no creo que esas técnicas se apliquen necesariamente.

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 dependencia y use la carpeta de encabezados de la biblioteca en la Ruta de búsqueda del encabezado de usuario. Entonces, básicamente, puede clonar su antiguo proyecto y comenzar a modificar de inmediato con acceso a todas las funciones de la biblioteca compartida.

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

Sugiero dividir su aplicación existente en DOS partes. Separa todas las partes comunes como una biblioteca genérica de DLL / class, y usa la dll tanto en tu proyecto actual como en el nuevo.

A medida que avanza el primer desarrollo del proyecto, use la versión más reciente de la DLL en su proyecto más nuevo, utilizando los scripts de implementación adecuados. De esta forma, su nuevo proyecto puede incluso estar en una base de código separada

Te sugiero que mires usando submodules git en tus aplicaciones. Esto ha funcionado perfectamente para nosotros cuando compartimos código en varias aplicaciones. Básicamente utilizamos una estructura donde en cada proyecto Xcode tenemos una carpeta "Components/" donde guardamos submodules.

La aplicación A puede tener los submodules como este:

 Components/SomeAmazingPhotoManipulationStuff Components/MaybeSomeUsefullFoundationThingsYouUseOften 

La aplicación B solo puede usar:

 Components/MaybeSomeUsefullFoundationThingsYouUseOften 

La idea aquí es que puede actualizar sus proyectos de submodules por separado y simplemente ir a cada aplicación donde se usa y actualizar el submodule a la última versión del componente, compartiendo cosas entre aplicaciones sin perder el control de versión. También se adaptará bien a muchos proyectos.

Y, por supuesto, puede ramificar sus submodules y hacer que la aplicación A use una twig y la aplicación B otra, si hace algunas cosas específicas o cosas muy experimentales en una sola aplicación o en cualquier escenario en el que pueda pensar.

Desde que comenzamos a usar submodules git como este, no hemos mirado hacia atrás ni considerado ninguna otra solución.