Associer les dépendances Firebase de manière statique ou dynamique

À partir de CocoaPods 1.9.0 et de Firebase 7, vous pouvez choisir si vos dépendances Firebase sont compilées en tant que frameworks statiques ou dynamiques. Nous vous recommandons d'utiliser des frameworks statiques, sauf si vous avez besoin de certains comportements de bibliothèque dynamique.

Notez que les bibliothèques développées en dehors de GitHub ne peuvent être liées statiquement, même avec CocoaPods 1.9.0 et versions ultérieures. Actuellement, cette liste de bibliothèques inclut AdMob, Analytics, Firebase ML et Performance Monitoring. Tous les autres canaux de distribution, y compris le fichier zip, Swift Package Manager et Carthage, ne fournissent que des bibliothèques liées statiquement.

Dans ce document, nous partons du principe que vous connaissez le fonctionnement de l'association dynamique et statique sur les plates-formes Apple. Si vous ne connaissez pas bien ces concepts, consultez la documentation suivante :

Étant donné que ce document porte sur les types de liaison de bibliothèque et non sur le chargement de bundles de ressources non exécutables, les termes bibliothèque et framework sont utilisés de manière interchangeable.

Liaison statique

Les bibliothèques associées de manière statique sont regroupées dans l'exécutable de votre application au moment de la compilation. Par conséquent, les fichiers objets de la bibliothèque statique seront présents dans votre application lors de son lancement et n'auront pas besoin d'être résolus au moment du lancement de l'application par l'éditeur de liens dynamique. Par conséquent, les applications utilisant l'association statique se lanceront plus rapidement. Cela se fait au détriment d'un exécutable binaire / d'application légèrement plus volumineux, mais il convient de noter que la taille plus importante de l'exécutable sera compensée par l'absence de bibliothèques dynamiques groupées.

Vous pouvez forcer l'association statique des dépendances Firebase en spécifiant explicitement l'association dans votre fichier Podfile :

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

Association dynamique

Les bibliothèques liées dynamiquement sont stockées dans le bundle de votre application, séparément de l'exécutable principal de votre application. Elles doivent être chargées au lancement de l'application par l'éditeur de liens dynamique. Les frameworks d'Apple sont tous liés de manière dynamique pour permettre le partage de code entre les processus. De même, vous pouvez utiliser des frameworks dynamiques pour partager du code entre les cibles d'application et d'extension. Vous ne pouvez pas partager de frameworks dynamiques entre des applications distinctes, même si elles sont toutes deux signées par le même développeur.

Si vous souhaitez utiliser Firebase comme dépendance d'une cible de framework dynamique, vous devez également associer Firebase de manière dynamique. Sinon, vous rencontrerez des définitions de classe en double dans l'exécution de votre application. La liaison dynamique est le comportement par défaut avec use_frameworks!, mais vous pouvez toujours spécifier explicitement la liaison dynamique dans votre fichier Podfile :

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

Notez que la liaison dynamique peut augmenter le temps de lancement de votre application, en particulier si elle comporte de nombreuses dépendances.