Mejores prácticas para dependencies de biblioteca estáticas

Estoy escribiendo una biblioteca estática que tiene dependencies en otras bibliotecas (en mi caso SBJSON y ASIHTTPRequest).

Si compilo estas dependencies externas en mi biblioteca, entonces no puedo vincularme con otras bibliotecas en las que se comstackron estas classs. Como mi objective es crear un set de bibliotecas estáticas para mi empresa que puedan importarse a cualquier aplicación nueva, comstackrlas las dependencies en la biblioteca obviamente no son una opción.

¿Alguien tiene algún consejo / mejores prácticas para crear un set de bibliotecas estáticas compartidas con dependencies comunes?

Puede usar un administrador de dependencies como CocoaPods o VendorKit para extraer la biblioteca requerida, así como todas sus dependencies transitivas, bibliotecas de las que depende la biblioteca.

Es el trabajo del administrador de dependencies administrar cualquier conflicto en las dependencies transitivas; por ejemplo, si dos bibliotecas usan diferentes versiones de SBJSON, se resolverá qué hacer. Todo lo que tiene que hacer es declarar la biblioteca de nivel superior que desea en un file de configuration y resolverá qué subbibliotecas son necesarias y atraerlas a su Proyecto Xcode.

CocaoPods tiene una buena forma de gestionar esto al jalar todas las bibliotecas como fuente, y luego comstackrlas a una sola biblioteca estática, en un proyecto separado. Esto se vincula a su proyecto a través de un espacio de trabajo.

VendorKit adopta un enfoque similar, pero usa un único file de proyecto.

Tanto CocoaPods como VendorKit le permiten publicar fácilmente su biblioteca en un repository central. CocaoPods le permite mantener su propia bifurcación privada o pública del repository central, si lo desea, es decir, como repository empresarial.

La mayoría de las veces esto te sacará de problemas. En casos excepcionales, su biblioteca podría depender de una versión anterior muy específica de otra biblioteca común. En este caso, podría usar una herramienta para cambiar el nombre de todos los files header / impl en esa biblioteca para evitar colisiones.

[Editar]: A partir de enero de 2013 también hay un nuevo contendiente: el complemento Maven Xcode.

Una biblioteca estática es solo una colección de files object. En su caso, no desea que los files object para SBJSON y ASIHTTPRequest se incluyan en su biblioteca estática: quiere dejar ese trabajo en la aplicación final. Lo único que necesita su lib estática son los files de encabezado para SBJSON y ASIHTTPRequest.

Dado que estos proyectos están distribuidos como files fuente (files .h y .m), solo necesita decirle a Xcode que no compile los files SBJSON / ASIHTTPRequest .m para su objective de biblioteca estática.

La forma más fácil de hacerlo es solo importar los files de cabecera .h para estos proyectos en su proyecto Xcode. Alternativamente, puede importar los files .h y .m, pero asegúrese de que los files .m no estén incluidos en la fase de compilation "Comstackr orígenes" de su objective de biblioteca estática.

Algunos otros temas relevantes de SO:

¿Cómo puedo evitar errores de "símbolo duplicado" en xcode con bibliotecas estáticas compartidas?

Símbolo duplicado: Incluir lib estática A en lib estática B, también incluye lib A y B en XCode Project

Cree un marco estático para cada biblioteca. Documente las dependencies en los files de encabezado.

[Editar]: Ahora prefiero usar Cocoapods. Ver https://stackoverflow.com/a/10781087/9636