For Mac developers selling outside the App Store

Everything Apple doesn't do for you. Done.

Point it at the Mac app you already have — or start from the included skeleton — and get back a notarized, auto-updating, licensed DMG. Every trap already hit for you.

Get Hawser — $99 One-time purchase.
Use in unlimited apps.

Certificate to notarised DMG — the full run, in order.
The log is the tool's own output, word for word.

The App Store does five jobs.
Out here, they're yours.

Sell from your own site and you keep 100% minus payment fees, own your customers, and escape the sandbox. In exchange, Apple hands you this list — and no tooling.

The jobHandled aloneWith the kit
Menu bar app shellNo Xcode template exists; tutorials are outdated, LLMs suggest deprecated APIsWorking skeleton, macOS 13+
NotarizationXcode notarises the app. The DMG you actually ship is a separate submission — and every release repeats the GUI by handOne script, both submissions, signature flags checked before the round-trip
DMG packaginghdiutil incantations; the DMG itself must be notarized too — most guides skip thatSigned, notarized, stapled
Auto-updatesSparkle setup, EdDSA keys, appcast hosting, three silent failure modesWired, with delta updates
License keysVerification API, offline handling, refund handling, keychain storageGumroad flow, 14-day grace

What's in the box

  • The Hawser appUnlocks your kit, reads your Developer ID out of the keychain, takes the notary key from a file dialog, and writes the config for you. No text editor required to get shipping.
  • Config.xcconfigThe one file you edit. Name, bundle id, team, versions, update feed, product id — everything follows it.
  • ship.shBuild → sign → notarize → staple → DMG. Verifies its own signature flags before wasting a round-trip to Apple, and refuses to ship what would silently fail.
  • appcast.shGenerates your signed update feed — and rejects an unsigned one, a failure Sparkle's own tooling lets through without a word.
  • Five guidesWritten from measured runs, not documentation folklore. The troubleshooting page is real incidents with exact fixes.
# you edit one file:
Config.xcconfig
ShipKit.xcodeproj
Sources/
  ExampleFeatureView  ← your app goes here
  SettingsView        launch-at-login, tabs
  UpdaterView         Sparkle wired
  License*            Gumroad + grace period
scripts/
  ship.sh             one command → DMG
  appcast.sh          signed update feed
docs/
  01-quickstart … 05-troubleshooting

Honest numbers

Every claim on this page was measured on a real machine on a real Apple Developer account, the day this kit's pipeline first ran.

62sfull pipeline, warm run: from source to distributable, notarized DMG
31m → 40syour first-ever notarization vs. every one after. First-run panic, documented away
2.5 KBdelta update our test shipped instead of the full 1.1 MB — automatic, zero config
10documented traps we hit while building this, each with its exact fix

Measured 2026 — not projected, not "up to".

We fell in the holes so you don't

Three of the ten. Any one of these costs a lost afternoon — or worse, ships broken silently.

The default that expires your certificate

Apple's certificate page pre-selects "Previous Sub-CA". Accept it and your Developer ID dies in February 2027 no matter what the expiry says. The guide walks you past it; ship.sh's error text warns about it too.

The update feed that signs nothing

Add Sparkle after your first release and its own tool generates an unsigned feed with no warning — updates then fail silently on every user's machine. appcast.sh verifies the signature and refuses to let it through.

The error that names nothing

errSecInternalComponent is codesign's way of saying "keychain permissions" — it just never mentions keychains, or permissions. You get the one-line fix in the error message itself, when it happens, not after two hours of searching.

Read all ten, with the exact fix for each →

One file to configure. One command to ship. Every trap already documented.

$99 one-time

  • Use in unlimited apps, commercial or free
  • No subscription, no per-app fees, no account
  • Full source — readable, commented, yours to modify
Get Hawser — $99

Requires Apple's own Developer Program membership ($99/year, paid to Apple) — everyone shipping Mac apps pays that, kit or not.

Questions, answered straight

What exactly do I get?
The Hawser app. Paste the licence key from your receipt and it unpacks your kit — an Xcode project (the menu bar skeleton), ship.sh and appcast.sh, and five guides — then walks you through the certificate and notary setup. Full readable source, no obfuscation. The key is checked once, when you unlock; your copy is stamped with your name and the app never phones home again.
What else do I need?
An Apple Developer Program membership ($99/year, paid to Apple — required for Developer ID signing no matter what tooling you use), Xcode 15 or later, and a Gumroad account only if you want license keys.
Which platforms and versions?
Swift + SwiftUI. Your app targets macOS 13 Ventura or later and builds universal (Apple Silicon + Intel) out of the box. Updates use Sparkle 2.
Can I use it in client work? In several apps?
Yes — unlimited apps, commercial or free, including apps you build for clients. The only thing you can't do is resell or redistribute the kit itself.
Do I get updates to the kit?
Yes. Fixes and improvements to v1 are free and delivered through your original download link.
Can I get a refund?
No — for the honest reason: you receive the complete source the moment you buy, and source code can't be returned. That's exactly why everything is laid out before you pay — the full box contents, measured numbers instead of promises, and this FAQ. If you're unsure, don't buy yet; the page isn't going anywhere.