Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Vincular dependencias de Firebase de forma estática o dinámica

A partir de CocoaPods 1.9.0 y Firebase 7, puede elegir si sus dependencias de Firebase se compilan como marcos estáticos o dinámicos. Recomendamos el uso de marcos estáticos a menos que requiera ciertos comportamientos de biblioteca dinámica.

Tenga en cuenta que las bibliotecas desarrolladas fuera de GitHub solo se pueden vincular estáticamente incluso con CocoaPods 1.9.0 y versiones posteriores. Actualmente, esta lista de bibliotecas incluye AdMob, Analytics, Firebase ML y Performance Monitoring. Todos los demás canales de distribución, incluido el archivo zip, Swift Package Manager y Carthage, solo proporcionan bibliotecas vinculadas estáticamente.

Este documento asume un conocimiento práctico de los enlaces dinámicos y estáticos en las plataformas de Apple. Si no está familiarizado con estos conceptos, consulte la siguiente documentación:

Desde este documento se refiere a los tipos de vinculación de biblioteca y no la carga de paquetes de recursos no ejecutables, la biblioteca y el marco términos se utilizan indistintamente.

Enlace estático

Las bibliotecas vinculadas estáticamente se incluyen en el ejecutable de la aplicación en el momento de la compilación. Como resultado, los archivos de objeto de la biblioteca estática estarán presentes en su aplicación cuando se inicie y no es necesario que el vinculador dinámico los resuelva en el momento del lanzamiento de la aplicación. En consecuencia, las aplicaciones que utilizan enlaces estáticos se iniciarán más rápido. Esto se produce a expensas de un ejecutable binario / de aplicación ligeramente más grande, aunque debe tenerse en cuenta que el tamaño del ejecutable más grande se verá compensado por la falta de bibliotecas dinámicas empaquetadas.

Puedes forzar la vinculación estática de las dependencias de Firebase especificando explícitamente la vinculación en tu Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

Vinculación dinámica

Las bibliotecas vinculadas dinámicamente se almacenan en su paquete de aplicaciones por separado del ejecutable principal de su aplicación, y el vinculador dinámico debe cargarlas en el momento del lanzamiento de la aplicación. Los marcos de Apple están todos vinculados dinámicamente para permitir el uso compartido de código entre procesos; de manera similar, puede usar marcos dinámicos para compartir código entre su aplicación y los destinos de extensión. No puede compartir marcos dinámicos entre aplicaciones independientes, incluso si ambas están firmadas por el mismo desarrollador.

Si desea usar Firebase como una dependencia de un objetivo de marco dinámico, también debe vincular Firebase de forma dinámica; de lo contrario se encontrará con las definiciones de clase duplicados en tiempo de ejecución de la aplicación. La vinculación dinámica es el comportamiento por defecto con use_frameworks! , pero aún puede especificar explícitamente el enlace dinámico en su Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic

Tenga en cuenta que los enlaces dinámicos pueden aumentar el tiempo de inicio de su aplicación, especialmente si su aplicación tiene muchas dependencias.