Releases are fully automated via GitHub Actions. When you push a version tag, the workflow will:
- Build the app
- Sign with Developer ID
- Notarize with Apple
- Create a DMG
- Update the Sparkle appcast
- Create a GitHub Release
Go to your repository Settings → Secrets and variables → Actions → New repository secret
Add these secrets:
| Secret Name | Description | How to Get It |
|---|---|---|
SIGNING_IDENTITY |
Developer ID signing identity | Developer ID Application: Pedro Moreira Proença (X7A5P2XW9X) |
DEVELOPER_ID_CERTIFICATE_P12 |
Base64-encoded .p12 certificate | See "Export Certificate" below |
DEVELOPER_ID_CERTIFICATE_PASSWORD |
Password for the .p12 file | Password you set when exporting |
APPLE_ID |
Your Apple ID email | Your Apple Developer account email |
APPLE_ID_PASSWORD |
App-specific password | appleid.apple.com → App-Specific Passwords |
TEAM_ID |
Apple Developer Team ID | X7A5P2XW9X |
SPARKLE_PRIVATE_KEY |
EdDSA private key for Sparkle | See "Export Sparkle Key" below |
- Open Keychain Access
- Find "Developer ID Application: Pedro Moreira Proença"
- Right-click → Export
- Save as
.p12file with a strong password - Convert to base64:
base64 -i certificate.p12 | pbcopy - Paste into
DEVELOPER_ID_CERTIFICATE_P12secret - Delete the .p12 file
.build/artifacts/sparkle/Sparkle/bin/generate_keys -x /tmp/sparkle_key.txt
cat /tmp/sparkle_key.txt | pbcopy
rm /tmp/sparkle_key.txtPaste into SPARKLE_PRIVATE_KEY secret.
- Go to repository Settings → Pages
- Source: Deploy from a branch
- Branch:
master, Folder:/docs - Save
Edit Sources/KeyNav/Resources/Info.plist:
CFBundleShortVersionString: User-visible version (e.g.,0.2.0)CFBundleVersion: Build number (increment each release, e.g.,2)
git add Sources/KeyNav/Resources/Info.plist
git commit -m "Bump version to 0.2.0"
git tag v0.2.0
git push origin master --tagsThe release workflow will run automatically. Check progress at: Actions → Release workflow
Once complete:
- DMG available at GitHub Releases
- Appcast updated automatically
- Users will see update in-app
- Check
APPLE_IDandAPPLE_ID_PASSWORDsecrets - Ensure app-specific password is valid (regenerate if needed)
- Verify certificate is exported correctly
- Check
DEVELOPER_ID_CERTIFICATE_PASSWORDmatches export password
- Verify
SPARKLE_PRIVATE_KEYis correct - Check GitHub Pages is enabled on
/docsfolder