带有XCode 4.2链接器错误的Facebook iOS SDK 3.1

时间:2012-09-26 09:07:06

标签: cocoa-touch xcode4.2 facebook-ios-sdk

我刚刚将项目中的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 docs清楚地说:

  

SDK依赖于其他三个框架(AdSupport,Accounts和   社交)使用iOS6内置的Facebook功能。

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

5 个答案:

答案 0 :(得分:21)

这些框架是iOS 6的一部分(除了Accounts,它来自iOS 5)。如果不升级到Xcode 4.5,那么你将无法使用它们,因此也就是iOS 6 SDK。

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

我认为你的选择是:

  1. 升级到Xcode 4.5或
  2. 使用Facebook SDK 3.0。

答案 1 :(得分:9)

说清楚:

对于XCode 4.5:

如果您使用FB SDK3.0 ,则只需添加帐户和FacebookSDK框架。

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

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

希望对每个人都能很好地总结。

答案 2 :(得分:6)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

  1. 从网址http://developers.facebook.com/ios/features/whats-new-ios-sdk-3/
  2. 中的链接下载Facebook iOS SDK 3.0
  3. 从Mac Documents目录添加FacebookSDK框架
  4. 将sqlite3添加到项目
  5. 然后,我尝试了http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/中的代码,并进行了以下更改(就像Facebook iOS SDK 3.1一样)

    1. openActiveSessionWithReadPermissions替换为openActiveSessionWithPermissions
    2. [FBSession.activeSession handleDidBecomeActive];替换为[FBSession activeSession];
    3. 这对我有用。试试一次。

      谢谢, prodeveloper。