You need a Developer ID Application certificate (not a regular development cert) to sign apps for distribution outside the Mac App Store.
- Open Keychain Access on your Mac.
- Go to Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.
- Fill in your email, select "Saved to disk", and save the CSR file.
- Go to Apple Developer > Certificates.
- Click +, select Developer ID Application, upload your CSR.
- Download and double-click the certificate to install it in your keychain.
- Open Keychain Access.
- Find your Developer ID Application certificate (under "My Certificates").
- Right-click > Export as
.p12format. Set a strong password. - Base64-encode it:
base64 -i certificate.p12 | pbcopy
- Go to appleid.apple.com > Sign-In and Security > App-Specific Passwords.
- Generate one named "Reading List Notarization".
- Go to Apple Developer > Membership Details.
- Copy your Team ID (10-character alphanumeric string).
Run this in Terminal:
security find-identity -v -p codesigning | grep "Developer ID Application"Copy the full identity string, e.g.: Developer ID Application: Your Name (TEAMID123)
Go to your repo's Settings > Secrets and variables > Actions and add:
| Secret | Value |
|---|---|
DEVELOPER_ID_CERTIFICATE_BASE64 |
Base64-encoded .p12 file contents |
DEVELOPER_ID_CERTIFICATE_PASSWORD |
Password you set when exporting the .p12 |
DEVELOPER_ID_APPLICATION |
Full signing identity, e.g. Developer ID Application: Your Name (TEAM123) |
APPLE_ID |
Your Apple ID email |
APPLE_ID_PASSWORD |
App-specific password from step 3 |
TEAM_ID |
Your 10-character Team ID |
Tag a new version and push:
git tag v1.0.0
git push origin v1.0.0This triggers the GitHub Actions workflow which will:
- Build a universal binary (ARM + Intel)
- Sign with your Developer ID certificate
- Notarize with Apple
- Create a DMG and ZIP
- Publish a GitHub Release with both artifacts
To build a signed and notarized release on your own machine:
export DEVELOPER_ID_APPLICATION="Developer ID Application: Your Name (TEAM123)"
export APPLE_ID="your@email.com"
export APPLE_ID_PASSWORD="xxxx-xxxx-xxxx-xxxx"
export TEAM_ID="TEAM123"
./scripts/build-release.shArtifacts are written to .build/Reading-List-<version>.dmg and .build/Reading-List-<version>.zip.
Users download the DMG, open it, and drag "Reading List" to their Applications folder. Because the app is signed and notarized, macOS Gatekeeper will allow it to run without security warnings.
On first launch, the app asks the user to select their ~/Library/Safari/Bookmarks.plist file via a standard file picker (required for sandbox access).