针对App和测试目标的链接框架

时间:2014-04-01 07:08:38

标签: ios objective-c xcode objective-c-runtime sentestingkit

我有一个我在普通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. 我错过了一个简单的配置问题吗?
  3. PS:我已经检查过类似的帖子,例如12,但是虽然所有内容都按照描述配置,但问题仍然存在。

3 个答案:

答案 0 :(得分:2)

我认为捆绑包应该只“读取”框架的头文件,但不构建源并将该任务留给App(从UnitTest目标中删除Framework .m文件)。

现在,App和UnitTest都在构建Framework,因此构建了重复的类。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

我在这里遇到了类似的问题:Xcode5: creating new testing target

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