- Add Windows x86_64 build target to release.yml for synord/synor-cli - Create release-wallet.yml workflow for Tauri desktop wallet builds - macOS (Intel + Apple Silicon), Windows, Linux support - Code signing integration (Apple + Windows certificates) - Tauri auto-update signing support - Fix Dockerfiles to include src/ directory required by workspace - Add CODE_SIGNING.md documentation for Apple/Windows certificates
4.7 KiB
4.7 KiB
Code Signing Setup Guide
This guide explains how to set up code signing for Synor desktop applications.
Why Code Sign?
Code signing provides:
- User trust: No "unknown developer" warnings on macOS/Windows
- Auto-updates: Tauri's updater requires signed binaries
- Security: Users can verify the software hasn't been tampered with
macOS Code Signing
Prerequisites
- Apple Developer Account ($99/year): https://developer.apple.com/programs/enroll/
- Developer ID Application Certificate: For distributing outside the Mac App Store
Create Certificates
- Go to https://developer.apple.com/account/resources/certificates/list
- Click "+" to create a new certificate
- Select "Developer ID Application"
- Follow the instructions to create a CSR from Keychain Access
- Download and install the certificate
Export for CI/CD
# Export certificate as .p12 from Keychain Access
# Then base64 encode it for GitHub secrets:
base64 -i certificate.p12 -o certificate_base64.txt
GitHub Secrets Required
| Secret | Description | How to Get |
|---|---|---|
APPLE_CERTIFICATE |
Base64-encoded .p12 certificate | Export from Keychain Access |
APPLE_CERTIFICATE_PASSWORD |
Password for .p12 | Set when exporting |
APPLE_SIGNING_IDENTITY |
Certificate name | e.g., "Developer ID Application: G1 Technologies (TEAMID)" |
APPLE_ID |
Your Apple ID email | Your developer account email |
APPLE_PASSWORD |
App-specific password | Generate at appleid.apple.com |
APPLE_TEAM_ID |
10-character team ID | Find at developer.apple.com/account |
Generate App-Specific Password
- Go to https://appleid.apple.com/account/manage
- Sign in with your Apple ID
- Under "App-Specific Passwords", click "Generate Password"
- Name it "Synor CI" and save the password
Notarization
Apple requires notarization for apps distributed outside the App Store. The Tauri action handles this automatically when the secrets are set.
Windows Code Signing
Options
-
OV (Organization Validation) Certificate: ~$200-500/year
- From providers like DigiCert, Sectigo, GlobalSign
- Requires business verification
-
EV (Extended Validation) Certificate: ~$400-700/year
- Higher trust level, no SmartScreen warnings
- Requires hardware token (USB)
Purchase Certificate
- Choose a provider (DigiCert, Sectigo, GlobalSign, etc.)
- Complete organization validation
- Receive certificate file (.pfx)
GitHub Secrets Required
| Secret | Description |
|---|---|
WINDOWS_CERTIFICATE |
Base64-encoded .pfx certificate |
WINDOWS_CERTIFICATE_PASSWORD |
Password for .pfx |
Encode Certificate
[Convert]::ToBase64String([IO.File]::ReadAllBytes("certificate.pfx")) | Out-File certificate_base64.txt
Tauri Auto-Update Signing
Generate Signing Keypair
# Generate keypair (do this once, store securely)
cargo tauri signer generate -w ~/.tauri/synor-wallet.key
This outputs:
- Private key (save to
TAURI_SIGNING_PRIVATE_KEYsecret) - Public key (already in
tauri.conf.json)
GitHub Secrets Required
| Secret | Description |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
Private key from signer generate |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
Password if you set one |
Update tauri.conf.json
The public key is already configured in apps/desktop-wallet/src-tauri/tauri.conf.json:
"updater": {
"endpoints": [
"https://releases.synor.io/wallet/{{target}}/{{arch}}/{{current_version}}"
],
"pubkey": "YOUR_PUBLIC_KEY_HERE"
}
Setting Up GitHub Secrets
- Go to your repository on GitHub
- Navigate to Settings → Secrets and variables → Actions
- Click "New repository secret" for each secret
Testing Without Signing
For development and testing, you can build without signing:
cd apps/desktop-wallet
pnpm tauri:build
Users will see warnings, but the app will still work.
Verification
macOS
# Check if app is signed
codesign -dv --verbose=4 "Synor Wallet.app"
# Check if notarized
spctl -a -v "Synor Wallet.app"
Windows
# Check signature
Get-AuthenticodeSignature "Synor Wallet.exe"
Cost Summary
| Item | Cost (Annual) |
|---|---|
| Apple Developer Program | $99 |
| Windows OV Certificate | $200-500 |
| Windows EV Certificate | $400-700 |
Minimum recommended: Apple + Windows OV = ~$300-600/year