Xcode 4测试构建类冲突

4
嗨,大家好,我是Xcode/Cocoa/Objective C的新手,遇到了一个非常烦人的问题,但是我似乎找不到解决方法。我的程序有几个类和一组单元测试,当我创建项目时选中了Xcode“包括单元测试”选项。大部分情况下,一切正常,但是当我运行测试时,会看到以下错误:
objc [12505]:类[class foo]在两个位置实现: /Users/[me]/Library/ApplicationSupport/iPhoneSimulator/4.3/Applications/1F5222ED-0A3C-41BC-AFA3-CB8FC744EFCE/[appname].app/[app name]和/Users/[me]/Library/Developer/Xcode/DerivedData/[app name]-eumytpkyfitihadpqeyxjpwapxoa/Build/Products/Debug-iphonesimulator/[appname]Tests.octest/[appname]Tests。 这两个位置都将被使用,但具体使用哪一个是未定义的。
查看测试目标构建日志后发现,Xcode正在为测试目标编译[class foo],但没有编译测试程序使用的其他任何类(如果术语使用不正确,请见谅)。
[appname]Tests.m文件的顶部如下所示:
#import "[app name]Tests.h

#import "[class x].h"
#import "[class y].h"
#import "[class z].h"
#import "[class a].h"
#import "[class foo].h"

[app name]Tests.m使用了以上所有的类,[class foo]没有实际意义,除了可能它是最先创建的。 我尝试过移动#import "[class foo].h"声明,但没有任何变化。 我尝试过重命名[class foo],清理产品并重新构建,但没有任何变化。
在Finder中查看文件时,所有程序类都在[app name]的根目录中,只有两个测试文件在[app name]Tests的根目录中,我认为这就是应该的。
通常情况下,即使出现此错误,运行测试也会起作用,但有时不会或者断点在[class foo]中表现得不可预测,这真的很烦人。如果您有任何想法或建议,将不胜感激。
谢谢。

总之,问题的解决方案是,显然当我创建项目时,我已经将[class foo].h和.m添加到了应用程序和测试目标中。将这些文件从两个目标中删除,并重新将它们添加到只有应用程序目标中,问题得以解决。 - Kongress
1个回答

2

嘿,不知道这是否能解决你的问题,但似乎你需要重建派生数据文件夹。

我在升级后的旧项目中遇到了一些类的问题。我通过删除模拟器中的应用程序、清理项目并进入位于/Users/[me]/Library/Developer/Xcode/DerivedData/的派生数据文件夹来解决了这个问题。

您可以删除整个应用程序名称的文件夹。Xcode会自行重新构建它。 另一种方法是使用Xcode 4创建一个新项目,并将您项目的所有文件移动到此新项目中。 这将确保您不会在Xcode4中更新项目设置时遇到问题。


准确来说,这不是一个导入的旧项目,我是从头开始使用Xcode 4创建的。 我尝试按照您建议的重新创建项目,但最终出现了一堆Mach链接器错误。我猜我做错了什么。那次努力的结果让我注意到如何在“添加现有文件到项目”对话框中指定目标。我从原始项目中删除了[class foo].h和.m,然后重新添加它们,现在似乎可以正常工作了。不知道为什么我之前没有想到这个方法。 虽然不完全正确,但您的答案确实引导我找到了解决方案,所以您得到了采纳 :) - Kongress
我有同样的问题。清理、删除DerivedData和重置模拟器都没有效果。 - Max MacLeod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接