Overview
Ora Browser uses Sparkle for automatic updates. The release process involves building, signing, notarizing, and publishing releases with automatic update support.All build artifacts are organized in the
build/ directory. Releases are distributed via GitHub Releases and updates are delivered through Sparkle’s appcast feed.Prerequisites
Apple Developer Requirements
Apple Developer Account
You need an active Apple Developer account for code signing and notarization.
Developer ID Certificate
Install a “Developer ID Application” certificate from your Apple Developer account.
App-Specific Password
Generate an app-specific password for notarization:
- Go to appleid.apple.com
- Sign in with your Apple ID
- Generate an app-specific password for notarization
- Store it in your keychain
Required Tools
Environment Configuration
Create a.env file in the project root with your credentials:
.env
Release Workflow
Quick Release
Create a release with automatic version increment:- Increments the patch version
- Generates a changelog from git commits
- Builds and signs the app
- Creates and notarizes a DMG
- Updates appcast.xml
- Deploys to GitHub Pages
- Uploads to GitHub Releases
Manual Version Release
Specify a version number:Release Steps
Version Resolution
The script determines the version number:Build version is also incremented in
CURRENT_PROJECT_VERSION.Changelog Generation
A changelog is automatically generated from git commits:Commits are categorized:
- Features:
feat:prefix - Fixes:
fix:prefix - Performance:
perf:prefix - Docs:
docs:prefix - Chores:
chore:prefix - Other: Everything else
Sparkle Key Management
Ed25519 keys are managed for signing updates:First Release (no keys exist):
- Public key saved to
ora_public_key.pem(committed to git) - Private key saved to
.envasORA_PRIVATE_KEY(never committed)
- Uses existing public key from
ora_public_key.pem - Retrieves private key from
.env
Build and Sign
The This performs:
build-release.sh script handles the complete build process:- Generates Xcode project with xcodegen
- Builds Release configuration
- Signs the app bundle with Developer ID
- Creates a DMG with create-dmg
- Signs the DMG
- Notarizes with Apple
- Staples notarization ticket
Update Signing
The DMG is signed with your Sparkle private key:The signature is embedded in
appcast.xml:Build Script Details
build-release.sh
The release build script performs a complete production build:create-release.sh
The complete release automation script:scripts/create-release.sh
Automatic Updates
Sparkle Configuration
Sparkle is configured inproject.yml:
project.yml
Appcast Feed
Theappcast.xml file is hosted on GitHub Pages:
appcast.xml
Update Flow
- User launches Ora: Sparkle checks for updates at app launch
- Fetches appcast: Downloads and parses
appcast.xml - Version comparison: Compares
sparkle:versionwith current build - Signature verification: Validates
sparkle:edSignaturewithSUPublicEDKey - User prompt: Shows changelog and update prompt
- Download: Downloads DMG from GitHub Releases
- Install: Replaces app bundle with new version
Security
Key Management
Backup Your Keys
Verification
The release script includes security checks:Release Checklist
Before creating a release:- All tests pass (
xcodebuild test -scheme ora -destination "platform=macOS") - Code is properly formatted (
swiftformat . --quiet) - No linting errors (
swiftlint --quiet) -
.envfile is configured with credentials - Git working directory is clean
- Changelog commits follow convention (feat:, fix:, etc.)
- Verify GitHub Release is created
- Test DMG download and installation
- Verify appcast.xml is accessible at GitHub Pages URL
- Test automatic update in existing installation
- Announce release on Discord/Twitter
Troubleshooting
Notarization Failures
If notarization fails:- Invalid signing identity
- Missing or incorrect entitlements
- App-specific password expired
Sparkle Signature Errors
If signature generation fails:GitHub Upload Failures
If DMG upload fails:Distribution Channels
GitHub Releases
Releases are published at:Update Feed
Appcast is hosted at:Direct Download
DMG files are available at:Next Steps
Building
Learn how to build Ora Browser for development
Testing
Run tests and write new test cases
