A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se le tue dipendenze Firebase sono costruite come framework statici o dinamici. Si consiglia di utilizzare framework statici a meno che non siano necessari determinati comportamenti della libreria dinamica.
Tieni presente che le librerie sviluppate al di fuori di GitHub possono essere collegate solo staticamente anche con CocoaPods 1.9.0 e versioni successive. Attualmente, questo elenco di librerie include AdMob, Analytics, Firebase ML e Monitoraggio delle prestazioni. Tutti gli altri canali di distribuzione, incluso 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, dai un'occhiata alla seguente documentazione:
- Argomenti di programmazione Mach-O
- Argomenti sulla programmazione della libreria dinamica
- Utilizzo di Firebase nelle librerie
Poiché questo documento si occupa dei tipi di collegamento alla libreria e non del caricamento di pacchetti di risorse non eseguibili, i termini libreria e framework sono usati in modo intercambiabile.
Collegamento statico
Le librerie collegate staticamente sono raggruppate nell'eseguibile dell'applicazione in fase di compilazione. Di conseguenza, i file oggetto nella libreria statica saranno presenti nell'app all'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ù velocemente. Ciò va a scapito di un eseguibile binario / app leggermente più grande, anche se va notato che la dimensione eseguibile maggiore sarà compensata dalla mancanza di librerie dinamiche in bundle.
Puoi forzare il collegamento statico delle dipendenze Firebase specificando esplicitamente il collegamento nel tuo 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 framework dinamici per condividere il codice tra la tua app e le destinazioni dell'estensione. Non è possibile condividere framework dinamici tra applicazioni separate, anche se entrambe sono firmate dallo stesso sviluppatore.
Se desideri utilizzare Firebase come dipendenza di un target framework dinamico, devi anche collegare Firebase in modo dinamico; altrimenti ti imbatterai in definizioni di classe duplicate nel runtime della tua app. Il collegamento dinamico è il comportamento predefinito con use_frameworks!
, ma puoi ancora specificare esplicitamente il collegamento dinamico nel tuo Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Tieni presente che il collegamento dinamico può aumentare il tempo di avvio della tua app, soprattutto se la tua app ha molte dipendenze.