get to prod tasks
This commit is contained in:
79
tasks/ios-production/12-launch-time.md
Normal file
79
tasks/ios-production/12-launch-time.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user