Vincular dependências do Firebase estaticamente ou dinamicamente

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

Observe que as bibliotecas desenvolvidas fora do GitHub só podem ser vinculadas estaticamente mesmo com o CocoaPods 1.9.0 e posterior. Atualmente, essa lista de bibliotecas inclui AdMob, Analytics, Firebase ML e Monitoramento de desempenho. Todos os outros canais de distribuição, incluindo o arquivo zip, o Swift Package Manager e o 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:

Como este documento trata dos tipos de vinculação de bibliotecas e não do carregamento de pacotes de recursos não executáveis, os termos biblioteca e estrutura são usados ​​alternadamente.

Vinculação estática

Bibliotecas vinculadas estaticamente são empacotadas em seu aplicativo executável no momento da compilação. Como resultado, os arquivos de objeto na biblioteca estática estarão presentes em seu aplicativo quando ele for iniciado e não precisarão ser resolvidos no momento da inicialização do aplicativo pelo vinculador dinâmico. Consequentemente, os aplicativos que usam vinculação estática serão iniciados mais rapidamente. Isso ocorre às custas de um executável binário/aplicativo um pouco maior, embora deva ser observado que o tamanho maior do executável 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

Vinculação dinâmica

As bibliotecas vinculadas dinamicamente são armazenadas em seu pacote de aplicativos separadamente do executável principal de seu 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 seu aplicativo e destinos de extensão. Você não pode compartilhar estruturas dinâmicas entre aplicativos separados, mesmo que ambos sejam assinados pelo mesmo desenvolvedor.

Se você quiser usar o Firebase como uma dependência de um destino de estrutura dinâmica, também precisará vincular o Firebase dinamicamente; caso contrário, você encontrará definições de classe duplicadas no 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 a vinculação dinâmica pode aumentar o tempo de inicialização do seu aplicativo, especialmente se ele tiver muitas dependências.