运行 Swift Xcode 发布模式下的包测试

Run Swift Package tests in release mode in Xcode

我正在尝试 运行 Xcode 中 Swift 包的测试目标 在发布模式下 不生成 Xcode 项目.

但是,当我将测试方案的构建配置设置为发布时,构建失败,因为缺少 -enable-testing 标志,该标志必须在使用 @testable import 时传递给编译器。

如何在 Xcode 中为 Swift 包添加此标志?请注意,传统的构建配置选项不可用,因为 Xcode 项目不存在。添加 -Xswiftc -enable-testing 作为测试方案的启动参数不起作用。

您可以通过删除 import 语句的 @testable 属性来为 Release 编译测试:

// MyPackageTests.swift
import XCTest
import MyPackage
...

这是部分解决方案,因为您的测试无法访问模块中的内部实体,但它非常适合 public 个。

您可以使用 SPM 清单文件中 target(name:dependencies:path:exclude:sources:publicHeadersPath:cSettings:cxxSettings:swiftSettings:linkerSettings:) 函数的 swiftSettings 参数传递 swift 编译器标志:

import PackageDescription

let package = Package(
    name: "MyPackage",
    targets: [
        .target(name: "MyPackage", swiftSettings: [.unsafeFlags(["-enable-testing"])]),
        .testTarget(name: "MyPackageTests", dependencies: ["MyPackage"]),
    ]
)

另一方面,如果您想 运行 从终端进行测试,您可以像往常一样使用 -Xswiftc 选项:

swift test -c release -Xswiftc -enable-testing