Skip to content

Upgrade to Sparkle 2 with EdDSA signing and restore auto-updates #129

Description

@schuyler

Overview

MacDown's auto-update system is currently using obsolete Sparkle 1.18.1 with deprecated DSA signing. The appcast feeds are returning 503 errors, making auto-updates non-functional. With the new macdown.app domain and access to an Apple Developer account, we can restore auto-updates using modern Sparkle 2.

Current State

Sparkle Version: 1.18.1 (via CocoaPods)
Signing: DSA (deprecated, scheduled for removal)
Appcast URLs:

  • Stable: https://macdown.app/sparkle/macdown3000/stable/appcast.xml (503)
  • Beta: https://macdown.app/sparkle/macdown3000/testing/appcast.xml (503)

Code: Using deprecated SUUpdater API in MPMainController.m

Required Changes

1. Upgrade Sparkle Framework

  • Update Podfile: pod 'Sparkle', '~> 2.0'
  • Run bundle exec pod install
  • Minimum macOS requirement will increase to 10.11+

2. Migrate Code to Sparkle 2 API

  • Replace #import <Sparkle/SUUpdater.h> with #import <Sparkle/SPUStandardUpdaterController.h>
  • Update MPMainController.m to use new SPUStandardUpdaterController class
  • Remove singleton pattern usage
  • Update delegate methods for Sparkle 2

3. Generate EdDSA Signing Keys

  • Use Sparkle's tooling to generate new EdDSA (ed25519) keypair
  • Store private key securely (offline, NOT in repository)
  • Add public key to Info.plist

4. Update Info.plist

  • Remove: SUPublicDSAKeyFile and dsa_pub.pem reference
  • Add: SUPublicEDKey with new EdDSA public key
  • Update appcast URLs if needed

5. Remove DSA Key File

  • Delete MacDown/Resources/dsa_pub.pem

6. Set Up Appcast Hosting

  • Host appcast.xml files at macdown.app (HTTPS required)
  • Use generate_appcast tool for creating signed appcasts
  • Document release workflow

Resources

Benefits

  • Modern, maintained update framework
  • Improved security with EdDSA signing
  • Functional auto-updates for users
  • Proper code signing with Developer account

Dependencies

  • Apple Developer account (available)
  • macdown.app domain control (available)
  • HTTPS hosting setup for appcast files

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthighImportant for release, significant impactinfrastructure

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions