19

我刚刚将我项目中的 Facebook iOS SDK 从 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 文档清楚地说:

SDK 依赖于其他三个框架(AdSupport、Accounts 和 Social)来使用 iOS6 中内置的 Facebook 功能。

Xcode 4.2 中不存在这些框架。是否有任何解决方法,即我可以下载(在哪里?)并将框架手动添加到我的项目中,这足以消除编译错误还是我必须升级到 Xcode 4.5?

4

5 回答 5

21

这些框架是 iOS 6 的一部分(嗯,除了Accounts来自 iOS 5 的 )。如果不升级到 Xcode 4.5 和 iOS 6 SDK,您将无法使用它们。

如果您担心的话,您仍然可以将部署目标设置为 iOS 4.3。

我认为你的选择是:

  1. 升级到 Xcode 4.5,或
  2. 使用 Facebook SDK 3.0。
于 2012-09-26T14:21:51.300 回答
9

为了清楚起见:

对于 XCode 4.5:

如果您使用 FB SDK3.0,您只需要添加 Accounts 和 FacebookSDK 框架。

如果您使用 FB SDK3.1,则需要添加 Accounts、FacebookSDK、Social 和 AdSupport 框架。

如果您使用 FB SDK3.2++,请自行检查您可能需要或不需要的其他框架。;)

希望能给大家好好总结一下。

于 2012-10-04T15:14:55.193 回答
6

SDK 依赖于其他三个框架(AdSupport、Accounts 和 Social)。

要添加这些,请转到目标摘要窗格的“链接框架和库”部分,然后添加它们。

于 2012-10-02T22:14:16.490 回答
0

索布里是对的。升级到 Xcode 4.5 或使用 SDK 3.0 或者如果你想使用 3.1 然后从 github 下载源代码,修改构建文件(基本上删除对 iOS 6.0 提供的框架的引用)并重建 SDK。这样您就可以使用 SDK 3.1 以及在较旧的 XCode 版本上运行它。

于 2012-09-28T00:30:16.523 回答
0

以下步骤可能有助于解决此问题

  1. 从 URL http://developers.facebook.com/ios/features/whats-new-ios-sdk-3/中的链接下载 Facebook iOS SDK 3.0
  2. 从 Mac Documents 目录添加 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];

这对我有用。试一次。

谢谢,开发者。

于 2013-01-23T15:02:21.773 回答