A partire da CocoaPods 1.9.0 e Firebase 7, puoi scegliere se compilare le dipendenze Firebase 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, tra cui il file ZIP, Swift Package Manager e Carthage, forniscono solo librerie collegate in modo statico.
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
- Utilizzare 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 con link statico vengono incluse nell'eseguibile dell'applicazione al momento della compilazione. Di conseguenza, i file oggetto nella libreria statica saranno presenti nella tua app al momento dell'avvio e non devono essere risolti al momento dell'avvio dell'app dall'linker dinamico. Di conseguenza, le app che utilizzano il collegamento statico verranno avviate più rapidamente. Ciò avviene a scapito di un file eseguibile dell'app / binario 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 Firebase specificando esplicitamente il collegamento nel Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :static
Collegamento dinamico
Le librerie collegate dinamicamente vengono memorizzate nell'app bundle 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 in modo dinamico per consentire la condivisione di codice tra i processi. Analogamente, puoi utilizzare i framework dinamici per condividere il codice tra le 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 del framework dinamico, devi anche collegarlo dinamicamente. In caso contrario, incontrerai definizioni di classi duplicate in fase di runtime dell'app. Il collegamento dinamico è il comportamento predefinito con
use_frameworks!
, ma puoi comunque specificare esplicitamente il collegamento dinamico nel
Podfile:
# cocoapods >= 1.9.0
use_frameworks! :linkage => :dynamic
Tieni presente che il collegamento dinamico potrebbe aumentare il tempo di lancio dell'app, soprattutto se la tua app ha molte dipendenze.