A comprehensive toolset for managing macOS application releases using the Sparkle framework. This system automates the process of building, signing, notarizing, and distributing macOS applications with automatic update support.
- Automated version management
- DMG creation and signing
- Notarization with Apple's notary service
- Sparkle framework integration for automatic updates
- Appcast XML generation and management (beta)
- Configurable release types (major, minor, patch) (beta)
- macOS development environment
- Xcode Command Line Tools
- Python 3.6+
- Required Python packages:
- lxml
- Valid Apple Developer ID
- Sparkle framework integration in your app
- AWS S3 bucket (or similar) for hosting updates
- Clone this repository into your project:
git clone <repository-url> scripts cd scripts
- Make the scripts executable:
chmod +x release.sh chmod +x updateAppcast.py
- Configure your environment in
config.sh
Edit config.sh to match your application settings:
APP_NAME="YourAppName"
APP_BUNDLE_ID="com.yourcompany.YourAppName"
PROJECT_DIR="/path/to/your/project"KEYCHAIN_PROFILE="YourProfile"
DEVELOPER_ID="Developer ID Application: Your Name (TEAM_ID)"S3_BASE_URL="https://your-updates-bucket.s3.amazonaws.com/"To create a new release:
./release.sh --type minor --sparkle /path/to/sparkle --notes "Release notes here"| Option | Description |
|---|---|
| -t, --type | Version type ( major | minor | patch ) |
| -s, --sparkle | Path to Sparkle binary how to get it? |
| -n, --notes | Release notes ( HTML format supported ) |
| -p, --project | Path to Xcode project directory (overrides config.sh) |
| -h, --help | Show help message |
- Make your application changes in your project directory.
- Commit your changes to git.
- Clone this repository into your project directory or add the scripts directory to your environment.
- Run the release script:
./release.sh \ --type minor \ --sparkle "/path/to/sparkle" \ --notes "<h2>What's New</h2><ul><li>New feature added</li><li>Bug fixes</li></ul>"
- Upload the generated DMG and appcast.xml to your distribution server
scripts/
├── release.sh: Main release script
├── config.sh: Configuration settings
├── updateAppcast.py: Python script for managing the Sparkle appcast
project/
├── appcast.xml: Generated update feed for Sparkle
├── exportOptions.plist: Xcode export options
├── Info.plist: Info.plist configuration for Sparkle
Ensure your application has Sparkle framework integrated:
- Add Sparkle to your Xcode project
- Configure your
Info.plistwith:<key>SUFeedURL</key> <string>https://your-updates-bucket.s3.amazonaws.com/appcast.xml</string> <key>SUPublicEDKey</key> <string>Your-Sparkle-Public-Key</string>
- Create an S3 bucket for hosting updates
- Configure bucket policy for public read access
- Enable static website hosting (optional)
- Update
S3_BASE_URLinconfig.sh
Common Issues
- Signing Failed
- Verify your Developer ID in
config.sh - Ensure your certificates are valid
- Check Keychain access
- Verify your Developer ID in
- Notarization Failed
- Verify your Keychain profile
- Check Apple Developer account status
- Ensure proper entitlements
- Sparkle Updates Not Working
- Verify
SUFeedURLinInfo.plist - Check
appcast.xmlaccessibility - Validate Sparkle public key
- Verify
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
see the LICENSE file for details.
For issues and feature requests, please create an issue in the repository.