ios frameworks static-libraries static-linking ios-frameworks

Aclaraciones de marcos estáticos vs dinámicos de iOS



frameworks static-libraries (5)

Antes de iOS8, Xcode solo permitía la opción de crear bibliotecas estáticas para iOS. El problema común con eso era que teníamos que enviar el binario y los encabezados por separado.

Más tarde, algunos desarrolladores tuvieron la idea de crear ''marcos estáticos''. [el .framework es solo una carpeta con enlaces simbólicos a la biblioteca y los encabezados]. Un ejemplo de ello es https://github.com/jverkoey/iOS-Framework

Esta opción funcionará para iOS 7 u 8 o antes. Porque son solo bibliotecas estáticas con la conveniencia de agrupar los archivos de encabezados.

En cuanto a sus preguntas sobre los recursos, necesitaríamos agruparlos en ''.bundle''. Para enviarlos, no estoy seguro de si podemos incluirlos en la carpeta .framework ... En el pasado solía enviar mis libs como un marco estático y paquete ...

Sin embargo, la opción anterior no funcionará si utiliza Swift. Xcode no admite la creación de bibliotecas estáticas que incluyen código rápido.

Debe ir con marcos dinámicos si hay un uso rápido. En teoría, los marcos dinámicos funcionan en iOS7. Pero creo que iTunes Connect rechazará si la aplicación está dirigida a iOS7 y usa marcos dinámicos :-).

Espero que esto ayude

Tengo que admitir que con el lanzamiento de iOS 8 estoy un poco confundido acerca de los marcos dinámicos y estáticos en iOS.

Estoy buscando una manera de distribuir una biblioteca que creé, y necesito admitir iOS 7 y superior. (Nota: este será un marco propietario. No puedo usar vainas de cacao y tampoco puedo distribuir la fuente). Esto es lo que ya sé:

  • iOS 8 introdujo "marcos incrustados" para iOS, pero, según tengo entendido, no funcionan para iOS 7, solo para iOS 8 y superior.
  • Tengo la opción de distribuir mi biblioteca como una biblioteca estática (archivo .a) y también distribuir los encabezados. Sé que esta es una forma común de lidiar con la situación, pero me gustaría encontrar algo más simple que eso (y también agrupar algunos recursos, si es posible).
  • También descubrí que iOS 7 no admite bibliotecas dinámicas de .framework (solo estáticas) porque no admite enlaces dinámicos. Pero iOS 8 sí, así como la vinculación estática.

Y aquí están mis preguntas con respecto a esta información:

  • Vi que puedo crear un objetivo .framework y hacerlo estático, cambiando el tipo de Mach-O a "biblioteca estática. ¿Sería suficiente para soportar iOS 7 sin problemas y también para distribuir mi biblioteca como un .framework bundle? Si es así, ¿por qué los "frameworks integrados" en iOS 8 son tan importantes, ya que muchos recursos en Internet sugieren? ¿Me estoy perdiendo algo?
  • ¿Es necesario codificar el .framework tal como lo hago con cualquier otra aplicación que haga?
  • ¿Qué sucede si necesito incluir otros recursos (como Core Data o Images) con mi archivo .framework? ¿Tendré que hacer un archivo .bundle separado para eso?

Con Xcode 9 en adelante, también puede crear marcos estáticos para Swift. Esto es posible debido a la compatibilidad de fuente ABI. Todo lo que necesita hacer es cambiar el tipo de Mach-O type en la configuración de compilación del objetivo del marco. Esta técnica también es aplicable a los marcos híbridos (marcos con código Swift y Objective-C).


Los marcos son bibliotecas static o dynamic empaquetadas en un paquete con algunos activos adicionales, meta descripción para versiones y más.

Puede cambiar el formato de la biblioteca que tendrá un impacto en un Linker cambiando el Framework target -> Build Settings -> Mach-O Type [About] a Static Library o Dynamic Library . Por defecto, Xcode tiene un valor de Dynamic Library .

Depende de esta configuración, se generarán diferentes tipos de binarios [comprobar estático o dinámico]

Después de configurar con éxito un consumidor [Link vs Embed]

Static Linker ld : en tiempo de compilación incluirá todo el código de la static library en el archivo de objeto ejecutable.

Dynamic Linker ld : en tiempo de carga / ejecución intentará encontrar el marco incrustado usando @rpath [About] y vincularlo


No tengo todas las respuestas, pero intentaré abordar algunas de sus preguntas aquí.

  • Recibirá una advertencia para usar estos marcos en iOS 7, sin embargo, eso es todo, una advertencia. Mira esta answer .

  • Puede incluir otros recursos como CoreData, sin embargo, deberá crearlos en código manualmente. Aquí hay un tutorial muestra cómo crear un modelo de datos básicos.

  • Debe codificar las bibliotecas dinámicas de signos para iOS.

  • Debe asegurarse de que su marco admite arquitecturas de simulador y de dispositivo si planea distribuirlo.


Swift no funciona en lib estática. Si tiene que usar el marco dinámico, debe configurar iOS mínimo a 8.0 porque AppStore rechaza iOS 7 con marco dinámico