# Understanding Package.swift in Palmier Pro: The Swift Package Manager Manifest

> Discover the role of Package.swift in Palmier Pro. This Swift Package Manager manifest file defines how your macOS project is built, linked, and packaged.

- Repository: [Palmier/palmier-pro](https://github.com/palmier-io/palmier-pro)
- Tags: internals
- Published: 2026-06-30

---

**Package.swift is the Swift Package Manager manifest file that serves as the central blueprint defining how Palmier Pro is built, linked, and packaged for macOS.**

In the palmier-io/palmier-pro repository, [`Package.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Package.swift) acts as the single source of truth for the entire build system. This manifest file tells the Swift compiler how to assemble the executable, which external libraries to fetch, and how to bundle resources like fonts and images into the final application.

## Core Responsibilities of Package.swift in Palmier Pro

The manifest file at the repository root coordinates every aspect of the build pipeline. According to the Palmier Pro source code, it handles platform constraints, dependency resolution, target mapping, and custom build plugins.

### Package Declaration and Platform Requirements

At lines 5-8 of [`Package.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Package.swift), the manifest declares the package name as **"PalmierPro"** and restricts the build to **macOS 26**. This platform constraint ensures the compiler rejects builds on unsupported operating systems and enables macOS 26-specific APIs throughout the codebase.

```swift
// From Package.swift, lines 5-8
platforms: [
    .macOS(.v26)
],

```

### Product Definition

Lines 9-10 expose an **executable product** named "PalmierPro". This declaration produces a runnable binary that can be launched from the command line or distributed as a standard macOS application bundle.

```swift
// From Package.swift, lines 9-10
products: [
    .executable(name: "PalmierPro", targets: ["PalmierPro"]),
],

```

### External Dependencies

Lines 12-20 define the third-party Swift packages required at compile-time. Palmier Pro depends on libraries such as **Sparkle** for automatic updates, **Sentry** for crash reporting, and **Lottie** for animations. The manifest pins these to specific version requirements, ensuring reproducible builds across development environments.

```swift
// From Package.swift, lines 12-20
dependencies: [
    .package(url: "https://github.com/sparkle-project/Sparkle", from: "2.6.0"),
    .package(url: "https://github.com/getsentry/sentry-cocoa", from: "8.0.0"),
    // Additional dependencies...
],

```

### Target Configuration

Lines 21-34 and 41-47 define the **executable target** (`PalmierPro`) and a **test target** (`PalmierProTests`). The executable target configuration maps external dependencies to their products, specifies source paths, excludes certain files, and bundles resources including fonts, images, and the MCPB bundle.

```swift
// Target structure from Package.swift
targets: [
    .executableTarget(
        name: "PalmierPro",
        dependencies: [
            .product(name: "Sparkle", package: "Sparkle"),
            .product(name: "Sentry", package: "sentry-cocoa"),
            // Additional product mappings...
        ],
        path: "Sources/PalmierPro",
        exclude: [],
        resources: [
            .process("Resources/Fonts"),
            .process("Resources/Images"),
            .process("MCPB.bundle")
        ]
    ),
    // Test target definition...
]

```

### Build Tool Plugins

Lines 47-49 register a **custom build-tool plugin** named `MetalCIKernelPlugin`. This plugin executes Metal-related compile-time tasks automatically during the build process without requiring manual CLI intervention.

```swift
// From Package.swift, lines 47-49
plugins: [
    .plugin(name: "MetalCIKernelPlugin")
]

```

## How Package.swift Orchestrates the Build Process

The Swift Package Manager reads [`Package.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Package.swift) to perform four critical operations for Palmier Pro:

1. **Resolve** external package URLs and fetch specific versions from remote repositories.
2. **Configure** the build graph, mapping which targets depend on which external libraries.
3. **Package** assets (fonts, images, and the MCPB bundle) so they are embedded in the final app bundle.
4. **Integrate** custom build steps via the `MetalCIKernelPlugin` for Metal shader compilation.

Without this manifest file, the Swift compiler would lack the metadata required to link against Sparkle, Sentry, or Lottie, and would not know how to structure the executable product.

## Practical Examples for Developers

### Adding a New Dependency

To add a new Swift package to Palmier Pro, append the repository URL to the `dependencies` array:

```swift
.package(url: "https://github.com/example/new-lib", from: "1.0.0")

```

Then reference the product in the executable target's dependency list:

```swift
.product(name: "NewLib", package: "new-lib")

```

### Building the Project

Use the Swift CLI to compile the executable using the manifest configuration:

```bash
swift build

```

To launch the built application directly from the command line:

```bash
swift run PalmierPro

```

### Triggering Custom Plugins

The `MetalCIKernelPlugin` executes automatically during builds because it is listed under the `plugins` section of the executable target. No additional flags are required; a standard `swift build` invocation triggers the plugin's Metal compilation tasks.

## Summary

- **Package.swift** is the mandatory SPM manifest that defines Palmier Pro's build configuration, located at the repository root.
- The manifest restricts the project to **macOS 26** and declares an executable product named "PalmierPro".
- External dependencies including **Sparkle**, **Sentry**, and **Lottie** are declared at lines 12-20 and mapped to the main target.
- The executable target configuration at lines 21-34 bundles resources such as fonts, images, and the MCPB bundle.
- A custom **MetalCIKernelPlugin** registered at lines 47-49 handles Metal-specific compile-time tasks automatically.

## Frequently Asked Questions

### What is the minimum macOS version required by Palmier Pro?

According to lines 5-8 of [`Package.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Package.swift), Palmier Pro requires **macOS 26** (the version specified as `.v26` in the platforms array). The Swift compiler will reject build attempts on older macOS versions.

### How does Palmier Pro handle external dependencies?

The manifest lists all third-party packages in the `dependencies` array at lines 12-20, including Sparkle for auto-updates and Sentry for crash reporting. These are fetched automatically by SPM during the resolution phase and linked to the executable target via product mappings.

### What is the MetalCIKernelPlugin mentioned in Package.swift?

The `MetalCIKernelPlugin` is a custom build-tool plugin defined in the `Plugins/` directory and registered at lines 47-49 of the manifest. It performs Metal-related compile-time tasks, such as compiling Core Image kernels, automatically when running `swift build`.

### How do I build and run Palmier Pro from the command line?

Execute `swift build` to compile the executable defined in the manifest, then run `swift run PalmierPro` to launch the application. The Swift Package Manager reads [`Package.swift`](https://github.com/palmier-io/palmier-pro/blob/main/Package.swift) to resolve dependencies, configure targets, and bundle resources before executing the binary.