# How to Update Palmier Pro to the Latest Version: Automatic and Manual Methods

> Easily update Palmier Pro to the latest version with automatic or manual methods. Learn how to keep your software current using Sparkle and GitHub releases.

- Repository: [Palmier/palmier-pro](https://github.com/palmier-io/palmier-pro)
- Tags: how-to-guide
- Published: 2026-06-22

---

**Palmier Pro uses the Sparkle framework to automatically check for updates and can also be updated manually by downloading the latest DMG from GitHub releases.**

Keeping your installation current ensures you have the latest features and security patches. The `palmier-io/palmier-pro` repository implements both automatic and manual update pathways. This guide explains how to update Palmier Pro to the latest version using the built-in updater or by manually replacing the application bundle.

## Automatic Updates via Sparkle

The application integrates the **Sparkle** framework to handle version checking and downloads. The update logic is centralized in [Updater.swift](Sources/PalmierPro/App/Updater.swift), which manages state through the shared `Updater` singleton.

### Background Check Process

When Palmier Pro launches, the `Updater` singleton is created automatically. Inside the `init` method, the updater calls `controller.updater.checkForUpdateInformation()` (line 24) to query the appcast feed URL defined in [Info.plist](Sources/PalmierPro/Resources/Info.plist) under the `SUFeedURL` key.

If a newer version exists on the remote feed, Sparkle invokes the delegate method `updater(_:didFindValidUpdate:)` (line 47). This triggers `markUpdateAvailable(_:)` (lines 35-38), which sets `updateAvailable = true` and stores the version string in `updateVersion`.

### User Interface Notification

The user interface surfaces available updates through [UpdateBadgeView.swift](Sources/PalmierPro/App/UpdateBadgeView.swift). When `updater.updateAvailable` is true, the view renders the badge (lines 7-42) to notify you.

To install the update:

1. Click the update badge button.
2. The badge triggers `updater.checkForUpdates(nil)` (line 10), launching Sparkle's native installer UI.
3. Follow the prompts to download and install the new version automatically.

To dismiss the notification without updating, click the "✕" button. This calls `updater.dismissUpdate()` (line 26), which invokes `clearUpdateAvailability()` (lines 40-43) to reset `updateAvailable` to false and clear the stored version string.

## Manual Update Method

If you prefer not to use the automatic updater, or if the automatic check fails, perform a manual update:

1. Navigate to the GitHub releases page.
2. Download the latest DMG directly from `https://github.com/palmier-io/palmier-pro/releases/latest/download/PalmierPro.dmg`.
3. Mount the DMG and drag the Palmier Pro application to your Applications folder, replacing the existing bundle.

This method bypasses the Sparkle framework entirely and is useful when you need precise control over the replacement timing.

## Programmatic Update Examples

### Triggering an Update Check

You can initiate an update check from any SwiftUI view by accessing the shared instance:

```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        Button("Check for updates") {
            Updater.shared.checkForUpdates(nil)
        }
    }
}

```

### Checking the Current Version

To verify which version is currently running, inspect the bundle's Info.plist:

```swift
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "unknown"
print("Running Palmier Pro version \(version)")

```

### Dismissing the Update Alert

To programmatically clear the update state:

```swift
Updater.shared.dismissUpdate()

```

## Key Source Files

Understanding the update architecture requires familiarity with these components:

- [Updater.swift](Sources/PalmierPro/App/Updater.swift) – Main Sparkle integration, state management, and delegate methods.
- [UpdateBadgeView.swift](Sources/PalmierPro/App/UpdateBadgeView.swift) – UI component that renders the update availability badge.
- [Changelog.swift](Sources/PalmierPro/App/Changelog.swift) – Persists the last seen version using the `lastSeenVersion` key.
- [Telemetry.swift](Sources/PalmierPro/Telemetry/Telemetry.swift) – Reports the current app version when sending usage analytics.
- [Info.plist](Sources/PalmierPro/Resources/Info.plist) – Contains the `SUFeedURL` entry pointing to the Sparkle appcast.

## Summary

- Palmier Pro uses the Sparkle framework in [Updater.swift](Sources/PalmierPro/App/Updater.swift) to handle automatic background checks via `checkForUpdateInformation()`.
- The `Updater` singleton sets `updateAvailable = true` when updates are found, triggering [UpdateBadgeView.swift](Sources/PalmierPro/App/UpdateBadgeView.swift) to display the notification.
- Install updates by clicking the badge, which calls `checkForUpdates(nil)` to launch Sparkle's installer.
- You can manually update by downloading the latest DMG from the GitHub releases page and replacing the app bundle.
- Dismiss notifications programmatically using `Updater.shared.dismissUpdate()`, which invokes `clearUpdateAvailability()`.

## Frequently Asked Questions

### How does Palmier Pro check for updates automatically?

On application launch, the shared `Updater` singleton calls `controller.updater.checkForUpdateInformation()` to query the appcast URL specified in `Info.plist`. If a newer version exists, Sparkle invokes the delegate method `updater(_:didFindValidUpdate:)` (line 47), which sets `updateAvailable = true` and stores the version string for the UI to display.

### Can I trigger an update check manually from the code?

Yes. You can call `Updater.shared.checkForUpdates(nil)` from any SwiftUI view or view controller. This method launches the Sparkle update installer UI immediately, allowing users to download and install the latest version without waiting for the automatic background check.

### Where is the update availability state stored?

The update state is managed by the `Updater` class in [Updater.swift](Sources/PalmierPro/App/Updater.swift). When an update is found, the `markUpdateAvailable(_:)` method sets `updateAvailable = true` and stores the version string. The persistent storage of the last seen version occurs in [Changelog.swift](Sources/PalmierPro/App/Changelog.swift) using the `lastSeenVersion` key.

### What should I do if the automatic updater fails?

If the Sparkle-based automatic update fails, you can manually update Palmier Pro by downloading the latest DMG from `https://github.com/palmier-io/palmier-pro/releases/latest/download/PalmierPro.dmg`. Mount the disk image and drag the application to your Applications folder to replace the existing version.