swift_package_manager
Swift Package Manager
This skill covers Swift Package Manager for managing dependencies, creating reusable packages, and organizing code into modular components.
Overview
Swift Package Manager (SPM) is Apple's official tool for distributing and managing Swift code. It handles dependency resolution, building, and packaging with a simple declarative format.
Available References
- Package Structure - Package.swift, targets, products, and dependencies
- Dependencies - Version constraints, local packages, and resolution
- Publishing - Publishing packages to GitHub and registries
Quick Reference
Basic Package.swift
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "MyLibrary",
platforms: [.iOS(.v15), .macOS(.v12)],
products: [
.library(
name: "MyLibrary",
targets: ["MyLibrary"]
),
],
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.8.0"),
],
targets: [
.target(
name: "MyLibrary",
dependencies: [
.product(name: "Alamofire", package: "Alamofire")
]
),
.testTarget(
name: "MyLibraryTests",
dependencies: ["MyLibrary"]
),
]
)
Adding Dependencies
// Version ranges
.package(url: "...", from: "1.0.0") // >= 1.0.0, < 2.0.0
.package(url: "...", .upToNextMajor(from: "1.0.0"))
.package(url: "...", .upToNextMinor(from: "1.0.0"))
.package(url: "...", .exact("1.0.0"))
.package(url: "...", branch: "main")
.package(url: "...", revision: "abc123")
// Local packages
.package(path: "../LocalPackage")
Command Line
# Initialize new package
swift package init --type library
swift package init --type executable
# Resolve dependencies
swift package resolve
# Update dependencies
swift package update
# Build
swift build
# Test
swift test
# Generate Xcode project
swift package generate-xcodeproj
Package Structure
MyPackage/
├── Package.swift # Package manifest
├── Sources/
│ └── MyLibrary/
│ └── MyLibrary.swift
├── Tests/
│ └── MyLibraryTests/
│ └── MyLibraryTests.swift
└── README.md
Best Practices
- Use semantic versioning - Follow SemVer for version tags
- Specify platform requirements - Declare minimum OS versions
- Create explicit products - Control what you expose
- Separate test targets - Keep tests isolated
- Use resource bundles - For non-code assets
- Commit Package.resolved - For reproducible builds
- Document public API - Use Swift documentation comments
- Add LICENSE file - Essential for open source
For More Information
Visit https://swiftzilla.dev for comprehensive Swift Package Manager documentation.
More from swiftzilla/skills
swift_swiftui
SwiftUI framework concepts including property wrappers, state management, and reactive UI patterns.
51swift_concurrency
Swift modern concurrency with async/await, Task, Actor, Swift 6 strict mode, Sendable, and structured concurrency patterns.
40swift_style
Swift style guidelines covering naming conventions, code organization, and best practices for writing idiomatic Swift code.
35swift_combine
Swift Combine framework for reactive programming, handling asynchronous events with publishers, subscribers, and operators.
32swift_testing
Swift Testing framework for unit tests, integration tests, and async testing with modern syntax.
26swift_structure
Swift language structures including collections, optionals, closures, generics, control flow, and core language features.
24