web-dev-qa-db-ja.com

解析とFacebookSDKの「ボルト」フレームワークエラー

ParseフレームワークとFacebookフレームワークの両方がインストールされたアプリがあります。解析は、ファイルをプロジェクトの「フレームワーク」フォルダーにドラッグして「必要に応じてコピー」を選択することでインストールされ、Facebook SDKは、コピーオプションを選択せず​​にドラッグしてインストールされました。どちらもリンクされたバイナリリストの下に表示されます。問題は、Boltsが両方のSDKに含まれていることのようです。 Facebookを使用してみたところ、次のLink-Oエラーが発生しました。

Undefined symbols for architecture x86_64:
  "_BFTaskMultipleExceptionsException", referenced from:
      ___53+[PFObject(Private) deleteAllAsync:withSessionToken:]_block_invoke214 in Parse(PFObject.o)
      ___65+[PFObject(Private) _deepSaveAsync:withCurrentUser:sessionToken:]_block_invoke311 in Parse(PFObject.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Facebookへのリンクを削除し、Parseをドラッグしようとしましたが、エラーが解決しませんでした。私も警告を受けました

ld: warning: ignoring file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts, missing required architecture x86_64 in file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts (2 slices)

facebookSDKからファイルを削除したのに。

プロジェクトをクリーンアップして、ボルトの解析バージョンにリンクするにはどうすればよいですか?他にやるべきことはありますか?

11
mginn

さて私はそれを見つけました。問題は、古いファイル(現在は削除されている)が「ライブラリ検索パスフラグ」で参照されていたことでした。 この投稿 私にアイデアを与えてくれてありがとう。私がしなければならなかったのは古いパスを削除することだけでした、そしてそれは今再び働きます。

編集:状況によっては、検索パスの順序も重要になるようです(以下を参照)。

3
mginn

プロジェクトの問題にフレームワークを含める/検索する順序がわかります。

これが、CacoaPodsを使用せずにParse1.6.4とFacebookSDKを使用して作業したことです。

  1. 最新バージョンのBoltsを使用してください。 (1.1.4)
  2. インクルードパスは、最初にBolt、次にFacebookSDK、次にParseを見つけるように注文する必要があります

Ordering your search paths

5
stone

それは私にとってはうまくいきました Parse1.6.4とFacebookSDK 3.23の一時的な回避策

インポート後、実装セクションの前の定数に従って、AppDelegate.mまたは別のクラスに追加します。NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";

バグの説明 https://stackoverflow.com/a/29136507/1345244

欠落しているシンボルを回避するために私が見つけたハックの1つは、コードで欠落しているシンボルを再定義することでした。

BFTaskMultipleExceptionsException文字列は、次のように定義されています。

NSString * const BFTaskMultipleExceptionsException = @ "BFMultipleExceptionsException";では、その1行をコードに入れてみてください。

Githubの履歴から、これは約19日前にBoltsに追加されたようです。 Boltsのバージョン1.1.4は14日前にリリースされました(1.1.3は昨年10月からのものです)。したがって、おそらく、気付いたBoltsのバージョンの不一致が原因です。

もう1つのオプションは、Bolts1.1.4がリリースされる前の古いバージョンのParseを入手することです。

Bolts1.1.4で新しいFacebookSDKが利用可能になると、おそらくこれは修正されるでしょう。

3
Joël

ここで同じ問題。

"Other Linker Flags-ObjCを追加する必要があるSponsorPay SDKを追加するまで、両方のフレームワークを問題なく含めました。 = "on target" ビルド設定 "。

したがって、私の経験では、この問題はフラグ-ObjCが存在する場合にのみ発生します。

ここで公開されているすべてのソリューションを試しましたが、何も機能しませんでした。-ObjCフラグがアクティブな場合でも、この問題を解決する方法について誰かがもっと光を当ててくれることを願っています。

編集:

これに関連する質問があります。誰かに役立つ場合に備えて、ここにリンクを配置します: -ObjCの矛盾するフレームワーク

2
SFWdc

いくつか問題がありました。Linked Framework and LibrariesのParser.frameworkを削除するだけで、うまく機能します。

0
alicanozkara