FitTrack — Hardening Checklist

1. Functional correctness

  • HealthKit auth sheet shows only the data types we use
  • Workouts logged in FitTrack appear in Apple Health within 5 s
  • Watch workout sessions correctly record HR samples for the full duration
  • Live Activity updates at the specified cadence; never older than 30 s
  • CloudKit sync of new workouts works across two paired devices
  • Complications refresh after a new workout is added

2. Security & privacy

  • HealthKit read/write set is the minimum we actually need (no overreach)
  • NSHealthShareUsageDescription and NSHealthUpdateUsageDescription are specific and honest
  • No HealthKit data leaves the device (CloudKit private DB only; no third-party analytics)
  • PrivacyInfo.xcprivacy declares Health & Fitness data type, Linked to user, Not used for tracking
  • No force-unwraps in app, watch, or widget code
  • No background fetch of HealthKit data outside an active workout (battery + privacy)
  • All photo data attached to workouts is stored locally + CloudKit; not uploaded elsewhere
  • Privacy Nutrition Label accurately reports health data collection

3. Performance

  • Cold launch < 1.5 s on iPhone 13
  • 30-day HR query < 800 ms
  • No retained HealthKit observers after view dismissal (verify with Instruments → Allocations)
  • SwiftData query for 1000 workouts < 200 ms
  • Watch app cold launch < 2 s
  • Watch battery cost of a 1-hour workout: < 8% drain (measure on physical Watch)
  • Widget extension memory peak < 20 MB

4. Accessibility

  • VoiceOver describes each chart data point on tap
  • Dynamic Type up to accessibility5 doesn’t break the dashboard
  • All actionable buttons have .accessibilityLabel
  • Reduce Motion disables chart entrance animations
  • Complications respect tinted face mode

5. Localization

  • All strings via String(localized:)
  • Distance: km vs mi based on locale
  • Energy: kcal vs kJ based on locale (HealthKit gives joules; format respects user)
  • Time format: 12h vs 24h based on locale
  • Date pickers and chart axis labels respect locale

6. Apple Review

  • HealthKit purpose strings explain why and what clearly (Apple Review checks these)
  • Demo account credentials provided in App Review notes (if any login)
  • App icon does NOT mimic Apple Health, Fitness, or Workouts
  • No medical claims in marketing copy (Apple-prohibited)
  • Privacy policy URL live and accurate

7. CI/CD

  • Unit tests pass for HealthQueryStream (with mocked HKHealthStore)
  • Snapshot tests for Swift Charts views
  • Watch UI test for “start workout → end workout → save”
  • Fastlane lanes for iOS app, watchOS app, and metadata
  • Build numbers auto-incremented in CI

8. Documentation

  • GitHub README has screenshots from iPhone + Watch + Live Activity
  • Architecture diagram in repo
  • ADRs reflect the shipped build
  • Interview talking points rehearsed
  • 60-second screen capture on portfolio

Sign-off

If every box is ticked, FitTrack ships. Move on to interview-talking-points.md.