A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se le dipendenze di Firebase vengono create come framework statici o dinamici. Ti consigliamo di utilizzare i framework statici, a meno che non siano necessari determinati comportamenti delle librerie dinamiche.
Tieni presente che le librerie sviluppate al di fuori di GitHub possono essere collegate staticamente anche con CocoaPods 1.9.0 e versioni successive. Al momento, questo elenco di librerie include AdMob, Analytics, Firebase ML, e Performance Monitoring. Tutti gli altri canali di distribuzione, inclusi il file ZIP, Swift Package Manager e Carthage, forniscono solo librerie collegate staticamente.
Questo documento presuppone una conoscenza pratica del collegamento dinamico e statico sulle piattaforme Apple. Se non hai familiarità con questi concetti, consulta la seguente documentazione:
- Argomenti di programmazione Mach-O
- Argomenti di programmazione delle librerie dinamiche
- Utilizzo di Firebase nelle librerie
Poiché questo documento riguarda i tipi di collegamento delle librerie e non il caricamento di bundle di risorse non eseguibili, i termini libreria e framework vengono utilizzati in modo intercambiabile.
Collegamento statico
Le librerie collegate staticamente vengono raggruppate nell'eseguibile dell'applicazione in fase di compilazione. Di conseguenza, i file oggetto nella libreria statica saranno presenti nell'app al momento dell'avvio e non dovranno essere risolti dal linker dinamico in fase di avvio dell'app. Di conseguenza, le app che utilizzano il collegamento statico verranno avviate più rapidamente. Questo a scapito di un eseguibile binario / app leggermente più grande, anche se va notato che le dimensioni maggiori dell'eseguibile saranno compensate dalla mancanza di librerie dinamiche in bundle.
Puoi forzare il collegamento statico delle dipendenze di Firebase specificando esplicitamente il collegamento nel Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Collegamento dinamico
Le librerie collegate dinamicamente vengono archiviate nel bundle dell'app separatamente dall' eseguibile principale dell'app e devono essere caricate dal linker dinamico in fase di avvio dell' app. I framework di Apple sono tutti collegati dinamicamente per consentire la condivisione del codice tra i processi; allo stesso modo, puoi utilizzare i framework dinamici per condividere il codice tra l'app e i target di estensione. Non puoi condividere framework dinamici tra applicazioni separate, anche se entrambe sono firmate dallo stesso sviluppatore.
Se vuoi utilizzare Firebase come dipendenza di un target di framework dinamico, devi
anche collegare Firebase dinamicamente; in caso contrario, si verificheranno
definizioni di classi duplicate
nel runtime dell'app. Il collegamento dinamico è il comportamento predefinito con
use_frameworks!, ma puoi comunque specificare esplicitamente il collegamento dinamico nel tuo
Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Tieni presente che il collegamento dinamico potrebbe aumentare il tempo di avvio dell'app, soprattutto se l'app ha molte dipendenze.