0

在 iOS5 模拟器上运行我的应用程序时,我有以下日志输出。两个位置都是一样的。对于属于 JSONKit 的几乎每个类,我都会收到以下错误。

Class JKSerializer is implemented in both /Users/myHomeDir/Library/Application Support/iPhone Simulator/5.0/Applications/33E6C55B-4883-48FF-BEFF-3FBA9C071CAB/MyApp.app/MyApp and /Users/myHomeDir/Library/Application Support/iPhone Simulator/5.0/Applications/33E6C55B-4883-48FF-BEFF-3FBA9C071CAB/MyApp.app/MyApp. One of the two will be used. Which one is undefined.

如果这是合适的,我刚刚运行了一个复杂的合并,我宁愿不必恢复到以前的版本。

关于此错误如何发生、如何预防以及如何解决的任何想法?

4

2 回答 2

3

这是因为JSONKit.m实现文件是多个目标的成员,并且其中一个目标已作为对另一个目标的依赖被包含在内。

因此,例如,检查目标成员资格:

在此处输入图像描述

在这里您可以看到该文件是Pods-UnitTestsand的成员Pods

这反映了每个目标的 Build Phases -> Compile Sources 中的设置。

成为两个目标的成员本身并不是问题。相反,问题是这些目标之一依赖于另一个。所以Pods-UnitTestsPods. 因此,当您检查单元测试的构建记录时,如果您搜索JSONKit.m,您会找到两次。一次用于 libPods.a,再次用于单元测试目标。

如果您不使用 CocoaPods,那么解决方案就是删除该JSONKit.m文件,使其只编译一次。

如果您使用的是 CocoaPods,那么我不确定解决方案是什么,因为虽然您不想编译文件两次,但毫无疑问,您需要在单元测试代码中的某处导入头文件。到目前为止,我不确定该怎么做。

以下是一些参考资料:

https://github.com/CocoaPods/CocoaPods/issues/115

Foo 类在 MyApp 和 MyAppTestCase 中都实现了。将使用两者之一。哪个是未定义的

http://sealedabstract.com/code/tired-of-getting-mach-o-linker-errors-when-unit-testing/

于 2012-12-21T11:08:35.987 回答
1

检查 JSONKit 是否在您链接的第三方库中。

有一篇详细的帖子描述了如何调试这个问题。

于 2013-02-24T11:03:25.367 回答