我正在尝试在Swift中为XCTest框架编写扩展。为此,我创建了一个包含两个目标的项目:主要/生产目标和测试目标。
在编写XCTest扩展时,我还需要在我的主要/生产目标中导入XCTest。但是,我很难这样做。在Xcode中,当我单击我的项目时,然后选择主要目标,转到“构建阶段”,“使用库链接二进制文件”并在其中添加XCTest,我得到一个编译错误:
ld:找不到框架XCTest clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我还尝试了here提供的解决方案,很不幸,该解决方案也不起作用。
答案 0 :(得分:0)
关于XCTest本身的辅助信息很少而且很难找到,我也一直在追求相同的功能,最后设法使其正常工作。
我使用的是XCode 10.1,并且可以在具有iOS 11的真实iPhone上运行。我相信一般技术也可以在其他版本上使用,但是可能需要进行一些调整。
此stackoverflow答案中描述了常规步骤,但需要一些其他步骤和调整才能在真正的iPhone上为我工作:
Is it possible to run XCTest tests in an iOS app?
按照上面的链接中的步骤进行操作。以下步骤与我要求的说明有所不同。
。注意:请使用iPhone.OS
平台的框架,而不要使用它所描述的模拟器。您可以在Mac上实际的XCode Application程序包中找到此框架文件。 (右键单击“显示包装内容”,然后在./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()
}
}
}
应该的!当我运行上述应用程序时,然后触摸屏幕,来自UITesting目标的所有测试都可以完美运行并通过!