2012-09-26 104 views
19

我剛剛將我的項目中的Facebook iOS SDK從3.0更新到3.1。該項目不再編譯。相反,我得到下面的連接錯誤:Facebook iOS SDK 3.1與XCode 4.2鏈接器錯誤

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,帳戶和 社會)使用Facebook的功能內置到iOS6的。

這些框架在Xcode 4.2中不存在。是否有任何解決方法,即我可以下載(在哪裏?)並手動添加框架到我的項目,這將足以擺脫編譯錯誤或我必須升級到Xcode 4.5?

回答

21

這些框架是iOS 6的一部分(當然,除了來自iOS 5的Accounts之外)。如果不升級到Xcode 4.5以及iOS 6 SDK,您將無法使用它們。

如果這是您的擔憂,您仍然可以將部署目標設置爲iOS 4.3。

我覺得你的選擇是:

  1. 升級到4.5的Xcode或
  2. 使用Facebook SDK 3.0。
+0

這個答案是正確的! –

+4

我在xcode 4.5上遇到同樣的問題。 – marcog

+13

@marcog你添加了框架嗎?項目 - >目標 - >構建階段 - >鏈接二進制庫 - > + - >選擇AdSupport,Accounts和Social – borisdiakur

0

Sobri是對的。無論是升級到Xcode 4.5還是使用SDK 3.0或者如果您想使用3.1,那麼從github下載源代碼,修改構建文件(基本上刪除對iOS 6.0提供的框架的引用)並重新構建SDK。這種方式可以使用SDK 3.1並在較舊的XCode版本上運行。

6

SDK依賴於其他三個框架(AdSupport,Accounts和Social)。

要添加這些,請轉到目標摘要窗格的「鏈接的框架和庫」部分,然後添加它們。

+0

請閱讀整個問題。有沒有這樣的框架(除賬戶)在Xcode 4.2 – borisdiakur

+0

是的,你應該使用的Xcode 4.5 – Burak

9

爲了把事情說清楚:

對於XCode的4.5:如果您使用FB SDK3.0

,你只需要添加帳戶和FacebookSDK框架。

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

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

希望能爲大家總結它。

0

以下步驟可能有助於解決這個問題

  1. 下載Facebook的iOS SDK 3。0中存在的URL 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];

這對我有用。嘗試一次。

謝謝, prodeveloper。

+0

我不爲我工作... – pocjoc