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)
-
NSHealthShareUsageDescriptionandNSHealthUpdateUsageDescriptionare specific and honest - No HealthKit data leaves the device (CloudKit private DB only; no third-party analytics)
-
PrivacyInfo.xcprivacydeclares 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
accessibility5doesn’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.