-
Notifications
You must be signed in to change notification settings - Fork 0
Signing and Distribution
What it takes to ship Flume so that a user's operating system does not treat it as suspicious, and what to tell them when it does.
Current state: builds are unsigned. Signing is optional in the release pipeline — the secrets are read if present and skipped if not — so anyone can build Flume without certificates. Everything below is what changes when real credentials exist.
Not security in the sense people assume. A signature does not make the code safe; it makes the code attributable and tamper-evident, which is what the OS gatekeeping is really checking.
The practical benefit is that users are not confronted with a scary dialog that trains them to click through warnings.
| Requirement | Cost |
|---|---|
| Apple Developer Program | $99/year |
| Developer ID Application certificate | Included |
| Notarization | Included, but adds minutes per build |
Signing alone is not enough. macOS also requires notarization — uploading the build to Apple, which scans it and issues a ticket that gets stapled to the bundle. An app that is signed but not notarized is still blocked.
Set these repository secrets and the release workflow picks them up:
| Secret | What it is |
|---|---|
APPLE_CERTIFICATE |
Developer ID cert as base64 .p12
|
APPLE_CERTIFICATE_PASSWORD |
Password for that .p12
|
APPLE_SIGNING_IDENTITY |
e.g. Developer ID Application: Name (TEAMID)
|
APPLE_ID |
Apple ID used for notarization |
APPLE_PASSWORD |
An app-specific password, never the account password |
APPLE_TEAM_ID |
10-character team identifier |
macOS refuses to open the app: "Flume is damaged and can't be opened" or "cannot be opened because the developer cannot be verified". The first message is misleading — nothing is damaged; the quarantine attribute is set and there is no notarization ticket.
Their options:
-
Right-click the app → Open → Open in the dialog. Works on most versions, and is the least alarming route.
-
System Settings → Privacy & Security, then "Open Anyway" next to the blocked app.
-
Remove the quarantine attribute directly:
xattr -dr com.apple.quarantine /Applications/Flume.app
Option 3 is what most guides lead with, and it is the one to put last: telling users to strip security attributes from downloaded binaries is a bad habit to teach, even when it is correct here.
| Requirement | Cost |
|---|---|
| OV code signing certificate | ~$200-400/year |
| EV code signing certificate | ~$300-600/year, often needs a hardware token |
The difference matters more than the price. SmartScreen reputation is built per-certificate from download volume: an OV certificate starts with none, so early users still see warnings until enough downloads accumulate. An EV certificate gets reputation immediately.
For a project with modest download numbers, an OV certificate can warn users for a long time. That is worth knowing before spending the money.
A blue "Windows protected your PC" dialog. The Run anyway button is hidden behind More info, which is deliberate and catches people out.
Some browsers also flag the download itself as untrusted.
No signing gate. Users install a .deb or .rpm and it works.
If Flume is ever published to a repository, packages are signed with a GPG key and users import the public key — a different model, and a much cheaper one.
The AppImage format supports embedded signatures, but almost nothing verifies them, so it buys little.
Whatever happens with certificates, publishing SHA-256 checksums alongside releases lets a careful user verify their download:
shasum -a 256 -c flume_0.1.0_aarch64.dmg.sha256This is worth doing from the first release. It is free, and it is the only verification available to users of unsigned builds.
- Ship unsigned first, with checksums and clear instructions. Wait for real users before spending money.
- macOS signing is the highest-value purchase if demand appears: the gatekeeping is the most aggressive and the fix is the most obscure.
- Windows EV over OV, or neither. An OV certificate that still shows SmartScreen warnings for months is the worst value of the three options.
- Never work around gatekeeping in the installer. Any instruction that disables a security feature globally, rather than for this one app, is worse than the warning.
Flume — Apache-2.0. This wiki is generated from docs/ by wiki-sync.yml; edits made here are overwritten on the next sync, so change the source instead and it gets reviewed with the code. The same pages, laid out for reading, are at flume.adamgreenwell.com/docs.
Using Flume
Developing
- Development-Setup
- Architecture
- Design-System
- Torrent-Engine-Notes
- CI-CD-and-Releases
- Signing-and-Distribution
Project