ImJ*_*Lol 6 xcode xctest swift
我正在尝试在 Swift 中为 XCTest 框架编写扩展。为此,我创建了一个具有两个目标的项目:主/生产目标和测试目标。
当我为 XCTest 编写扩展时,我还需要在我的主要/生产目标中导入 XCTest。但是,我很难这样做。当我在 Xcode 中单击我的项目,然后选择主要目标,转到 Build Phases, Link Binary With Libraries 并在那里添加 XCTest 时,出现编译错误:
ld:找不到框架 XCTest clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
我也尝试了此处提供的解决方案,但不幸的是也不起作用。
关于 XCTest 本身的辅助信息很少且很难找到,我也在寻找相同的功能并最终设法让它工作。
我使用的是 XCode 10.1,并在装有 iOS 11 的真实 iPhone 上运行。我确信通用技术适用于其他版本,但可能需要一些调整。
一般步骤在这个 stackoverflow 答案中进行了描述,但需要几个额外的步骤和调整才能在真正的 iPhone 上工作:
请按照上述链接中的步骤操作。以下步骤与我所要求的说明有所偏差。
按照上述链接所述复制 XCTest 框架。注意:使用平台框架iPhone.OS,而不是所描述的模拟器。您可以在 Mac 上的实际 XCode 应用程序包中找到此框架文件。(右键单击“显示包内容”,然后查看./Contents/Developer/Platforms/iPhoneOS.platform
禁用应用程序目标中的位码。这解决了链接器错误。这是启用它的示例:how to ENABLE_BITCODE in xcode 7?
将文件拖动到目标中的链接二进制文件时XCTest.framework,请确保将其也拖动到“链接的框架和库”选项正上方的“嵌入式二进制文件”。如果您不这样做,您将收到运行时错误。
import UIKit
import XCTest
class ViewController: UIViewController {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("running tests!")
let suite = XCTestSuite.default;
for test in suite.tests {
test.run()
}
}
}
Run Code Online (Sandbox Code Playgroud)
应该是这样!当我运行上面的应用程序,然后触摸屏幕时,我的 UITesting 目标中的所有测试都完美运行并通过!