ios - 将 xctest 框架添加到旧项目

标签 ios iphone xctest

如何将 xctest 框架添加到旧项目中?当我尝试添加新框架时,我无法在 Link Binaries With Libraries 的可用列表中找到 xctest。

我也试过 edit->refractor->convertToXCTEst 但选择目标以使用 xctest: lists no targets

最佳答案

在 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 的原因是因为这些项目的build设置 CLANG_ENABLE_MODULES 设置为 YES。 Xcode 6 在名为“启用模块(C 和 Objective-C)”的 UI 中公开了这一点。启用此设置后,XCTest 等系统框架的任何 #import 语句都会导致 clang 自动链接到该框架。详情请参阅 "Modules" section of the clang documentation .启用此build设置后,您还可以从目标的“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 应用程序包中手动创建一个符号链接(symbolic link):

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。

关于ios - 将 xctest 框架添加到旧项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953820/

相关文章:

ios - 境界 swift 。如何使用主键链接到现有对象

iphone - iOS 7自动续订订阅到期

ios - 将大对象从 ViewController 发送到 Objective C 中的另一个,ios?

ios - 如何让应用程序知道它是否在纯 Swift 项目中运行单元测试?

ios - 取消未完成的异步调用?

ios - 如何 UISearchcontroller customcell swift

iphone - 应用内的评分和评论会将用户带到应用商店,从而离开我们的应用 - 完全不受欢迎

iPhone - 如何创建自定义相册并以编程方式为相机胶卷中的照片指定自定义名称?

swift - 如何在适用于 XCTest 的 FileManager 中生成可写路径

ios - 为什么XCode 6测试Navigator不用XCTest而是用SenTestingKit?