我刚刚将项目中的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?
答案 0 :(得分:21)
这些框架是iOS 6的一部分(除了Accounts
,它来自iOS 5)。如果不升级到Xcode 4.5,那么你将无法使用它们,因此也就是iOS 6 SDK。
如果您担心这一点,您仍然可以将部署目标设置为iOS 4.3。
我认为你的选择是:
答案 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)
答案 4 :(得分:0)
以下步骤可能有助于解决此问题
然后,我尝试了http://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/中的代码,并进行了以下更改(就像Facebook iOS SDK 3.1一样)
openActiveSessionWithReadPermissions
替换为openActiveSessionWithPermissions
[FBSession.activeSession handleDidBecomeActive];
替换为[FBSession activeSession];
这对我有用。试试一次。
谢谢, prodeveloper。