17 votes

Utilisation de bibliothèques statiques avec CocoaPods 1.5 : aucun module n'existe à l'importation.

Avec la sortie de CocoaPods 1.5, j'essaie de passer de 10 à 15 pods dynamiques dans mes projets à des bibliothèques statiques, dans le but d'accélérer le démarrage de mes applications.

À ce stade, ma tentative simple (c'est-à-dire simpliste) a été de supprimer la commande use_frameworks lors de l'installation de mon pod. Cela transforme effectivement mes pods en bibliothèques statiques. Mais cela produit également une série de "No Such Module" dans tout mon projet lorsque j'essaie d'importer mes pods (par exemple, "No such Module PureLayout or no such Module FirebaseMessaging).

Je ne suis pas très versé dans toutes les subtilités des pods et des bibliothèques dynamiques/statiques et j'ai essayé pendant la journée dernière de trouver une bonne documentation sur la façon d'importer, d'utiliser et de déployer correctement les bibliothèques statiques pour un projet Swift, mais je n'ai pas pu trouver de directives claires.

J'utilise XCode 10.1 et CocoaPod 1.5.2 (version client).

Quelqu'un pourrait-il m'aider en me fournissant des liens vers des instructions détaillées sur la manière de passer des bibliothèques dynamiques aux bibliothèques statiques ?

Merci beaucoup !

17voto

Paul Beusterien Points 8051

Introduction de CocoaPods 1.5.0 use_modular_headers! pour continuer à assurer le support des modules avec les bibliothèques statiques. Les détails dans le notes de mise à jour .

Vous pouvez aussi changer les importations modulaires dans vos sources en importations de fichiers.

Je vous recommande également d'essayer la version bêta de CocoaPods 1.6.0, car elle contient plusieurs corrections pour les problèmes de bibliothèques statiques/dynamiques et de frameworks.

Mise à jour 2020

CocoaPods 1.9.0 introduit use_frameworks! :linkage => :static qui génère des frameworks complets avec des bibliothèques liées statiquement et des fichiers de modules. Cette approche est généralement encore meilleure que use_modular_headers! .

6voto

Dans la plupart des cas, pour un petit projet, il suffira d'ajouter use_modular_headers! au lieu de l'élément retiré import_frameworks! .

Vous pouvez également essayer d'ajouter :modular_headers => true après chaque déclaration de pod d'un module "manquant" :

pod 'Firebase/Auth' :modular_headers => true
pod 'Firebase/Database' :modular_headers => true
pod 'Firebase/Storage' :modular_headers => true
pod 'Firebase/DynamicLinks' :modular_headers => true

Cependant, un projet plus important peut contenir des modules qui ne veulent pas être statiques, avec ou sans en-têtes modulaires. Le SDK de Facebook en est un bon exemple. Dans ce cas, il existe un ajout intéressant aquí qui permet de préciser les modules que l'on souhaite laisser dynamiques.

Voici un exemple de podfile, où toutes les librairies seront statiques, sauf celles qui sont listées dans le tableau dynamic_frameworks :

platform :ios, deployment_target: '9.3'

inhibit_all_warnings!

# Import CocoaPods sources
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
dynamic_frameworks = ['Bolts', 'FBSDKCoreKit', 'FBSDKLoginKit', 'FBSDKShareKit']

# make all the other frameworks into static frameworks by overriding the static_framework? function to return true
pre_install do |installer|
    installer.pod_targets.each do |pod|
        if !dynamic_frameworks.include?(pod.name)
            puts "Overriding the static_framework? method for #{pod.name}"
            def pod.static_framework?;
                true
            end
        end
    end
end

target 'MyApp' do
pod 'SwiftLint'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
pod 'Firebase/DynamicLinks'
pod 'FBSDKCoreKit', '~> 4.33.0'
pod 'FBSDKLoginKit', '~> 4.33.0'
pod 'FBSDKShareKit', '~> 4.33.0'

end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X