J'ai un composant iOS qui repose sur le Stripe iOS SDK , Project A. J'ai inclus le Stripe SDK dans Project A dans Xcode et il compile très bien.
Cependant, je construis un autre projet dans Xcode qui repose sur ce composant, le projet B. J'ai ajouté le projet A aux bibliothèques du projet B. Le projet A repose sur le projet B mais ne dépend pas directement du Stripe SDK.
Maintenant, chaque fois que j'essaie de compiler le projet B, j'obtiens cette erreur:
ld: framework not found Stripe for architecture x86_64
Cette ligne (à l'intérieur du projet A) semble déclencher l'erreur:
#import <Stripe/Stripe.h>
Xcode n'a aucun problème pour trouver Stripe.h
. J'ai également essayé d'ajouter le SDK Stripe directement au projet B. J'ai vérifié deux fois et trié la section Build Phases -> Link Binary With Libraries pour toutes les cibles (Stripe.framework
Est répertorié).
J'ai ajouté le framework Stripe manuellement, alors j'ai également essayé de l'ajouter avec Cocoapods à la place, mais cela n'a pas fonctionné non plus.
Aidez-moi!
Voici la structure du projet pour le projet B ("exemple"), avec le projet A ("RCTFBLogin") en dessous.
Voici l'erreur complète:
J'utilise Xcode 7.2 et la version la plus récente du SDK Stripe (6.0.0). Le même code de cadre Stripe fonctionne bien dans un autre projet.
Merci.
Mise à jour: j'ai ajouté "$(SRCROOT)/../..
" (puisque le projet B habite deux dossiers profondément à l'intérieur du projet A) dans "Framework Search Paths" sous Build Settings -> "Search Paths" pour la cible du projet B et la compilation a commencé avec succès . Cependant, j'obtiens maintenant cette erreur lors de l'exécution:
ld: warning: Auto-Linking supplied '/Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe', framework linker option at /Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe is not a dylib
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Stripe", referenced from:
objc-class-ref in libRCTFBLogin.a(RCTFBLogin.o)
ld: symbol(s) not found for architecture x86_64
J'ai dû faire deux choses pour que cela fonctionne:
Ajoutez "$ (SRCROOT) /../ .." (puisque le projet B habite deux dossiers profondément dans le projet A) à "Framework Search Paths" sous Build Settings -> "Search Paths" pour la cible du projet B.
Ajoutez également le SDK Stripe aux infrastructures du projet B. Cette deuxième étape m'a particulièrement surpris car le projet B ne s'appuie pas directement sur Stripe.
Je voyais ce même problème avec un autre cadre lors de l'exécution de ma cible de test. J'ai dû ajouter le framework à ma cible de test (pas seulement ma cible normale) sous Build Phases > Link Binary With Libraries
section.
Carthage a plus d'informations sur le problème que j'ai vu: https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework
Voici à quoi ressemble mon podfile:
def shared_pods
pod ‘GoogleMaps', '~> 1.13.0'
pod ‘SwiftyJSON', '~> 2.3.2'
pod ‘Alamofire', '~> 3.2.1'
pod ‘MGSwipeTableCell’
end
target 'projectName' do
shared_pods
end
Alors j'ai ajouté ceci au podfile:
target ‘ProjectTests’ do
pod ‘Nimble’, ‘~> 4.0.0’
pod ’Quick’
end
Ce que je devais aussi faire était:
target ‘ProjectTests’ do
shared_pods // I needed to add this line as well. Since this line included the needed 'MGSwipeTableCell' framework
pod ‘Nimble’, ‘~> 4.0.0’
pod ’Quick’
end
Donc, une raison possible serait que dans votre podfile vous ne les avez pas ajoutés correctement, assurez-vous simplement que le cadre est ajouté dans les cibles nécessaires.
Vous avez remarqué ce problème lors du passage de certaines dépendances des pods à carthage. Semblable à la réponse de Honey, j'ai pu contourner cette erreur en modifiant le podfile.
Il s'avère que tout ce que j'avais à ajouter était la cible de test. Ensuite, exécutez "pod install" et il liera votre cible de test à vos frameworks générés par vos pods.
target 'Project' do
use_frameworks!
//pods here normally
target 'ProjectTests' do
//nothing in here
end
end