Collega le dipendenze di Firebase in modo statico o dinamico

A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se le tue dipendenze Firebase sono create come framework statici o dinamici. Ti consigliamo 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 raccolte include AdMob, Analytics, Firebase ML e Performance Monitoring. 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 su piattaforme Apple. Se non hai familiarità con questi concetti, dai un'occhiata alla seguente documentazione:

Poiché questo documento riguarda i tipi di collegamento delle librerie e non il caricamento di pacchetti di risorse non eseguibili, i termini libreria e framework sono usati 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 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 nell'app bundle separatamente dall'eseguibile principale dell'app e devono essere caricate al momento dell'avvio dell'app dal linker dinamico. I framework 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 firmate dallo stesso sviluppatore.

Se desideri utilizzare Firebase come dipendenza di un target del 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 comunque 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.