web-dev-qa-db-fra.com

Utilisation de bibliothèques statiques avec CocoaPods 1.5 aucun module de ce type à l'importation

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

À ce stade, ma tentative simple (c'est-à-dire simpliste) a été de supprimer la commande use_frameworks lors de l'exécution de l'installation de mon pod. Cela transforme en effet mes pods en bibliothèques statiques. Mais il produit également une série de "aucun module tel" tout au long de mon projet lorsque j'essaie d'importer mes modules (par exemple, "aucun module PureLayout ou aucun 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é depuis un jour de trouver une bonne documentation sur la façon d'importer, d'utiliser et de déployer correctement des bibliothèques statiques pour un Swift Projet mais n'a 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 fournissant des liens vers des instructions détaillées sur la façon de passer de bibliothèques dynamiques à des bibliothèques statiques?

Merci beaucoup!

7
Franc

Introduction de CocoaPods 1.5.0 use_modular_headers! pour continuer à prendre en charge les modules avec des bibliothèques statiques. Détails dans les notes de version .

Vous pouvez également modifier les importations modulaires dans vos sources pour importer des fichiers.

Je recommanderais également d'essayer la version bêta de CocoaPods 1.6.0 car elle contient plusieurs correctifs pour les problèmes de bibliothèque et de cadre statiques/dynamiques.

3
Paul Beusterien

Dans la plupart des cas, pour un petit projet, il suffira d'ajouter use_modular_headers! au lieu du supprimé import_frameworks!.

Vous pouvez également essayer d'ajouter :modular_headers => true après chaque déclaration de module 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 tout simplement pas être statiques, avec ou sans en-têtes modulaires. Un bon exemple est le SDK Facebook. Pour ce cas, il y a un ajout sympa ici , qui permet de spécifier quels modules vous souhaitez laisser dynamiques.

Voici un exemple de fichier pod, où toutes les bibliothèques seront statiques à l'exception de celles répertorié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
4
Vitalii