web-dev-qa-db-ja.com

XCode4.2リンカーエラーを含むFacebookiOS SDK 3.1

プロジェクトのFacebookiOSSDKを3.0から3.1に更新しました。プロジェクトはもうコンパイルされません。代わりに、次のリンカーエラーが発生します。

Undefined symbols for architecture i386:
  "_ACFacebookAppIdKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceEveryone", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceFriends", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookAudienceOnlyMe", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_ACFacebookPermissionsKey", referenced from:
      -[FBSession authorizeUsingSystemAccountStore:accountType:permissions:defaultAudience:isReauthorize:] in FacebookSDK(FBSession.o)
  "_OBJC_CLASS_$_ASIdentifierManager", referenced from:
      objc-class-ref in FacebookSDK(FBSettings.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Facebook docs 明確に言う:

SDKは、iOS6に組み込まれているFacebook機能を使用するために、他の3つのフレームワーク(AdSupport、Accounts、Social)に依存しています。

これらのフレームワークはXcode4.2には存在しません。回避策はありますか?つまり、フレームワークをダウンロードして(どこで?)プロジェクトに手動で追加できますか?コンパイルエラーを取り除くにはそれで十分ですか、それともXcode 4.5にアップグレードする必要がありますか?

19
borisdiakur

これらのフレームワークはiOS6の一部です(iOS5のAccountsを除いて)。 Xcode 4.5、つまりiOS 6 SDKにアップグレードしないと、これらを使用することはできません。

懸念がある場合は、展開ターゲットをiOS4.3に設定することもできます。

私はあなたの選択肢は次のとおりだと思います:

  1. Xcode 4.5にアップグレードするか、
  2. Facebook SDK3.0を使用します。
21
sobri

物事を明確にするために:

XCode 4.5の場合:

FB SDK3.0を使用する場合、アカウントとFacebookSDKフレームワークを追加するだけで済みます。

FB SDK3.1を使用する場合、アカウント、FacebookSDK、ソーシャル、およびAdSupportフレームワークを追加する必要があります。

FB SDK3.2 ++を使用している場合、他に必要なフレームワークと必要でないフレームワークを自分で確認してください。 ;)

それが皆にとってうまくまとめられることを願っています。

9
GeneCode

SDKは、他の3つのフレームワーク(AdSupport、Accounts、Social)に依存しています。

これらを追加するには、ターゲットの[概要]ペインの[リンクされたフレームワークとライブラリ]セクションに移動して、それらを追加します。

6
Burak

次の手順は、この問題を解決するのに役立つ場合があります

  1. URLにあるリンクからFacebookiOS SDK 3.0をダウンロードします http://developers.facebook.com/ios/features/whats-new-ios-sdk-3/
  2. MacドキュメントディレクトリからFacebookSDKフレームワークを追加します
  3. プロジェクトにsqlite3を追加します

次に、次の変更を加えて http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/ のコードを試しました(そのまま) Facebook iOS SDK 3.1の場合)

  1. openActiveSessionWithReadPermissionsopenActiveSessionWithPermissionsに置き換えます
  2. [FBSession.activeSession handleDidBecomeActive];[FBSession activeSession];に置き換えます

これは私のために働いた。一度お試しください。

ありがとう、プロ開発者。

0
prodeveloper

ソブリは正しいです。 Xcode 4.5にアップグレードするか、SDK 3.0を使用するか、3.1を使用する場合はgithubからソースをダウンロードし、ビルドファイルを変更して(基本的にiOS 6.0で提供されるフレームワークへの参照を削除します)、SDKを再構築します。これにより、SDK 3.1を使用できるだけでなく、古いXCodeバージョンで実行することもできます。

0