我有一个我在普通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.
如果您尝试检查对象的类层次结构或执行任何其他类相关检查,那当然会导致奇怪的行为。
所以归结为以下两个问题:
答案 0 :(得分:2)
我认为捆绑包应该只“读取”框架的头文件,但不构建源并将该任务留给App(从UnitTest目标中删除Framework .m
文件)。
现在,App和UnitTest都在构建Framework,因此构建了重复的类。
答案 1 :(得分:2)
您已将依赖关系框架添加到测试目标。这是有缺陷的思想。由于您的主应用程序也导出SAME框架,因此您将收到有关框架中找到的任何类的重复符号的警告。
通过从测试目标中删除框架,您可以解决警告。请记住,通过不链接测试目标中的相同框架,您不会丢失任何功能。相信我,你的代码仍在那里。
答案 2 :(得分:2)
我在这里遇到了类似的问题:Xcode5: creating new testing target
关键是创建一个新的单元测试包,将其指向原始目标,然后不做任何其他事情!如果您开始将框架和源文件包含到测试目标中,它将生成这些链接错误。测试目标应该将测试类“注入”到实际目标中,而不是自己创建一个新的单独目标。因此,您只需要在测试类中导入头文件,然后编写测试用例。