Swift Package Manager (SwiftPM) is the official dependency manager for Swift projects, includes a build system that can build for macOS and Linux.
The tool directly addresses the challenges of compiling and linking Swift packages, managing dependencies, versioning, and supporting flexible distribution and collaboration models.
Starting with Xcode 11, Xcode integrates with SwiftPM to provide support for including packages in iOS, macOS, watchOS, and tvOS applications.
A package consists of Swift source files, including the Package.swift
manifest file. The manifest file, or package manifest, defines the package’s name and its contents using the PackageDescription
module. A package has one or more targets. Each target specifies a product and may declare one or more dependencies.
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "DeckOfPlayingCards",
products: [
.library(name: "DeckOfPlayingCards", targets: ["DeckOfPlayingCards"])
],
dependencies: [
.package(url: "https://github.com/apple/example-package-fisheryates.git", from: "2.0.0"),
.package(url: "https://github.com/apple/example-package-playingcard.git", from: "3.0.0"),
],
targets: [
.target(
name: "DeckOfPlayingCards",
dependencies: ["FisherYates", "PlayingCard"]),
.testTarget(
name: "DeckOfPlayingCardsTests",
dependencies: ["DeckOfPlayingCards"]),
]
)
A package author can publish their Swift package to either public or private repositories. Xcode supports both private and publicly available packages.