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

时间:2019-01-11 13:34:18

标签: swift xcode xctest

我正在尝试在Swift中为XCTest框架编写扩展。为此,我创建了一个包含两个目标的项目:主要/生产目标和测试目标。

在编写XCTest扩展时,我还需要在我的主要/生产目标中导入XCTest。但是,我很难这样做。在Xcode中,当我单击我的项目时,然后选择主要目标,转到“构建阶段”,“使用库链接二进制文件”并在其中添加XCTest,我得到一个编译错误:

ld:找不到框架XCTest clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我还尝试了here提供的解决方案,很不幸,该解决方案也不起作用。

1 个答案:

答案 0 :(得分:0)

关于XCTest本身的辅助信息很少而且很难找到,我也一直在追求相同的功能,最后设法使其正常工作。

我使用的是XCode 10.1,并且可以在具有iOS 11的真实iPhone上运行。我相信一般技术也可以在其他版本上使用,但是可能需要进行一些调整。

此stackoverflow答案中描述了常规步骤,但需要一些其他步骤和调整才能在真正的iPhone上为我工作:

Is it possible to run XCTest tests in an iOS app?

按照上面的链接中的步骤进行操作。以下步骤与我要求的说明有所不同。

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

  2. 中查找
  3. 在应用程序目标中禁用位码。这样可以解决链接器错误。以下是启用它的示例:how to ENABLE_BITCODE in xcode 7?

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

add framework to embedded binaries

  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目标的所有测试都可以完美运行并通过!