【问题标题】:Facebook iOS SDK 3.1 with XCode 4.2 linker errorsFacebook iOS SDK 3.1 与 XCode 4.2 链接器错误
【发布时间】:2012-09-17 20:54:34
【问题描述】:

我刚刚将我项目中的 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?

【问题讨论】:

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


    【解决方案1】:

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

    1. 从 URL http://developers.facebook.com/ios/features/whats-new-ios-sdk-3/ 中的链接下载 Facebook iOS SDK 3.0
    2. 从 Mac 文档目录添加 FacebookSDK 框架
    3. 将 sqlite3 添加到项目中

    然后,我尝试了 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];

    这对我有用。试一次。

    谢谢, 开发者。

    【讨论】:

      【解决方案2】:

      说清楚:

      对于 XCode 4.5:

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

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

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

      希望对每个人都有很好的总结。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 请阅读整个问题。 xcode 4.2 中没有这样的框架(除了账户)
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          我认为您的选择是:

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

          【讨论】:

          • @marcog 你添加了框架吗?项目 -> 目标 -> 构建阶段 -> 将二进制文件与库链接 -> + -> 选择 AdSupport、Accounts 和 Social
          • 我刚刚尝试将框架手动添加到项目中(我从另一台机器上的最新开发环境中复制了它们)。更多错误。无论如何,这将是一个肮脏的黑客行为,导致不可预测的行为。我将您的答案标记为正确。
          • 我在 Xcode 4.5 中遇到了与这些框架类似的问题。我通过将它们全部删除来修复它,并确保它们仍然没有在项目文件列表中被引用,然后再次读取它们。
          • 我尝试删除和添加它们,但 _ASIdentifierManager 仍然存在问题
          • 我可以在设备上构建项目,但不能在模拟器上构建我还能做错什么
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-22
          • 1970-01-01
          相关资源
          最近更新 更多