This document describes the setup of automatic updater for A6Cutter using the Sparkle framework.
Sparkle allows users to automatically download and install application updates without the need for manual downloads from GitHub.
# Download Sparkle tools
curl -L -o sparkle.tar.xz https://github.com/sparkle-project/Sparkle/releases/latest/download/Sparkle-2.6.0.tar.xz
tar -xf sparkle.tar.xz
mkdir -p bin
cp Sparkle-2.6.0/bin/* ./bin/
# Generate keys (only once)
./scripts/generate_sparkle_keys.sh
# Generate appcast.xml
./scripts/generate_appcast.shThe workflow automatically:
- ✅ Downloads Sparkle tools
- ✅ Generates keys (if they don't exist)
- ✅ Creates appcast.xml
- ✅ Adds appcast.xml to release
- Location:
keys/ed25519_private_key.pem - Security: NEVER commit to Git!
- Purpose: Signing DMG files
- Location:
keys/ed25519_public_key.pem - Purpose: Verifying signatures in the app
- Info.plist: Automatically added to
SUPublicEDSAKey
- XML file containing information about available updates
- Sparkle uses it to detect new versions
- Automatically generated on each release
https://github.com/mariovejlupek/A6Cutter/releases.atom
- Sparkle automatically checks for updates
- Check runs every 24 hours (configurable)
- Notification is displayed
- User can download and install
- Downloads DMG from GitHub releases
- Verifies signature using public key
- Installs new version
- Restarts the application
<key>SUFeedURL</key>
<string>https://github.com/mariovejlupek/A6Cutter/releases.atom</string>
<key>SUPublicEDSAKey</key>
<string>your-public-key-here</string>
<key>SUEnableAutomaticChecks</key>
<true/>
<key>SUCheckInterval</key>
<integer>86400</integer> <!-- 24 hours -->The app automatically adds:
- "Check for Updates..." in A6Cutter menu
- "Check for Updates..." in About dialog
# Create test release
git tag v1.0.1
git push origin v1.0.1
# GitHub Actions will create release with appcast.xml// In A6CutterApp.swift
updaterController.updater.checkForUpdates()- ✅ Check
SUFeedURLin Info.plist - ✅ Verify that appcast.xml is available
- ✅ Check that DMG is signed
- ✅ Verify that
SUPublicEDSAKeyis correct - ✅ Check that private key is correct
- ✅ Regenerate keys if needed
- ✅ Check internet connection
- ✅ Verify that DMG URL is available
- ✅ Check GitHub permissions
- First release: Create tag
v1.0.0 - Test: Open the app and check "Check for Updates"
- Second release: Create tag
v1.0.1and test auto-update - Monitoring: Watch GitHub Actions logs
Note: This setup is fully automatic. Just create a Git tag and GitHub Actions will handle the rest! 🚀