Contents

Product

The object that defines a package product.

Declaration

class Product

Overview

A package product defines an externally visible build artifact that’s available to clients of a package. Swift Package Manager assembles the product from the build artifacts of one or more of the package’s targets. A package product can be one of three types:

Library

Use a library product to vend library targets. This makes a target’s public APIs available to clients that integrate the Swift package.

Executable

Use an executable product to vend an executable target. Use this only if you want to make the executable available to clients.

Plugin

Use a plugin product to vend plugin targets. This makes the plugin available to clients that integrate the Swift package.

The following example shows a package manifest for a library called “Paper” that defines multiple products:

let package = Package(
    name: "Paper",
    products: [
        .executable(name: "tool", targets: ["tool"]),
        .library(name: "Paper", targets: ["Paper"]),
        .library(name: "PaperStatic", type: .static, targets: ["Paper"]),
        .library(name: "PaperDynamic", type: .dynamic, targets: ["Paper"]),
    ],
    dependencies: [
        .package(url: "http://example.com.com/ExamplePackage/ExamplePackage", from: "1.2.3"),
        .package(url: "http://some/other/lib", .exact("1.2.3")),
    ],
    targets: [
        .executableTarget(
            name: "tool",
            dependencies: [
                "Paper",
                "ExamplePackage"
            ]),
        .target(
            name: "Paper",
            dependencies: [
                "Basic",
                .target(name: "Utility"),
                .product(name: "AnotherExamplePackage"),
            ])
    ]
)

Topics

Creating a Library Product

Creating an Executable Product

Creating a Plugin Product

Naming the product

See Also

Configuring Products