Build · 2025-11-09 · 11 min

Shipping Tapsy 1.0

Eight weekends from the first commit to the first shipped binary. Two TestFlight builds with a total of fourteen testers. One App Store rejection, not for the app — for the metadata.

A condensed timeline

  • Weekend 1: A widget that counts. That’s it.
  • Weekend 2: Storage layer. The “data model” is a [Counter] in a property list. It stays that way.
  • Weekend 3: iCloud sync. CloudKit is fine. The hard part is naming what to send.
  • Weekend 4: The first usable widget. Tap target felt too small. Bumped.
  • Weekends 5–6: watchOS complication. Half a weekend wasted on a layout bug that was a missing relationship in the entitlement.
  • Weekend 7: Settings, export, the app body. Honest 50% of the work for ~5% of the use.
  • Weekend 8: TestFlight, fix-ups, ship.

The body of this note will go deeper into the rejection (an unhappy metadata note about widget naming) and the small calls — like rounding the count up when displayed wide — that turned out to matter.

More notes