在两个地方实施的课程

时间:2012-11-07 19:04:04

标签: ios5 xcode4.5

在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.

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

有关此错误如何发生,如何预防以及如何修复的任何想法?

2 个答案:

答案 0 :(得分:3)

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

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

enter image description here

您可以在此处看到该文件是Pods-UnitTestsPods的成员。

这反映了Build Phases中的设置 - >编译每个目标的来源。

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

如果你没有使用CocoaPods,那么解决方案就是删除JSONKit.m文件,这样它只编译一次。

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

以下是一些参考资料:

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

Class Foo is implemented in both MyApp and MyAppTestCase. One of the two will be used. Which one is undefined

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

答案 1 :(得分:1)

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

有一篇详细的帖子描述了how to debug这个问题。