A partir de CocoaPods 1.9.0 y Firebase 7, puedes elegir si tus dependencias de Firebase se compilan como frameworks estáticos o dinámicos. Te recomendamos usar frameworks estáticos, a menos que necesites ciertos comportamientos dinámicos de la biblioteca.
Ten en cuenta que las bibliotecas desarrolladas fuera de GitHub solo se pueden vincular de forma estática, 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, incluidos el archivo ZIP, Swift Package Manager y Carthage, solo proporcionan bibliotecas vinculadas de forma estática.
En este documento, se supone que tienes conocimiento práctico sobre la vinculación dinámica y estática en las plataformas de Apple. Si no estás familiarizado con estos conceptos, consulta la siguiente documentación:
- Mach‑O Programming Topics
- Dynamic Library Programming Topics
- Using Firebase from a framework or a library
Como este documento se relaciona con los tipos de vinculación de bibliotecas y no con la carga de conjuntos de recursos que no se pueden ejecutar, los términos biblioteca y framework se usan de manera intercambiable.
Vinculación estática
Las bibliotecas vinculadas de forma estática se agrupan en el ejecutable de la aplicación en el tiempo de compilación. Como resultado, los archivos de objeto de la biblioteca estática estarán presentes en tu app cuando se inicie, y no será necesario que el vinculador dinámico los resuelva en ese momento. Por lo tanto, las apps que usan vínculos estáticos se iniciarán más rápido. Esto tiene la desventaja de generar ejecutables de objetos binarios o de apps más grandes, aunque se debería tener en cuenta que el tamaño del ejecutable más grande se verá compensado por la falta de bibliotecas dinámicas agrupadas.
Para forzar la vinculación estática de las dependencias de Firebase, especifícala explícitamente en tu Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Vinculación dinámica
Las bibliotecas vinculadas de forma dinámica se almacenan en el paquete de la aplicación independientes del ejecutable principal de la app, y el vinculador dinámico debe cargarlas cuando se inicie la app. Los frameworks de Apple están vinculados de forma dinámica para permitir el uso compartido de códigos entre procesos. De forma similar, puedes usar frameworks dinámicos para compartir código entre las orientaciones de la app y las extensiones. No puedes compartir frameworks dinámicos entre aplicaciones diferentes, incluso si el mismo desarrollador las firmó.
Si quieres usar Firebase como una dependencia de una orientación del framework dinámico, también debes vincular Firebase de forma dinámica. De lo contrario, te encontrarás con definiciones de clase duplicadas en el tiempo de ejecución de tu app. La vinculación dinámica es el comportamiento predeterminado con use_frameworks!
, pero, de todos modos, puedes especificarla explícitamente en tu Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Ten en cuenta que es posible que la vinculación dinámica aumente el tiempo de inicio de la app, especialmente si esta tiene muchas dependencias.