A partir do CocoaPods 1.9.0 e do Firebase 7, você pode escolher se as dependências do Firebase serão criadas como estruturas estáticas ou dinâmicas. Recomendamos o uso de estruturas estáticas, a menos que você precise de determinados comportamentos de biblioteca dinâmica.
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 Performance Monitoring. 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 links dinâmicos e estáticos em plataformas Apple. Se você não estiver familiarizado com esses conceitos, dê uma olhada na seguinte documentação:
- Tópicos de programação Mach-O
- Tópicos de programação de biblioteca dinâmica
- Usando Firebase em bibliotecas
Como este documento se preocupa com os tipos de ligação de bibliotecas e não com o carregamento de pacotes de recursos não executáveis, os termos biblioteca e estrutura são usados indistintamente.
Vinculação estática
Bibliotecas vinculadas estaticamente são agrupadas no executável do seu aplicativo no momento da construção. Como resultado, os arquivos de objeto na biblioteca estática estarão presentes no seu aplicativo quando ele for iniciado e não precisarão ser resolvidos no momento da inicialização do aplicativo pelo vinculador dinâmico. Conseqüentemente, os aplicativos que usam links estáticos 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
Bibliotecas vinculadas dinamicamente são armazenadas no 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 estão todas vinculadas dinamicamente para permitir o compartilhamento de código entre processos; da mesma forma, você pode usar estruturas dinâmicas para compartilhar código entre seu aplicativo e os destinos da extensão. Você não pode compartilhar estruturas dinâmicas entre aplicativos separados, mesmo que ambos sejam assinados pelo mesmo desenvolvedor.
Se quiser usar o Firebase como uma dependência de um destino de estrutura dinâmica, você 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 ligaçã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.