Collega le dipendenze Firebase in modo statico o dinamico

A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se le tue 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 staticamente, 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 seguente documentazione:

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 build. Di conseguenza, i file oggetto nella libreria statica saranno presenti nella tua app al momento del lancio e non dovranno essere risolti al momento del lancio dell'app dal linker dinamico. Di conseguenza, le app che utilizzano il collegamento statico si avviano più velocemente. Questo avviene a scapito di un file 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 esplicitamente il collegamento nel tuo Podfile:

# cocoapods >= 1.9.0
use_frameworks! :linkage => :static

Dynamic Links

Le librerie collegate dinamicamente vengono archiviate nell'app bundle separatamente dal file 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. Analogamente, puoi utilizzare i framework dinamici per condividere il codice tra l'app e i target delle estensioni. 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 in modo dinamico, altrimenti si verificheranno definizioni di classi 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 i Dynamic Links potrebbero aumentare il tempo di avvio dell'app, soprattutto se l'app ha molte dipendenze.