web-dev-qa-db-fra.com

ld: framework introuvable Stripe pour l'architecture x86_64

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.

enter image description here

Voici l'erreur complète:

enter image description here

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
16
Lane Rettig

J'ai dû faire deux choses pour que cela fonctionne:

  1. 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.

  2. 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.

6
Lane Rettig

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

13
Adam Johns

Avez-vous rencontré ce problème lorsque vous avez exécuté vos cas de test?

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.

10
Honey

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
3
Brooks DuBois