繁体   English   中英

如何将XCTest依赖关系链接到生产/主要目标?

[英]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上为我工作:

是否可以在iOS应用中运行XCTest测试?

请按照上面的链接中的步骤。 以下步骤与我所需的那些说明有所不同。

  1. 如上述链接中所述,在XCTest框架中进行复制。 注意:请使用适用于iPhone.OS平台的框架,而不要使用它所描述的模拟器。 您可以在Mac上实际的XCode Application程序包中找到此框架文件。 (右键单击“显示包内容”,然后在./Contents/Developer/Platforms/iPhoneOS.platform./Contents/Developer/Platforms/iPhoneOS.platform

  2. 在您的应用目标中禁用位码。 这样可以解决链接器错误。 这是启用它的示例: 如何在xcode 7中启用ENABLE_BITCODE?

  3. XCTest.framework文件拖到目标中的链接二进制文件时,请确保还将其拖到“链接的框架和库”选项正上方的“嵌入式二进制文件”。 如果不执行此操作,则会收到运行时错误。

将框架添加到嵌入式二进制文件

  1. 在新的Swift中,开始测试的ViewController代码略有不同,这就是我正在使用的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM