我有一个安装了Parse和Facebook框架的应用程序。通过将文件拖到项目的“Frameworks”文件夹并选择“如果需要复制”来安装Parse,同时通过拖动而不选择复制选项来安装Facebook SDK。两者都显示在链接二进制列表下。问题似乎是两个SDK都包含了螺栓。我尝试使用Facebook,产生以下Link-O错误:
Undefined symbols for architecture x86_64:
"_BFTaskMultipleExceptionsException", referenced from:
___53+[PFObject(Private) deleteAllAsync:withSessionToken:]_block_invoke214 in Parse(PFObject.o)
___65+[PFObject(Private) _deepSaveAsync:withCurrentUser:sessionToken:]_block_invoke311 in Parse(PFObject.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我删除了Facebook的链接并尝试拖动Parse,但错误仍然存在。我也收到了警告
ld: warning: ignoring file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts, missing required architecture x86_64 in file /Users/milesper/Documents/FacebookSDK/Bolts.framework/Bolts (2 slices)
即使我从Facebook SDK中删除了该文件。
我应该如何清理项目并链接到Parse版本的螺栓?我还应该做些什么吗?
答案 0 :(得分:5)
说明在项目中包含/搜索框架的顺序。
以下是我使用Parse 1.6.4和没有CacoaPods的FacebookSDK所做的工作
答案 1 :(得分:3)
我找到了。问题是旧文件(现已删除)在"图书馆搜索路径标记"中被引用。感谢this post给了我这个想法。我所要做的就是删除旧路径,它现在又可以工作了。
编辑:在某些情况下,搜索路径的顺序似乎也很重要(见下文)。
答案 2 :(得分:3)
这对我有用Temporary workaround for Parse 1.6.4 and Facebook SDK 3.23
在导入之后和实现之前添加到AppDelegate.m或其他类后面的常量部分:
NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException";
错误https://stackoverflow.com/a/29136507/1345244
的解释我找到了解决缺失符号的一个黑客,只是在我的代码中重新定义了丢失的符号。
BFTaskMultipleExceptionsException字符串在此处定义如下:
NSString * const BFTaskMultipleExceptionsException = @" BFMultipleExceptionsException&#34 ;; 那么也许只是尝试将这一行放入您的代码中?
从github的历史来看,它似乎刚刚在19天前添加到Bolts。螺栓版本1.1.4在14天前发布(1.1.3从去年10月开始)。所以它可能是由你注意到的螺栓版本不匹配引起的。
另一种选择可能是在Bolts 1.1.4发布之前获得较旧版本的Parse。
据推测,一旦新的Facebook SDK可用于螺栓1.1.4,这将得到解决。
答案 3 :(得分:2)
这里也有同样的问题。
我有两个框架都没有问题,直到我添加了SponsorPay SDK,需要在" 其他链接器标志"中添加 -ObjC 。目标" 构建设置"。
所以,根据我的经验,这个问题只发生在标志-ObjC存在时。
我尝试了所有暴露在这里的解决方案,但没有任何方法可以帮助我,我希望有人能够更多地了解如何解决这个问题,即使-ObjC标志处于活动状态。
修改强>
有一个与此相关的问题,我将此处的链接放在以防万一:Contradicting frameworks on -ObjC
答案 4 :(得分:0)
我遇到了一些问题,我只是删除了Parser.framework 链接框架和库并且运行良好。