我在这里经历了很多问题和答案,最终都陷入了困境。XCode 6测试目标问题
既然我对我的项目代码的状态很满意,我想实现单元测试。所以我添加了一个测试目标,我可以正确地编译它吗?不......我确定这很简单,但我无法解决这个问题。
该项目包含2个第三方私有框架。
我的测试目标束装载机参数设置为:
$(TEST_HOST)
我的测试目标的测试主机的参数设置为:
$(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App
当我尝试编译,我得到的错误是这样的:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MyArrayController", referenced from:
objc-class-ref in SMyAppLogicTests.o
我看这件事,并找到这样的答案: XCTestCase: ld: symbol(s) not found for architecture x86_64
基本上说我需要添加我的类到我的测试目标。这似乎有点击败在工作应用程序的顶部建设点,但嘿。所以我将所有.m文件添加到测试目标,并编译!太棒了,但是,我有新的问题:
Class MyClass is implemented in both /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App.app/Contents/MacOS/My App and /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App Tests.xctest/Contents/MacOS/My App Tests. One of the two will be used. Which one is undefined.
这是有道理的,为什么我必须把.m文件中,如果他们已经包含在我的应用程序。所以,我看它,并得到那个把我背在第一位置的答案:
我缺少什么?我一直坚持一个星期试图在xcode中实现测试(更不用说提到xcode服务器对我的服务器做了什么,我仍然必须弄清楚),当我计划用3-4天的时间写愚蠢的想法这将是一个快速设置。
编辑:我删除了我的测试目标,并重新开始。首先不起作用的是,它找不到我的第三部分私有框架。所以我在框架搜索路径中添加了$(PROJECT_DIR)。
接下来,我开始为我的类再次获取架构错误的未定义符号。我注意到我的Bundle Loader没有设置,所以我将它设置为$(TEST_HOST),现在测试运行!万岁。
现在我无法为Run Action构建,但为Test构建了.....进度我猜。我得到架构x86_64的未定义符号:错误再次出现。
我已经设法通过编辑方案解决该问题,并取消选择“运行”以用于构建测试目标。我不确定我完全理解该计划应该如何工作,但是,它的确有窍门。