问题描述
我试图以发布模式在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
...
这是部分解决方案,因为您的测试无法访问模块中的内部实体,但对公共实体非常有用。