Skip to content

ci: codesign + staple the DMG, and staple the app - #7

Merged
VU3ESV merged 1 commit into
mainfrom
ci/harden-dmg-signing
Jun 4, 2026
Merged

VU3ESV merged 1 commit into
mainfrom
ci/harden-dmg-signing

Conversation

@VU3ESV

@VU3ESV VU3ESV commented Jun 4, 2026

Copy link
Copy Markdown
Owner

What

Follow-up to the notarized-release PR (#6). Live‑testing release v0.2.12 showed the app is correctly notarized + accepted, but the DMG container itself was never codesigned — so:

spctl -a -t open  on LP-100A-App-0.2.12.dmg  →  rejected: no usable signature

A downloaded .dmg can therefore prompt Gatekeeper on mount, even though the app inside is fine. The app was also only covered by the DMG's notarization, not stapled itself (weaker when fully offline).

Change (scripts/package-signed.sh)

Reordered to Apple's recommended flow:

  1. build app → embed LP100AExtension.appex → sign inside-out
  2. notarize the app → staple the app (so the bundle carries its ticket offline / once copied out of the DMG)
  3. build DMG → codesign the DMG → notarize + staple the DMG

Two notary submissions now. Still gated on secrets; ad-hoc fallback unchanged. A small notarize() helper removes duplication.

Result

Closes the spctl -t open gap: the DMG mounts without a Gatekeeper prompt, and the app is stapled for offline launch. Same template change is applied to LP-700 (#13), BPF (#13), and Antenna (#28) so their first signed release is clean.

🤖 Generated with Claude Code

The release notarized + stapled the DMG but never *codesigned* the DMG
container, so `spctl -a -t open` rejected it ("no usable signature") — a
downloaded DMG could prompt Gatekeeper on mount even though the app inside is
notarized. The app was also only covered by the DMG's notarization, not stapled
itself (weaker offline).

package-signed.sh now: (1) notarizes the app and staples the *app* before
building the DMG, so the bundle carries its ticket offline / once copied out;
(2) codesigns the DMG, then notarizes + staples the DMG. Two notary submissions.
Gated on secrets as before; ad-hoc fallback unchanged.

Verified live earlier as v0.2.12: app accepted/notarized, but the DMG showed
"no usable signature" on `spctl -t open` — this closes that gap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@VU3ESV
VU3ESV merged commit 0d477ef into main Jun 4, 2026
1 check passed
@VU3ESV
VU3ESV deleted the ci/harden-dmg-signing branch June 4, 2026 14:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant