# 18. Performance Testing (XCTestMetric) meta: id: ios-production-18 feature: ios-production priority: P2 depends_on: [] tags: [testing, performance, quality] objective: - Implement performance testing using XCTestMetric to ensure consistent 60fps and fast response times deliverables: - Performance tests for critical flows - XCTMetric measurements - Baseline performance documentation - Performance regression detection in CI steps: 1. Set up performance tests: - Create XCTestCase with measure blocks - Use XCTClockMetric for time measurements - Use XCTCPUMetric for CPU usage - Use XCTMemoryMetric for memory usage 2. Test critical flows: - App launch time (cold and warm) - Dashboard scroll performance (60fps) - Alert list scroll performance - Service screen transitions - API response time (with mocked data) - Image loading performance 3. Establish baselines: - Run tests 10 times to establish baseline - Document expected ranges for each metric - Set performance budgets 4. Add regression detection: - Configure XCTest to fail on 10% regression - Add to CI pipeline - Alert on performance degradation 5. Test on physical devices: - iPhone SE (2nd gen) — minimum supported device - iPhone 12 — mid-range target - iPhone 15 Pro — high-end target 6. Document performance: - Create docs/PERFORMANCE.md - List all measured metrics and baselines - Document optimization techniques used tests: - Performance: All metrics within budget - Regression: 10% regression triggers failure - Device: Tests pass on physical devices acceptance_criteria: - 10+ performance test cases - App launch time measured and baselined - Scroll performance tested (target 60fps) - API response time measured - Memory usage tracked during key flows - Baselines established for iPhone SE, 12, and 15 Pro - 10% regression threshold configured - Performance tests run in CI - Performance budget documented - No performance regressions in release builds validation: - Run performance tests → all within budget - Introduce slow animation → test fails - Check CI → performance tests passing - Review docs → baselines documented notes: - Performance tests should run on physical devices, not simulators - Simulators don't reflect real-world performance accurately - Use Xcode's Metrics tab to track performance over time - Consider using Firebase Performance Monitoring for real-world data