Files
Kordant/tasks/ios-production/12-launch-time.md
2026-05-26 16:06:34 -04:00

2.6 KiB

12. App Launch Time Optimization

meta: id: ios-production-12 feature: ios-production priority: P2 depends_on: [] tags: [performance, launch, production]

objective:

  • Optimize app launch time to under 2 seconds for cold starts and under 1 second for warm starts

deliverables:

  • Launch time measurement and baseline
  • Optimized app initialization
  • Lazy loading of heavy components
  • Reduced binary size

steps:

  1. Measure current launch time:
    • Use Xcode Metrics Organizer
    • Use os_signpost for custom timing
    • Measure cold start (first launch after reboot)
    • Measure warm start (subsequent launches)
    • Establish baseline metrics
  2. Optimize app delegate:
    • Minimize work in application(_:didFinishLaunchingWithOptions)
    • Defer non-critical initialization
    • Move heavy setup to background threads
    • Avoid blocking main thread
  3. Lazy load heavy components:
    • Defer VoicePrint model loading until needed
    • Defer document scanner initialization
    • Lazy load WebView components
    • Load dashboard data after UI appears
  4. Optimize storyboards/XIBs:
    • Remove unused storyboards
    • Minimize view controller initialization
    • Use code-based UI where faster
  5. Reduce binary size:
    • Strip debug symbols from release builds
    • Remove unused resources and assets
    • Compress images in asset catalog
    • Enable dead code stripping
  6. Optimize framework loading:
    • Link frameworks statically where possible
    • Reduce dynamic framework count
    • Prelink common frameworks
  7. Add launch screen optimization:
    • Simple, static launch screen
    • Match first screen of app
    • No animations or complex layouts

tests:

  • Performance: Measure launch time on iPhone 12
  • Stress: Launch app 100 times, average time <2s
  • Memory: No memory spikes during launch

acceptance_criteria:

  • Cold launch time <2 seconds on iPhone 12
  • Warm launch time <1 second on iPhone 12
  • Launch screen visible for <500ms
  • No blocking operations on main thread during launch
  • Binary size <100MB (App Store limit is much higher)
  • Heavy components loaded lazily after launch
  • Launch time measured and tracked in CI
  • No crashes during launch under memory pressure

validation:

  • Xcode Metrics → cold start <2s, warm <1s
  • Instruments Time Profiler → no long blocking calls on main thread
  • Physical device test → feels instant
  • App Store Connect → binary size acceptable

notes:

  • Launch time is critical for App Store review and user retention
  • iOS may terminate apps with launch times >20 seconds
  • Use pre-warmed launches for more accurate measurement
  • Test on oldest supported device (iPhone SE 2nd gen or similar)