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/

相关文章:

php - jQuery Mobile PHP 站点 - 如何在 iOS 上使用 Web Clip 保持登录状态

ios - Nsmutablearray 在访问时损坏

ios - 将应用商店中的应用设备目标仅限于 iPhone?

IOS:使用dispatch_async的单元测试未执行

ios - 如何使用 faSTLane 将详细的测试结果发布到 slack?

ios - 如何区分 Firebase 中的内部更新和外部更新

ios - 架构 arm64 的 Xcode 9 GM undefined symbol

c++ - Sprite Kit 继续调用第一个 If 语句

ios - XCTest:验证带有标签的 View 是否出现

ios - waitForExpectationsWithTimeout 崩溃