SILENT BELL

Lessons from shipping a watch-only app

Three things cost more than the app itself, and none of them were code.

I shipped Silent Bell last week: a standalone Apple Watch app that taps your wrist at random moments. No sound, nothing on screen. Five dollars once, no account, no network code at all. It is open source under Apache 2.0 — the whole thing is on GitHub, including the parts that failed. I built it over evenings with Claude Code.

The taps were the easy part. These were not.

1. A watch-only app is not watch-only at delivery

A single watchOS target builds, signs, installs and runs perfectly on a real Watch. Everything looks finished. Then on release day, Xcode's Distribute App offers Release Testing, Enterprise and Debugging — no App Store option, and no explanation of its absence. Running xcodebuild -exportArchive says the same thing through an error that names an empty set of choices.

The App Store has no watchOS platform. What actually ships is an iOS container app with the watch app embedded inside it, which is also why a watch-only app's App Store Connect record is created under iOS. The container holds the App ID, gets archived, gets reviewed, and never runs. It contains no code.

Nothing warns you about this. I spent hours eliminating plausible causes — the distribution certificate, the provisioning profile, the archive, the account type, command line versus IDE — and every one was a dead end. What settled it was creating a throwaway project from Xcode's own watchOS App template and finding that it produced two targets. Three minutes, after hours of theorising.

If you are ever stuck like this: build the template and diff it.

2. Three rejections, one icon

Rejected twice under guideline 2.3.8 for having "placeholder icons", then a third time under guideline 4. It was not a placeholder. It was a real icon that happened to be dark on near-black.

watchOS masks every icon into a circle and shows it on a black honeycomb, so a dark icon's boundary simply disappears. Apple's Human Interface Guidelines say it plainly: avoid using black for an icon's background, and lighten a black background so the icon does not blend into the display behind it.

My first attempt lightened the background to #1C1C1E — the right diagnosis at roughly a tenth of the necessary dose. The fix that passed was a sand field, #CFA86F, which also survives the App Store's white product pages.

The actual lesson is not about colour. Twice I read a rejection, formed a theory, and resubmitted a guess. What finally worked was replying to App Review and asking which surface showed the problem. A month, for a background colour.

3. There are no App Store analytics for watch-only apps

Open App Analytics for a standalone watchOS app and you are told the app is unavailable for analytics, and that you should contact your App Store Connect user with the admin role. That message is misleading. It is not a permissions problem and no admin can fix it.

Apple's response to a developer feedback report was direct: analytics does not include data from watchOS. Intended behaviour. The enhancement request asking for it, FB22636118, was filed in April 2026 and is still open; there is a developer forum thread covering the same ground.

So: no acquisition data, no retention, no crash reporting, and no campaign attribution — the tagged-link mechanism every guide to App Store marketing assumes lives in the analytics section you cannot open. Sales and Trends still works, because it is a financial pipeline rather than a device one, so you can see units sold but never where the buyer came from.

If you ship watch-only, your own website is the only measuring instrument you have. Plan for that before launch, not after.

On building it with Claude

It was confidently wrong about plenty. That turned out to be affordable, because every answer was tested on a real Watch the same evening and the wrong ones cost minutes.

The question that mattered most — which kind of extended runtime session keeps running after you press the Digital Crown — was not settled by documentation at all. It was settled by trying four of them on my wrist and watching three die. The model was a fast way to generate candidates and a poor authority on which one was true.

All of it, failures included, is written up in the README.

2 September 2026 · Silent Bell · source