4

我有一个在我的普通 App 目标以及相应的 UnitTest 目标中使用的自定义框架。事实证明,这会混淆运行时,因为它有多种选择,因此无法选择正确的实现:

objc[35580]: Class AClass is implemented in both ../MyApp.app/MyApp and ../MyApp.app/MyAppTests. One of the two will be used. Which one is undefined.

如果您尝试检查对象的类层次结构或进行任何其他与类相关的检查,这当然会导致奇怪的行为。

所以归结为以下两个问题:

  1. 我没有看到类似 UIKit 组件的日志,但这个框架也链接到这两个目标。我是否错误地编译了框架?
  2. 这只是我错过的一个微不足道的配置问题吗?

PS:我已经检查过类似的帖子,例如12,但是尽管一切都按照描述进行了配置,但问题仍然存在。

4

3 回答 3

2

您已将依赖框架添加到 Tests 目标。这是有缺陷的想法。由于您的主应用程序还导出 SAME 框架,因此您将收到有关在框架中找到的任何类的重复符号的警告。

通过从测试目标中删除您的框架,您可以解决警告。请记住,您不会因为不链接测试目标中的同一框架而失去任何功能。相信我,你的代码还在。

于 2014-04-07T14:54:33.820 回答
2

我认为包应该只“读取”框架的头文件而不是构建源并将该任务留给应用程序(.m从 UnitTest 目标中删除框架文件)。

现在 App 和 UnitTest 都在构建框架,因此是重复的类。

于 2014-04-04T00:37:42.750 回答
2

我在这里遇到了类似的问题:Xcode5:创建新的测试目标

关键是创建一个新的单元测试包,将其指向您的原始目标,然后不要做任何其他事情!如果您开始将框架和源文件包含到测试目标中,它将生成这些链接错误。测试目标应该将测试类“注入”到实际目标中,而不是自己创建一个新的单独目标。所以你只需要在你的测试类中导入头文件,并编写你的测试用例。

于 2014-04-10T07:44:03.843 回答