ios - ¿Biblioteca? ¿Estático? ¿Dinámica? O Marco? Proyecto dentro de otro proyecto
xcode frameworks (2)
Primero, algunas definiciones generales (específicas para iOS):
Biblioteca estática : una unidad de código vinculada en tiempo de compilación, que no cambia.
Sin embargo, las bibliotecas estáticas de iOS no pueden contener imágenes / recursos (solo código). Sin embargo, puede evitar este desafío usando un paquete de medios .
Una definición mejor y más formal se puede encontrar en la Wikipedia here .
Biblioteca dinámica : una unidad de código y / o activos vinculados en tiempo de ejecución que pueden cambiar.
Sin embargo, solo Apple tiene permitido crear bibliotecas dinámicas para iOS. No puedes crearlos, ya que esto hará que tu aplicación sea rechazada. (Vea this otra publicación SO para confirmación y razonamiento sobre tal).
Software Framework : un conjunto compilado de código que realiza una tarea ... por lo tanto, puede tener un marco estático o un marco dinámico , que generalmente son solo las versiones compiladas de lo anterior.
Consulte la Wiki en Software Framework para 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 archivo .a
compilado más a menudo, mientras que una biblioteca estática simplemente se puede incluir como un subproyecto; puede ver todo el código, que se compila primero y su archivo resultante .a
utilizado como una dependencia por el proyecto).
Ahora que estamos claros (er) en estos términos, configurar una biblioteca estática y un paquete de medios compatible para iOS no es demasiado difícil, y hay muchos tutoriales sobre cómo hacerlo. Yo personalmente recomendaría este:
https://github.com/jverkoey/iOS-Framework
Esta es una guía bastante sencilla y no tiene la desventaja de tratar con "bibliotecas estáticas falsas" ... échale un vistazo para obtener más información ...
Una vez que haya creado su biblioteca estática, es tan fácil como incluirla como un submódulo dentro de Git para usar en diferentes proyectos.
Buena suerte.
EDITAR
Con respecto a un subproyecto dentro de un proyecto, hasta donde yo sé, para que esto funcione correctamente / compile, básicamente tiene que configurar una cadena de compilación donde el subproyecto se compila primero, lo que crea un archivo .a
un marco estático que se usa como una dependencia por el proyecto.
Aquí hay otro tutorial útil que habla sobre 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 marcos dinámicos. (Nota: su aplicación debe tener un objetivo mínimo de iOS 8 para incluir un marco dinámico ... no se permite el back-porting).
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
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 las pruebas. El nuevo fragmento básicamente trata de guardar una imagen en varios servicios para compartir, etc. Debido a que el código para compartir necesita muchas pruebas y futuras actualizaciones, me preguntaba cuál es la mejor manera de incorporar ese fragmento de código a mi aplicación existente.
No sé si debería ser una biblioteca estática, una biblioteca dinámica o un framework, y sinceramente, no estoy seguro de cuál es la diferencia, ni de cómo debería hacerlo y configurarlo en Xcode.
Todo lo que sé es que necesito / quiero tener una aplicación de prueba y actualización por separado para el código de uso compartido y hacer que la aplicación principal lo use.
Si todavía 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!
También puede crear el archivo .podspec para CocoaPods ( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ) y usarlo como cualquier otro módulo con el La única diferencia es que es tu pod privado y no es visible para el mundo exterior (no estoy seguro de qué pasará si tu pod crea un modelo CoreData, pero ese no es el caso, como yo entiendo).