A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se le dipendenze Firebase vengono create come framework statici o dinamici. Ti consigliamo di utilizzare framework statici, a meno che tu non abbia bisogno di determinati comportamenti delle librerie dinamiche.
Tieni presente che le librerie sviluppate al di fuori di GitHub possono essere collegate solo in modo statico anche con CocoaPods 1.9.0 e versioni successive. Attualmente, 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 documentazione seguente:
- Mach-O Programming Topics
- Argomenti di programmazione della libreria dinamica
- 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 nella tua app al momento dell'avvio e non dovranno essere risolti al momento dell'avvio dell'app dal linker dinamico. Di conseguenza, le app che utilizzano il collegamento statico verranno avviate più rapidamente. Ciò avviene a scapito di un binario / eseguibile dell'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 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 al momento dell'avvio dell'app dal linker dinamico. 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 i target dell'app e dell'estensione. Non puoi condividere framework dinamici tra applicazioni separate, anche se sono entrambe firmate dallo stesso sviluppatore.
Se vuoi utilizzare Firebase come dipendenza di una destinazione del framework dinamico, devi anche collegare Firebase in modo dinamico. 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.