使用 Swift 包管理器时在测试目标之间共享代码
Sharing code across test targets when using the Swift Package Manager
我有一些代码需要在测试目标之间共享,同时我正在使用 Swift 包管理器。为此,我有一个 .testTarget,我也将其命名为另一个 .testTarget 中的依赖项。
这是一个简单的例子:
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "ExampleLib",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "ExampleLib",
targets: ["ExampleLib"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "ExampleLib",
dependencies: []),
.testTarget(
name: "Common",
dependencies: ["ExampleLib"]),
.testTarget(
name: "ExampleLibTests",
dependencies: ["Common"]),
]
)
如果我尝试在 Xcode 中构建此包,我会收到以下错误:
Unable to resolve build file: XCBCore.BuildFile (The workspace has a reference to a missing target with GUID 'PACKAGE-TARGET:Common')
但是,如果我从命令行构建 (swift build
) 或从命令行测试 (swift test
),我会成功。
我正在使用 Xcode 12 beta 6,但也尝试了 Xcode 11.5(对 Package.swift header 进行了更改)并获得了相同的结果.
这是完整的 Swift 包示例:
https://www.dropbox.com/s/h6ypvbfonnb2zyk/ExampleLib.zip?dl=0
我真的很想在 Xcode 中使用它来构建 iOS。想法?
我遇到了同样的问题并通过为 Common
.
定义 Target(不是测试目标)解决了这个问题
我的 Package.swift
文件:
// ...
.target(name: "Common", dependencies: ["App"], path: "Tests/Common"),
.testTarget(name: "AppTests", dependencies: ["App", "Common"]),
.testTarget(name: "IntegrationTests", dependencies: ["App", "Common"])
// ...
我有一些代码需要在测试目标之间共享,同时我正在使用 Swift 包管理器。为此,我有一个 .testTarget,我也将其命名为另一个 .testTarget 中的依赖项。
这是一个简单的例子:
// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "ExampleLib",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "ExampleLib",
targets: ["ExampleLib"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "ExampleLib",
dependencies: []),
.testTarget(
name: "Common",
dependencies: ["ExampleLib"]),
.testTarget(
name: "ExampleLibTests",
dependencies: ["Common"]),
]
)
如果我尝试在 Xcode 中构建此包,我会收到以下错误:
Unable to resolve build file: XCBCore.BuildFile (The workspace has a reference to a missing target with GUID 'PACKAGE-TARGET:Common')
但是,如果我从命令行构建 (swift build
) 或从命令行测试 (swift test
),我会成功。
我正在使用 Xcode 12 beta 6,但也尝试了 Xcode 11.5(对 Package.swift header 进行了更改)并获得了相同的结果.
这是完整的 Swift 包示例: https://www.dropbox.com/s/h6ypvbfonnb2zyk/ExampleLib.zip?dl=0
我真的很想在 Xcode 中使用它来构建 iOS。想法?
我遇到了同样的问题并通过为 Common
.
我的 Package.swift
文件:
// ...
.target(name: "Common", dependencies: ["App"], path: "Tests/Common"),
.testTarget(name: "AppTests", dependencies: ["App", "Common"]),
.testTarget(name: "IntegrationTests", dependencies: ["App", "Common"])
// ...