DEV Community

孫昊
孫昊

Posted on

TestFlight to App Store: 60-Day Timeline Across 4 iOS Apps

TL;DR: I shipped 4 iOS apps to TestFlight in a 60-day window. None are in the App Store yet. Below is the actual day-by-day timeline of what each step took, what blocked, and what would speed up the next round.


The 4 apps

  • AutoChoice — decision wheel (Lifestyle category)
  • AltitudeNow — barometric altitude reader (Health & Fitness)
  • DaysUntil — countdown app (Productivity)
  • PromptVault — AI prompt manager (Productivity)

All built with SwiftUI, StoreKit 2, $1.99 one-time IAP, zero analytics SDKs, MIT-licensed source on GitHub.

Day-by-day timeline (anonymized but accurate)

Days 1-5: Account setup + first scaffold

  • Day 1: Apple Developer Program sign-up ($99/year)
  • Day 2: ASC API key generation (issuer, key file, role assignments)
  • Day 3-4: 4 GitHub repos created, xcodegen scaffolds, CI pipelines (GitHub Actions)
  • Day 5: First app skeleton compiles + runs in simulator

Days 6-15: Multi-app sprint

  • Day 6-9: 4 app SwiftUI views + StoreKit 2 IAP wired
  • Day 10-11: Privacy Manifest declarations (zero data collection)
  • Day 12-13: App icons, screenshots, Info.plist localization (en + ja)
  • Day 14-15: First TestFlight upload — AutoChoice

Days 16-30: TestFlight install hell

This is where the timeline got real.

  • Day 16: TF invite sent, tester reports "App not available or doesn't exist"
  • Day 17-22: 6 hours of debugging across 4 apps. Root causes:
    1. New build not auto-added to TF group (Apple requirement, not documented)
    2. Tester ACCEPTED state vs INVITED state mismatch
    3. Apple distribution cache requires DELETE + POST cycle to refresh
    4. Apple ID region locked
    5. Paid agreement unsigned (blocking ALL distribution including TF)

I wrote up the complete debug tree: TestFlight Install Fail Debug Tree.

Days 31-45: IAP setup (the bureaucracy boss)

  • Day 31-32: First IAP creation via ASC API (V1 path)
  • Day 33-35: Pricing tier setup — Apple's API doesn't expose tier selection for IAPs
  • Day 36-40: CDP automation built to drive ASC web UI (7-step JS-click flow). Full writeup.
  • Day 41-43: Localizations for IAPs (Japanese + Simplified Chinese display name + description)
  • Day 44-45: 1024×1024 IAP promo image, review screenshots, review notes

Days 46-60: Distribution prep + first TF approval batch

  • Day 46-48: 3/4 testers ACCEPTED state confirmed (one still INVITED)
  • Day 49-51: First TF builds passed Apple's automated review
  • Day 52-55: Cross-platform content engine built (Substack + dev.to + Twitter + Zhihu)
  • Day 56-58: B2B funnel (15 lead-capture pages, $0 stack)
  • Day 59-60: Affiliate program setup, sales pages, Day 60 milestone retrospective

Where I am Day 60: 4 apps in TestFlight, 0 in App Store. IAPs created + priced ($1.99 USD × 4 apps). All localizations + screenshots pending.

What burned the most time

Ranked by hours wasted:

Phase Hours What ate the time
TF install debugging 18 5 separate root causes, no central docs
ASC API V1/V2 inconsistencies 12 Path mismatches (V2 resources at v1 paths)
IAP price tier (no API) 8 Built CDP automation as workaround
Privacy Manifest debugging 4 Apple's validation is opaque
Cross-app secret bootstrapping 6 9 failed PAT/SSH attempts before SSH key worked
Screenshot generation 3 OCR + ASO requires per-region

What I'd do differently

If I were starting Day 1 again:

1. Sign all required agreements on Day 1

Apple's Paid Apps agreement blocks ALL distribution (including TestFlight) if unsigned. I didn't realize this for 2 weeks. Sign on Day 1, even if you don't plan to charge yet.

2. Submit ONE app for App Review on Day 5, not Day 30

The Apple Review queue is 24h-7d. Whatever you have on Day 5 — that's the version you submit, even with rough edges. Iterate during review.

3. Build the 32-check verifier BEFORE the first submission

I built autoapp-toolkit's verifier at Day 8. Should have built it at Day 1 — it catches 90% of submission rejections.

4. Skip 4-app simultaneous launch

4 apps × launch = compounding work. Should have launched 1, learned, then sequenced others 2 weeks apart.

5. CDP automation infrastructure on Day 1

I built CDP + Playwright drivers at Day 30+. The infra paid back 10× in the next 30 days. Should have built it Day 5.

The Apple-side time isn't recoverable

The non-negotiable parts:

  • App Review: 24h-7d (varies by load)
  • TF tester invite acceptance: 1-72h (tester-controlled)
  • Apple agreement processing: 4-24h
  • IAP review: 24-72h after first submission

These add up to 1-3 weeks of pure waiting baked into any launch. Plan around it.

Q3 2026 plan

Now that the bureaucracy is mostly solved:

  • 2 new SwiftUI apps in pipeline (TipJar Now, HabitHash) — leverage Day 1 lessons
  • Watch + Widget extensions for the 4 existing apps (post App Review)
  • B2B consulting kickoff: target 1 paid client by Day 90
  • Gumroad SKU expansion: catalog now $572, growing

By Day 90 (next milestone post): real revenue numbers from App Store + Gumroad. Until then: this is the honest position.

Source

All 4 apps source code on GitHub (MIT):

Plus the orchestration toolkit: autoapp-toolkit — the 32-check verifier, ASC API tools, cross-app secret manager.


If you're indie iOS planning a 2026 launch, the iOS Indie Launch Playbook ($19) has the 50pp condensed version of this 60-day timeline + the ASC bureaucracy chapter.

Top comments (0)