Vincular dependências do Firebase de maneira estática ou dinâmica

A partir do CocoaPods 1.9.0 e do Firebase 7, é possível escolher se as dependências do Firebase serão criadas como frameworks estáticos ou dinâmicos. A menos que você exija determinados comportamentos dinâmicos de biblioteca, o uso de frameworks estáticos é recomendado.

As bibliotecas desenvolvidas fora do GitHub podem ser vinculadas apenas estaticamente, mesmo com o CocoaPods 1.9.0 e as versões posteriores. Atualmente, a lista de bibliotecas inclui AdMob, Analytics, Firebase ML e Monitoramento de desempenho. Todos os outros canais de distribuição, incluindo o arquivo ZIP, o Gerenciador de pacotes do Swift e o Carthage, fornecem somente bibliotecas vinculadas estaticamente.

Neste documento, partimos do princípio que você tem um conhecimento prático de vinculação dinâmica e estática nas plataformas da Apple. Caso não conheça bem esses conceitos, consulte a seguinte documentação:

Este documento trata dos tipos de vinculação de biblioteca, e não do carregamento de pacotes de recursos não executáveis, portanto, os termos biblioteca e framework são usados alternadamente.

Vinculação estática

As bibliotecas com vinculação estática são incluídas no app executável no momento da compilação. Como resultado, os arquivos de objetos da biblioteca estática estarão presentes no app quando ele for iniciado e não precisarão ser resolvidos no momento da inicialização pelo vinculador dinâmico. Consequentemente, os apps que usam links estáticos serão iniciados mais rapidamente. Isso acontece devido a um executável de app / binário um pouco maior. É importante observar que o executável maior será compensado pela falta de bibliotecas dinâmicas agrupadas.

É possível forçar a vinculação estática das dependências do Firebase ao especificar explicitamente o vínculo no seu Podfile:

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

Vinculação dinâmica

As bibliotecas vinculadas dinamicamente são armazenadas no seu pacote de apps separadamente do executável principal do app e precisam ser carregadas no momento da inicialização do app pelo vinculador dinâmico. Todos os frameworks da Apple são vinculados dinamicamente para permitir o compartilhamento de código entre processos. Da mesma forma, você pode usar frameworks dinâmicos para compartilhar código entre o app e a extensão de destino. Não é possível compartilhar frameworks dinâmicos 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 framework dinâmico, também precisará vincular o Firebase dinamicamente. Caso contrário, você verá definições de classes duplicadas no ambiente de execução do seu app. A vinculação dinâmica é o comportamento padrão com use_frameworks!, mas ainda é possível especificar explicitamente a vinculação dinâmica no 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 app, especialmente se ele tiver muitas dependências.