web-dev-qa-db-fra.com

Puis-je utiliser CocoaPods lors de la création d'un framework Cocoa Touch?

Je crée un nouveau framework Cocoa Touch (MyFramework.framework), qui dépendra d'Alamofire. Ce cadre sera écrit en Swift. En guise de test, j'ai lancé un nouveau projet Cocoa Touch Framework:

File > New > Project > Framework & Library > Cocoa Touch Framework

Ensuite, dans le terminal j'ai effectué:

pod init

sous ce répertoire de projets. Dans le fichier podfile nouvellement créé, j'ai ajouté ce qui suit:

source 'https://github.com/CocoaPods/Specs.git'
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!

pod 'Alamofire', '~> 3.0'

Encore une fois, dans le terminal, j'ai effectué:

pod install

et a commencé à coder loin. 

Tout semblait aller bien jusqu'à ce que j'utilise le produit MyFramework.framework dans un projet à vue unique. Lorsque j'essaie de lancer le projet, le problème suivant se pose: 

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework
Reason: image not found

Je pensais que les projets Cocoa Touch Framework étaient intrinsèquement dynamiques et engloberaient donc toutes les dépendances. 

Quelqu'un peut-il me dire pourquoi cela se produit et comment je pourrais y remédier? Est-ce un problème avec CocoaPods ou est-ce que je manque quelque chose?

Je suis un non-fumeur à Stack Overflow, alors faites-le-moi savoir si vous souhaitez plus d'informations de ma part. 

Merci!

32
bneu

Malheureusement, CocoaPods ne prend pas en charge l'utilisation de la cible Cocoa Touch Framework. J'ai trouvé quelques références à cela en fouillant dans leurs numéros sur GitHub:

Nous ne prenons pas vraiment en charge l'intégration des pods dans les cibles du framework ...
- neonichu le 4 nov. 2015

et

Pour que cela fonctionne, PC devrait procéder à une analyse récursive des dépendances dans votre projet Xcode et veiller à ce que le produit ne soit jamais utilisé dans un autre contexte.
- neonichu le 7 juil. 2015


Jusqu'ici, j'ai trouvé deux moyens de régler le problème:

La bonne façon est de créer une nouvelle spécification de pod pour votre framework et de l'intégrer à votre projet principal via CocoaPods. Cela résout tous les problèmes que CococaPods rencontre avec le graphe de dépendances et constitue la solution recommandée par les développeurs de CocoaPods.

La solution de facilité consiste à inclure les pods de votre framework dans votre projet principal. Cela semble fonctionner, mais franchement, je ne sais pas pourquoi. Voici le fichier podfile de mon projet de test:

platform :ios, '9.0'
use_frameworks!

def myfirstframework_pods
    pod 'Alamofire', '~> 3.0'
end

target 'MyApp' do
    pod 'SwiftKeychainWrapper', '~>1.0'
    myfirstframework_pods
end

target 'MyFirstFramework' do
    myfirstframework_pods
end
24
Dallas Edwards

Essayez d'ajouter la dépendance à Alamofire dans le podspec du framework comme ci-dessous 

Pod::Spec.new do |s|

# Other setup 

# Dependencies
s.dependency "Alamofire"
# Other dependencies if any
0
humblePilgrim