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」)を示します。
完全なエラーは次のとおりです。
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
_
これを機能させるには、2つのことをしなければなりませんでした。
「$(SRCROOT)/../ ..」を追加します(プロジェクトBはプロジェクトAの2つのフォルダにあるため)。プロジェクトBターゲットの[ビルド設定]-> [検索パス]の[フレームワーク検索パス]に追加します。
Stripe SDKをプロジェクトBのフレームワークにも追加します。特にプロジェクトBはストライプに直接依存していないため、この2番目のステップは驚きました。
テストターゲットを実行しているときに、別のフレームワークでこの同じ問題が発生していました。 Build Phases > Link Binary With Libraries
セクションの下のtestターゲット(通常のターゲットだけでなく)にフレームワークを追加する必要がありました。
Carthageには、私が見た問題に関する詳細情報があります。 https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework
だからこれは私のポッドファイルがどのように見えるかです:
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
考えられる理由は、ポッドファイルでそれらを正しく追加しなかったことです。フレームワークが必要なターゲットに追加されていることを確認してください。
いくつかの依存関係をポッドからカルタゴに切り替えているときにこの問題に気付きました。 Honeyの答えと同様に、Podfileを変更してこのエラーを回避することができました。
私が追加しなければならなかったのは、テスト対象のみでした。次に、「ポッドインストール」を実行すると、テストターゲットがポッドによって生成されたフレームワークにリンクされます。
target 'Project' do
use_frameworks!
//pods here normally
target 'ProjectTests' do
//nothing in here
end
end