2010-07-16 9 views
7

Quiero preguntar acerca de sus prácticas para mantener sus bibliotecas de terceros actualizadas con facilidad.iphone: ¿Una buena práctica para mantener actualizadas mis bibliotecas de terceros?

En mi proyecto de iPhone, utilizo bastante libs de terceros (como TouchXML, JSON, RegexKit, YAJL, MGTwitterEngine ...). La mayoría de ellos está almacenada en GitHub y su versión, especialmente MGTwitterEngine, cambia con bastante rapidez (debido a la adición de una nueva función, la corrección de errores, el cambio en el formato de respuesta del Servidor (como Twitter) ...).

A veces, me olvido de actualizar (también no quiero cambiar la versión estable), entonces mi proyecto recibe errores debido a las bibliotecas desactualizadas.

Cuando recibí un error porque las bibliotecas antiguas. A menudo voy a Github, descargo la nueva versión, luego necesito cambiar un montón de código. Debido a que descargar una nueva versión significa que hago un avance rápido de una versión muy antigua a la última. Creo que será menos doloroso si actualizo la biblioteca con más frecuencia.

¿Cuál es su enfoque para esta tarea?

+0

Tres votos sin respuesta. ¿Por qué? ¿Puedes dar algún comentario? – KONG

+1

Es porque otras personas (incluyéndome a mí) también están interesadas en tu pregunta, pero nadie tiene una respuesta todavía. – Calvin

+0

Si no tenemos la respuesta, solo plantee la idea y discuta por comentario :) ¿Podemos escribir un script para hacer esto? – KONG

Respuesta

4

¿Has mirado en git submodules?

Los uso para esta tarea. Tenemos un repositorio de clases de ayuda. Sin embargo, siempre que hagamos adiciones a las mejoras &, queremos que esas mejoras se apliquen en cascada a todos nuestros proyectos, por lo tanto, configuramos ese repositorio auxiliar como un submódulo en cada repositorio de proyectos.

Pruebe el siguiente comando desde el directorio raíz de su repositorio:

git submodule add ssh://url/to/external/library.git local/path 

Esto debería hacer los pasos siguientes (tomados textualmente de la URL anterior):

  • clones submódulo bajo la directorio actual y por defecto verifica la rama principal.
  • Agrega la ruta de clonación del submódulo al archivo .gitmodules y agrega este archivo al índice, listo para ser confirmado.
  • Agrega la ID de confirmación actual del submódulo al índice, lista para comprometerse.

A continuación, puede utilizar el comando

git submodule update 

para mantener las cosas al día.

Además, como nota al margen, si está haciendo lo que yo hago (por ejemplo, hacer cambios directos en el repositorio de submódulos), debe ir al directorio raíz del submódulo y confirmar esos cambios PRIMERO antes de realizar el superproyecto . Esto se debe a que git realiza un seguimiento de las versiones de los submódulos (inteligente), por lo que si primero comprometes el superproyecto, almacenarás una referencia a los cambios que no se han confirmado en el repositorio de submódulos. Cualquiera que intente clonar tu superproyecto recibirá un error.

+0

Voy a intentar este enfoque. Muchas gracias, phooze. – KONG

+0

+1 submódulos de git definitivamente es el camino a seguir. Usamos este enfoque mucho. – Till

5

Ahora es 2012, y desde que se formuló esta pregunta, han surgido dos proyectos que tienen como objetivo facilitar mucho la administración de dependencias de proyectos en el código de iOS: CocoaPods y VendorKit. Ambos están inspirados en el administrador de dependencia Ruby Bundler. CocoaPods es probablemente el proyecto más maduro y activo, pero ambos están ganando tracción.

submódulos de Git ayudan mucho en la organización de su proyecto y dependencias, pero todavía puede ser una molestia para obtener las rutas de búsqueda y banderas enlazador adecuado, por no hablar de averiguar lo que está mal si se rompen las dependencias. También es difícil lidiar con la situación en la que A y B dependen de C, donde A es su propio proyecto y B y C son dependencias. Entonces mi consejo, en este momento, sería usar uno de estos proyectos y apoyarlos escribiendo especificaciones para varias bibliotecas.

También está el menos conocido Kit, implementado en Haskell. Vale la pena echarle un vistazo.

+0

Para asegurarse de que todas las configuraciones estén configuradas correctamente (rutas de búsqueda, ...), utilizamos marcos personalizados como lo sugiere [esta respuesta] (http://stackoverflow.com/questions/8343242/objective-c-how-to -make-a-framework/8343513 # 8343513). – Till

Cuestiones relacionadas