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

问题描述

我试图以发布模式在Xcode中运行Swift包的测试目标,而无需生成Xcode项目

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

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

解决方法

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

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
,

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

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

这是部分解决方案,因为您的测试无法访问模块中的内部实体,但对公共实体非常有用。