Skip to content

Latest commit

 

History

History
50 lines (44 loc) · 2.05 KB

File metadata and controls

50 lines (44 loc) · 2.05 KB

Release workflow

FrogSwitch now ships with Sparkle-based auto-updates. This document captures the commands that keep the feed and bundle in sync.

Prerequisites

  1. Install the Python dependencies used by the helper scripts:
    python3 -m pip install cryptography
  2. Keep a generated Ed25519 key pair in keys/. The private key is excluded via .gitignore, while keys/README.md explains how to generate it with scripts/generate_sparkle_key.py.

Publishing a release

  1. Bump the version in Info.plist (CFBundleShortVersionString/CFBundleVersion), tag it (e.g. v1.2.0), and update any other copy of the version string if needed.
  2. Run the Swift release build and package it:
    ./scripts/package_app.sh release
    cd build
    rm -f FrogSwitchNative.zip
    zip -r FrogSwitchNative.zip FrogSwitchNative.app
    cd -
  3. Sign the zip with the private key:
    python3 scripts/sign_release.py build/FrogSwitchNative.zip > release.signature
  4. Regenerate the appcast that Sparkle reads:
    python3 scripts/generate_appcast.py \
      build/FrogSwitchNative.zip \
      --version 1.2.0 \
      --short-version 1.2.0 \
      --download-url https://github.com/fagionpw/AutoSwitcher/releases/download/v1.2.0/FrogSwitchNative.zip \
      --release-notes https://github.com/fagionpw/AutoSwitcher/releases/tag/v1.2.0 \
      --pub-date 2026-01-28T15:30:00+00:00 \
      --title "FrogSwitch 1.2.0" \
      --feed-link https://github.com/fagionpw/AutoSwitcher \
      --output appcast.xml
  5. Inspect appcast.xml and make sure the <enclosure> attributes match the release asset.
  6. Tag the release (e.g. git tag v1.2.0) and push the tag plus the updated appcast.xml.
  7. Upload the signed zip and the appcast.xml as GitHub release assets. Sparkle expects the feed to be downloaded via the SUFeedURL that is already hardcoded in Info.plist.

Repeat steps 2–7 for every subsequent release. Keep the private key secret; if it rotates, regenerate a new key pair and update both Info.plist and the feed.