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

Vincule dependências do Firebase estaticamente ou dinamicamente

A partir do CocoaPods 1.9.0 e Firebase 7, você pode escolher se suas dependências do Firebase são construídas como estruturas estáticas ou dinâmicas. Recomendamos o uso de estruturas estáticas, a menos que você exija certos comportamentos dinâmicos de biblioteca.

Observe que as bibliotecas desenvolvidas fora do GitHub só podem ser vinculadas estaticamente, mesmo com CocoaPods 1.9.0 e posterior. Atualmente, esta lista de biblioteca inclui AdMob, Analytics, Firebase ML e Monitoramento de desempenho. Todos os outros canais de distribuição, incluindo o arquivo zip, Swift Package Manager e Carthage fornecem apenas bibliotecas vinculadas estaticamente.

Este documento pressupõe um conhecimento prático de vinculação dinâmica e estática em plataformas Apple. Se você não estiver familiarizado com esses conceitos, dê uma olhada na seguinte documentação:

Uma vez que este documento está preocupado com os tipos de ligação de biblioteca e não o carregamento de pacotes de recursos não-executáveis, a biblioteca e quadro termos são usados alternadamente.

Link estático

Bibliotecas vinculadas estaticamente são agrupadas no executável do aplicativo no momento da construção. Como resultado, os arquivos de objeto na biblioteca estática estarão presentes em seu aplicativo quando ele for iniciado e não precisam ser resolvidos no momento da inicialização do aplicativo pelo vinculador dinâmico. Consequentemente, os aplicativos que usam links estáticos serão iniciados mais rapidamente. Isso ocorre às custas de um executável binário / aplicativo ligeiramente maior, embora deva ser observado que o tamanho do executável maior será compensado pela falta de bibliotecas dinâmicas agrupadas.

Você pode forçar a vinculação estática de dependências do Firebase especificando explicitamente a vinculação em seu Podfile:

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

Link dinâmico

Bibliotecas vinculadas dinamicamente são armazenadas em seu pacote de aplicativos separadamente do executável principal do aplicativo e devem ser carregadas no momento da inicialização do aplicativo pelo vinculador dinâmico. As estruturas da Apple são todas vinculadas dinamicamente para permitir o compartilhamento de código entre os processos; da mesma forma, você pode usar estruturas dinâmicas para compartilhar código entre seus destinos de aplicativo e extensão. Você não pode compartilhar estruturas dinâmicas entre aplicativos separados, mesmo se ambos forem assinados pelo mesmo desenvolvedor.

Se você deseja usar o Firebase como uma dependência de um destino de estrutura dinâmica, também precisa vincular o Firebase dinamicamente; caso contrário, você vai correr em definições de classe duplicados em tempo de execução do seu aplicativo. A vinculação dinâmica é o comportamento padrão com use_frameworks! , mas você ainda pode especificar explicitamente a vinculação dinâmica em seu Podfile:

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

Observe que os links dinâmicos podem aumentar o tempo de inicialização do seu aplicativo, especialmente se o seu aplicativo tiver muitas dependências.