Skip to content
The Handover

Packs

Shipping a desktop app

Signing, notarisation and signed self-updates for a desktop application distributed outside an app store.

Assumes:macOS as the signing machine, an Apple Developer account, and object storage for hosting updates. Tauri-flavoured, but the shape applies to any updater verifying a detached signature.

Download 4 documents + MANIFEST

Contents

Getting a credential from its store into its destination without it ever appearing as text the assistant emits.

Coding · GuidesLeon Mallett, Founder of Captivated Ltd with Claude Code
Last confirmed working 7 August 2026 on security (macOS Keychain CLI) macOS 14+

MANIFEST.md

Shipped inside the archive. Reproduced here so you can read it before downloading.

# Shipping a desktop app

Signing, notarisation and signed self-updates for a desktop application distributed outside an app store.

Source: https://the-handover.org/packs/desktop-app-distribution
Built: 2026-08-29
Documents: 4
Licence: Handover-1.0 (© Captivated Ltd) — https://the-handover.org/licence

## What this pack assumes

macOS as the signing machine, an Apple Developer account, and object storage for hosting updates. Tauri-flavoured, but the shape applies to any updater verifying a detached signature.

## Contents

### docs/macos-signing-and-notarisation.md

Title: Signing and notarising a macOS app for direct distribution
Summary: The certificate types, the notarisation flow, and the build setting that silently ships an unnotarised DMG.
Authors: Leon Mallett, Founder of Captivated Ltd (captivated.online)
Source: https://the-handover.org/docs/macos-signing-and-notarisation
Last confirmed working: 2026-08-08
Marks: Hard-Won
SHA-256: 2f97f3a0c7c1a5afc2042c6614b80c6e96ab79eae46719e69a9a67b7b958d9c8

### docs/desktop-app-signed-self-updates.md

Title: Signed self-updates for a desktop app, hosted on object storage
Summary: Wiring an updater keypair, a version manifest and a public bucket, and the flags that make uploads silently do nothing.
Authors: Leon Mallett, Founder of Captivated Ltd (captivated.online)
Source: https://the-handover.org/docs/desktop-app-signed-self-updates
Last confirmed working: 2026-08-08
Marks: Hard-Won
SHA-256: 97556a448753607ba93750f4b1894707943056fbdddfb6bcd75745bb91430d45

### docs/live-secrets-in-ai-sessions.md

Title: Handling live secrets in AI coding sessions
Summary: Getting a credential from its store into its destination without it ever appearing as text the assistant emits.
Authors: Leon Mallett, Founder of Captivated Ltd (captivated.online)
Source: https://the-handover.org/docs/live-secrets-in-ai-sessions
Last confirmed working: 2026-08-07
Marks: Hard-Won
SHA-256: 7a47848943a345cbeadf47f9c7c29dc4832115dee9261f0ef851c1bb7f6d9a8a

### docs/supply-chain-baseline-ai-development.md

Title: Supply-chain security baseline for AI-assisted development
Summary: What an agent should check before installing a dependency, and which files it must never modify without a shown diff.
Authors: Leon Mallett, Founder of Captivated Ltd (captivated.online)
Source: https://the-handover.org/docs/supply-chain-baseline-ai-development
Last confirmed working: 2026-08-07
SHA-256: 6c30cf40c85876977a7893c5b20713456adf4e009c6c8f1a43858b14856af247

## Licence and attribution

Copyright is retained by the authors and Captivated Ltd. You may use these
documents in your own projects — private, public, commercial, client work —
and adapt them to fit. What is reserved is republishing the collection as a
collection: mirrors, or catalogues assembled out of these documents.

Each file carries an attribution header naming its authors, its source and the
date it was last confirmed. Keep it: once a file has been separated from this
pack, that header is the only thing that still credits the person who wrote it.

## Verifying this pack

Each SHA-256 above is of that file exactly as it appears in this archive. Verify one
with `shasum -a 256 <file>`; a file whose hash does not match was modified after
packaging.

Document files are byte-reproducible: the same source document, at the same
confirmation state, always produces the same bytes. The archive as a whole is not,
because this manifest records the build date above — two builds on different days
differ in that line and therefore in the archive, while every document file inside
stays identical. The per-file hashes are the thing to check.