A partir de CocoaPods 1.9.0 y Firebase 7, puedes elegir si tus dependencias de Firebase se crean como marcos estáticos o dinámicos. Recomendamos utilizar 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 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 enlaces dinámicos y estáticos en plataformas Apple. Si no está familiarizado con estos conceptos, consulte la siguiente documentación:
- Temas de programación Mach-O
- Temas de programación de biblioteca dinámica
- Usando Firebase en bibliotecas
Dado que este documento se ocupa de los tipos de vinculación de bibliotecas y no de la carga de paquetes de recursos no ejecutables, los términos biblioteca y marco se utilizan 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 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 inicio 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 un poco más grande, aunque debe tenerse en cuenta que el mayor tamaño del ejecutable se verá compensado por la falta de bibliotecas dinámicas incluidas.
Puedes forzar el enlace estático de las dependencias de Firebase especificando explícitamente el enlace en tu Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Enlace dinámico
Las bibliotecas vinculadas dinámicamente se almacenan en el paquete de su aplicación 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. Todos los marcos de Apple están vinculados dinámicamente para permitir el uso compartido de código entre procesos; De manera similar, puede utilizar marcos dinámicos para compartir código entre su aplicación y los destinos de la extensión. No puede compartir marcos dinámicos entre aplicaciones independientes, 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. ¡El enlace dinámico es el comportamiento predeterminado con use_frameworks!
, pero aún puedes especificar explícitamente el enlace dinámico en tu 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.