¿Biblioteca? ¿Estático? ¿Dinámica? ¿O marco? Proyecto dentro de otro proyecto

Tengo una aplicación iOS existente y quiero agregar una gran cantidad de código que he estado desarrollando como otro proyecto solo para facilitar la testing. El nuevo fragment básicamente trata de save una image en varios services compartidos, etc. Debido a que ese código para compartir necesita muchas testings y actualizaciones futuras, me preguntaba cuál es la mejor manera de incorporar ese fragment de código en mi aplicación actual.

No sé si debería ser una biblioteca estática, una biblioteca dinámica o un marco de trabajo, y, sinceramente, no estoy realmente seguro de cuál es la diferencia, o cómo debo hacerlo y configurarlo en Xcode.

Todo lo que sé es que necesito / quiero mantener una aplicación de testing y actualización por separado para el código para compartir y hacer que la aplicación principal lo use.

Si no puedes decirlo, no soy un git wiz. Solo soy un simple desarrollador de un solo hombre.

Cualquier ayuda o dirección sería apreciada. ¡Gracias!

Primero, algunas definiciones generales (específicas de iOS):

Biblioteca estática : una unidad de código vinculada en time de compilation, que no cambia.

Sin embargo, las bibliotecas estáticas de iOS no pueden contener imágenes / activos (solo código). Sin embargo, puedes superar este desafío utilizando un package de medios .

Se puede encontrar una mejor y más formal definición en Wikipedia aquí .

Biblioteca dinámica : una unidad de código y / o activos vinculados en time de ejecución que pueden cambiar.

Sin embargo, solo Apple puede crear bibliotecas dinámicas para iOS. No puedes crearlos, ya que esto hará que tu aplicación sea rechazada. (Ver esta otra publicación SO para confirmación y razonamiento en tal).

Software Framework : un set comstackdo de código que cumple una tarea … por lo tanto, puede tener un marco estático o un marco dynamic , que normalmente son solo las versiones comstackdas de lo anterior.

Consulte la wiki sobre el marco del software para get más detalles.

Por lo tanto, en iOS, su única opción es básicamente usar una biblioteca estática o un marco estático (la principal diferencia es que un marco estático se distribuye como un file .a comstackdo lo más a menudo posible, mientras que una biblioteca estática puede simplemente includese como un subproyecto puede ver todo el código, que se comstack primero y el file .a resultante se usa como una dependencia del proyecto).

Ahora que estamos claros (er) en estos términos, configurar una biblioteca estática y un package de medios de soporte para iOS no es demasiado difícil, y hay muchos tutoriales sobre cómo hacerlo. Personalmente, recomendaría este:

https://github.com/jverkoey/iOS-Framework

Esta es una guía bastante simple y no tiene la desventaja de lidiar con "bibliotecas estáticas falsas" … compruébelo para get más información …

Una vez que haya creado su biblioteca estática, es tan fácil como includela como un submodule dentro de Git para usar en diferentes proyectos.

Buena suerte.

EDITAR

Con respecto a un subproyecto dentro de un proyecto, hasta donde sé, para que esto funcione / compile correctamente, básicamente tiene que configurar una cadena de compilation donde primero se comstack el subproyecto, el cual crea un file .a marco estático que se usa como una dependencia del proyecto.

Aquí hay otro tutorial útil que habla de esto:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

¡A partir de iOS 8, Apple ahora permite a los desarrolladores crear frameworks dynamics! (Nota: su aplicación debe tener un objective mínimo de iOS 8 para include un marco dynamic … no está permitido volver a portar).

Esto se ha agregado como una nueva plantilla de proyecto. En Xcode 6.1, esto se puede encontrar en:

 New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 

También puede crear el file .podspec para CocoaPods ( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ) y usarlo como cualquier otro pod con el La única diferencia es que es tu contenedor privado y no es visible para el mundo exterior (no estoy seguro de lo que sucederá si tu contenedor debe crear el model CoreData, pero ese no es el caso, según entiendo).