[英]How To Link XCTest Dependency To Production / Main Target?
我正在尝试在Swift中为XCTest框架编写扩展。 为此,我创建了一个具有两个目标的项目:主要/生产目标和测试目标。
在编写XCTest扩展时,我还需要在我的主要/生产目标中导入XCTest。 但是,我很难这样做。 在Xcode中,当我单击项目时,然后选择主要目标,转到Build Phases,Link Binary With Libraries并在其中添加XCTest,我得到一个编译错误:
ld:找不到框架XCTest铛:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我也尝试了此处提供的解决方案,不幸的是,该解决方案也无法正常工作。
关于XCTest本身的辅助信息很少而且很难找到,我也一直在追求相同的功能,最终设法使其正常工作。
我使用的是XCode 10.1,并且可以在具有iOS 11的真实iPhone上运行。我敢肯定,通用技术也可以在其他版本上使用,但可能需要进行一些调整。
通用步骤在此stackoverflow答案中进行了描述,但需要一些其他步骤和调整才能在真正的iPhone上为我工作:
请按照上面的链接中的步骤。 以下步骤与我所需的那些说明有所不同。
如上述链接中所述,在XCTest框架中进行复制。 注意:请使用适用于iPhone.OS
平台的框架,而不要使用它所描述的模拟器。 您可以在Mac上实际的XCode Application程序包中找到此框架文件。 (右键单击“显示包内容”,然后在./Contents/Developer/Platforms/iPhoneOS.platform
中./Contents/Developer/Platforms/iPhoneOS.platform
在您的应用目标中禁用位码。 这样可以解决链接器错误。 这是启用它的示例: 如何在xcode 7中启用ENABLE_BITCODE?
将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目标的所有测试都可以完美运行并通过!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.