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.