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.