【发布时间】:2015-01-13 06:01:30
【问题描述】:
如何将 xctest 框架添加到旧项目中?当我尝试添加新框架时,在 Link Binaries With Libraries 的可用列表中找不到 xctest。
我也尝试了 edit->refractor->convertToXCTEst 但选择使用 xctest 的目标:未列出目标
【问题讨论】:
如何将 xctest 框架添加到旧项目中?当我尝试添加新框架时,在 Link Binaries With Libraries 的可用列表中找不到 xctest。
我也尝试了 edit->refractor->convertToXCTEst 但选择使用 xctest 的目标:未列出目标
【问题讨论】:
在 Xcode 6.1.1 和 Xcode 6.0.1 中,XCTest.framework 不再作为可用框架列出。但是,在 Xcode 5.1.1 中,列出了该框架。
所以在测试方面,Xcode 5 和 6 之间似乎发生了一些变化。例如,当您在 Xcode 6 中创建一个新项目时,您不再需要 XCTest 框架。您可以简单地添加一个新的测试用例,构建并且测试运行良好。我还没有弄清楚为什么会这样,但对你来说,这可能是首先要尝试的事情:只需编写一个测试用例,看看是否可行。
如果他们不这样做,那么您可以尝试这个丑陋的解决方法:使用旧版本的 Xcode 打开项目,在其中添加框架,然后在新版本的 Xcode 中重新开始工作。当我使用 Xcode 5.1.1 进行尝试时,这对我有用。
编辑:Xcode 6 创建的项目中不再需要 XCTest.framework 的原因是这些项目的构建设置 CLANG_ENABLE_MODULES 设置为 YES。 Xcode 6 在 UI 中以“启用模块(C 和 Objective-C)”的名义公开了这一点。启用此设置后,系统框架(如 XCTest)的任何 #import 语句都会导致 clang 自动链接到该框架。详细信息可在"Modules" section of the clang documentation 中找到。启用此构建设置后,您还可以从目标的“Link Binary with Libraries”构建阶段中删除任何其他系统框架。
为了完整起见:Xcode 6 不再将 XCTest.framework 列为可用框架的原因是因为框架在 Xcode 包中的位置已更改:
# Xcode 6
/Applications/Xcode-6.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework
# Xcode 5
/Applications/Xcode-5.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/Developer/Library/Frameworks/XCTest.framework
显然,Apple 现在完全依赖 CLANG_ENABLE_MODULES 来获取链接到 XCTest.framework 的测试目标。如果您希望 Xcode 6 将 XCTest.framework 列为可用框架,您可以在 Xcode 应用程序包中手动创建符号链接:
cd /Applications/Xcode-6.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks
sudo ln -s /Applications/Xcode-6.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework .
创建链接后需要重启Xcode。
【讨论】: