Check out what’s new from Firebase at Google I/O 2022. Learn more

Vincular las 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 usar marcos estáticos a menos que requiera ciertos comportamientos de biblioteca dinámicos.

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, eche un vistazo a la siguiente documentación:

Dado que este documento se ocupa de los tipos de enlace de la biblioteca y no de la carga de paquetes de recursos no ejecutables, los términos biblioteca y marco se usan indistintamente.

Enlace estático

Las bibliotecas vinculadas estáticamente se incluyen en el ejecutable de su aplicación en el momento de la compilación. Como resultado, los archivos de objeto en 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 inicio de la aplicación. En consecuencia, las aplicaciones que usan enlaces estáticos se iniciarán más rápido. Esto se produce a expensas de un ejecutable binario/aplicación un poco más grande, aunque debe tenerse en cuenta que el tamaño ejecutable más grande se verá compensado por la falta de bibliotecas dinámicas incluidas.

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

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

Enlace dinámico

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 inicio de la aplicación. Los marcos de trabajo de Apple están todos vinculados dinámicamente para permitir el código compartido entre procesos; De manera similar, puede usar marcos dinámicos para compartir código entre su aplicación y los objetivos de la extensión. No puede compartir marcos dinámicos entre aplicaciones separadas, incluso si ambas están firmadas por el mismo desarrollador.

Si desea utilizar Firebase como una dependencia de un objetivo de marco dinámico, también debe vincular Firebase dinámicamente; de lo contrario, se encontrará con definiciones de clases duplicadas en el tiempo de ejecución de su aplicación. ¡La vinculación dinámica es el comportamiento predeterminado 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 la vinculación dinámica puede aumentar el tiempo de ejecución de su aplicación, especialmente si su aplicación tiene muchas dependencias.