Swift Package manifest for multiple library products

Viewed 1185

I'm trying to expose a Mocks module alongside my Helpers module. Can a single Swift Package expose sibling modules like this?

Here's what my package manifest looks like:

// swift-tools-version:5.2

import PackageDescription

let package = Package(
    name: "Helpers",
    products: [
        .library(
            name: "Helpers",
            targets: ["Helpers"]),
        .library(
            name: "Mocks",
            targets: ["Mocks"]),
    ],
    dependencies: [
        .package(name: "Parent", url: "foo/bar/Parent.git", .upToNextMinor(from: "0.1.0")),
    ],
    targets: [
        .target(
            name: "Helpers",
            dependencies: ["Parent"]),
        .target(
            name: "Mocks",
            dependencies: ["Parent", "Helpers"]),
        .testTarget(
            name: "HelpersTests",
            dependencies: ["Helpers", "Mocks"]),
    ]
)

This manifest allows me to import and use both Helpers and Mocks from within HelpersTests. But a project that declares this package as a dependency (using Xcode 11's UI) can only see the Helpers module to import it. Mocks throws an error that there is "no such module." Is this intended behavior? Am I doing something wrong, or is there no way to expose both libraries from one package?

0 Answers
Related