web-dev-qa-db-ja.com

ld:フレームワークが見つかりませんx86_64アーキテクチャのストライプ

Stripe iOS SDK 、Project Aに依存するiOSコンポーネントがあります。XcodeのProject AにStripe SDKを含めたところ、正常にコンパイルされます。

ただし、このコンポーネントに依存するXcodeでプロジェクトBを構築しています。プロジェクトAをプロジェクトBのライブラリに追加しました。プロジェクトAはプロジェクトBに依存していますが、Stripe SDKに直接依存していません。

これで、プロジェクトBをコンパイルしようとすると、次のエラーが発生します。

_ld: framework not found Stripe for architecture x86_64_

次の行(プロジェクトA内)がエラーを引き起こしているようです。

_#import <Stripe/Stripe.h>_

Xcodeは_Stripe.h_を見つけるのに問題はありません。 Stripe SDKをプロジェクトBに直接追加してみました。すべてのターゲットのビルドフェーズ->ライブラリとバイナリのリンクセクションをダブルおよびトリプルチェックしました(_Stripe.framework_がリストされています)。

Stripeフレームワークを手動で追加したため、代わりにCocoapodsで追加しようとしましたが、それも機能しませんでした。

助けてください!

以下に、プロジェクトBのプロジェクト構造(「例」)とその下にプロジェクトA(「RCTFBLogin」)を示します。

enter image description here

完全なエラーは次のとおりです。

enter image description here

Xcode 7.2とStripe SDKの最新バージョン(6.0.0)を使用しています。同じStripeフレームワークコードは、別のプロジェクトで正常に機能します。

ありがとう。

更新:プロジェクトBターゲットの[フレームワーク検索パス]に[$(SRCROOT)/../.. "を追加しました(プロジェクトBはプロジェクトAの奥深くにあるため)-> [検索パス]を追加し、正常にコンパイルを開始しました。ただし、実行すると次のエラーが発生します。

_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

これを機能させるには、2つのことをしなければなりませんでした。

  1. 「$(SRCROOT)/../ ..」を追加します(プロジェクトBはプロジェクトAの2つのフォルダにあるため)。プロジェクトBターゲットの[ビルド設定]-> [検索パス]の[フレームワーク検索パス]に追加します。

  2. Stripe SDKをプロジェクトBのフレームワークにも追加します。特にプロジェクトBはストライプに直接依存していないため、この2番目のステップは驚きました。

6
Lane Rettig

テストターゲットを実行しているときに、別のフレームワークでこの同じ問題が発生していました。 Build Phases > Link Binary With Librariesセクションの下のtestターゲット(通常のターゲットだけでなく)にフレームワークを追加する必要がありました。

Carthageには、私が見た問題に関する詳細情報があります。 https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework

13
Adam Johns

テストケースを実行したときに、この問題に遭遇しましたか?

だからこれは私のポッドファイルがどのように見えるかです:

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

それで私はこれをポッドファイルに追加しました:

target ‘ProjectTests’ do
    pod ‘Nimble’, ‘~> 4.0.0’
    pod ’Quick’
end

私がする必要もあったことは:

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

考えられる理由は、ポッドファイルでそれらを正しく追加しなかったことです。フレームワークが必要なターゲットに追加されていることを確認してください。

10
Honey

いくつかの依存関係をポッドからカルタゴに切り替えているときにこの問題に気付きました。 Honeyの答えと同様に、Podfileを変更してこのエラーを回避することができました。

私が追加しなければならなかったのは、テスト対象のみでした。次に、「ポッドインストール」を実行すると、テストターゲットがポッドによって生成されたフレームワークにリンクされます。

target 'Project' do
  use_frameworks!

  //pods here normally

  target 'ProjectTests' do
   //nothing in here
  end
end
3
Brooks DuBois