Without code signing, macOS Gatekeeper blocks the binary with "cannot be scanned for malicious software". The build pipeline supports signing and notarizing automatically when the required secrets are configured.
If the secrets are not configured, the binary is still produced but unsigned. Users can bypass Gatekeeper manually:
xattr -d com.apple.quarantine clonio-macos-aarch64
chmod +x clonio-macos-aarch64
./clonio-macos-aarch64 --version- An Apple Developer account ($99/year)
- A Developer ID Application certificate issued to your account
In Keychain Access on your Mac:
- Find your Developer ID Application certificate under My Certificates
- Right-click → Export → choose
.p12format - Set a strong password — you will need it for the GitHub secret
base64 -i certificate.p12 | pbcopyGo to appleid.apple.com → Sign-In and Security → App-Specific Passwords → Generate one for "GitHub Actions".
Go to Settings → Secrets and variables → Actions and add:
| Secret | Value |
|---|---|
APPLE_DEVELOPER_CERTIFICATE_P12 |
Base64-encoded .p12 from step 2 |
APPLE_DEVELOPER_CERTIFICATE_PASSWORD |
Password set during .p12 export |
APPLE_SIGNING_IDENTITY |
Full identity string, e.g. Developer ID Application: Your Name (TEAMID) |
APPLE_ID |
Your Apple ID email address |
APPLE_ID_PASSWORD |
App-specific password from step 3 |
APPLE_TEAM_ID |
Your 10-character team ID, visible at developer.apple.com/account |
security find-identity -v -p codesigningCopy the full string in quotes, e.g. Developer ID Application: Acme Corp (ABC123XYZ).
The three signing steps in build.yml are conditional on APPLE_DEVELOPER_CERTIFICATE_P12 being set. If the secret is absent the steps are skipped and an unsigned binary is produced — the rest of the pipeline (smoke test, upload) still runs.
When the secret is present:
- The certificate is imported into a temporary keychain
codesignsigns the binary with the hardened runtime flag (--options runtime) — required for notarizationnotarytoolsubmits the binary to Apple for notarization and waits for approval- The notarized binary is uploaded to the GitHub Release