Skip to main content
Back to the shipping log
iOS8 min read

Spec to App Store in 45 calendar days: the schedule

$34,995. 45 calendar days. Spec to App Store. The day-by-day schedule we run, the risks at each phase, and where we cut corners (and where we never do).

HTThe Hayaiti team
#ios#swift#shipping

Built on tools you trust

Vercel
Stripe
Cloudflare
GitHub
Linear
Slack
Resend
Sentry
Postgres
PostHog
Loom
Notion

← swipe · 12 tools →

The promise

The iOS App → App Store SKU is $34,995 and 45 calendar days from kickoff to live in the App Store. This post is the schedule we actually run, the risks at each phase, and where we cut corners (and where we don't).

We're not reinventing iOS development. The schedule works because we made the boring decisions in advance — stack, patterns, infra — and we're disciplined about scope.

Day 0-3: Spec lock

Before kickoff we send a one-page spec back to the client with screens, flows, integrations, and explicit non-goals. The non-goals matter. "v1 does not include push notifications" written down on day 0 saves two weeks of feature creep on day 30.

Spec gets signed off in writing. After that, scope changes go through a written change order. No ambiguity.

Day 4-14: SwiftUI scaffolding

Native Swift, SwiftUI for new screens, UIKit only where SwiftUI is still rough (some camera and complex list scenarios). We don't ship React Native or Flutter for client work — App Store reviewers, Apple APIs, and long-term maintainability all favor native.

What ships in this phase:

  • All screens scaffolded with mock data
  • Navigation structure (tab bar, navigation stack, sheet presentation)
  • Design tokens wired (colors, type, spacing) from the brand
  • Empty states, loading states, error states for every screen

We use The Composable Architecture or plain @Observable classes depending on app complexity. Both are fine. We pick the simplest one that fits.

Day 15-25: Backend wiring

Most apps need a backend. We default to a small Node or Go service on Fly.io with Postgres, plus Apple Sign-In for auth. For simpler apps, Firebase or Supabase shaves a week.

What ships:

  • Real data flowing into every screen (no more mocks)
  • Auth flow live (Apple Sign-In + email fallback)
  • API client with proper error handling and retry
  • Push notifications scaffolded if in scope

This is the riskiest phase. Backend bugs surface here, integrations with third-party APIs (Stripe, Plaid, OpenAI) reveal their quirks, and the timeline pressure starts to bite. We pad this phase by 2 days internally — the client sees Day 25, we plan for Day 27.

Day 26-32: TestFlight beta

Build goes to TestFlight. Internal testers (us + the client + 5-10 real users they invite) bang on it for a week.

What we hunt for:

  • Crashes (Crashlytics or Sentry from day 1, never bolted on later)
  • Performance (60fps on the oldest supported device, usually iPhone 12)
  • The "what is this app even for" moment from a fresh user

Bug fixes in this phase are unlimited within scope. New features go to v2.

Day 33-38: Marketing screenshots + listing

The boring phase nobody talks about. App Store listings get rejected or ignored because the screenshots are bad and the copy is generic.

What we ship:

  • 6 marketing screenshots per device size (iPhone, iPad if applicable)
  • Title, subtitle, keywords, description (we write all of this)
  • App preview video if the app benefits from one
  • Privacy nutrition label (this catches a lot of teams off guard — every SDK has data collection implications)

Day 39-43: App Store review

Submit. Apple's review SLA is usually 24-48 hours but plan for 72.

The reasons we've seen rejections:

  • Sign in with Apple required when you offer any third-party sign-in
  • Subscription terms not displayed clearly enough on the paywall
  • A test account that didn't work for the reviewer
  • A privacy disclosure that didn't match the app's actual behavior

We pre-check every one of these. First-pass approval rate is the metric we care about — re-submission costs 24-48 hours of timeline.

Day 44-45: Live + handoff

App goes live. We hand off:

  • Source code in your GitHub from day 1 (not "at the end")
  • Apple Developer account access
  • Backend deployed in your cloud account, not ours
  • A 10-page runbook: how to deploy, how to read crash logs, how to push an update

30 days of post-launch support are included for crashes and bug fixes. After that, you can take it from here, or move to the Embedded Engineer subscription for ongoing work.

What we don't do

  • Custom rendering engines, custom UI frameworks, custom anything where Apple's stuff is good enough.
  • Build a v1 with every feature anyone asked for. Scope discipline is the whole reason 45 days works.
  • Skip accessibility. VoiceOver labels, dynamic type, and contrast ratios get checked before submission.

Why publish the schedule

Because the SKU lists "45 days" and you should know what that means before you book. Most agencies say "6-8 weeks" and the schedule is a black box. Ours is a calendar.

HT

The Hayaiti team

Hayaiti

Hayaiti is a productized engineering studio. We ship web, software, iOS, and cybersecurity work on fixed prices and calendar-day timelines. The team takes turns on the shipping log.

Want help shipping this?

We turn posts like this into production code. Fixed price. Calendar-day timelines. Source code in your repo on day one.