Case study
Sensor-connected health and fitness apps
Two generations of BLE-connected apps: a fitness device companion with offline-first sync and live analytics, and a vitals monitor rendering ECG, SpO2 and temperature from a medical sensor.
- Role
- Senior iOS engineer
- Platform
- iOS
- Stack
- Swift · Objective-C · CoreBluetooth · HealthKit · Core Data · encrypted BLE transport
- Period
- 2014 – 2019
Context
Hardware products live or die on the companion app. Users expect the device to connect every time, show data instantly, and never lose a session because the phone was offline.
The medical device added a second bar: vital-sign data has to be rendered correctly and transported securely.
My role
- Built the BLE integration layers, the live telemetry rendering and the offline-first data model.
- Owned sensor validation modules and HealthKit integration.
Constraints
- Bluetooth behaviour varies by device firmware and iOS version; reconnection and data integrity had to be handled in the app.
- Sessions recorded offline must sync without duplication or loss once the phone reconnects.
- Medical data over BLE required encrypted communication and validation of every sample.
Key decisions
Decision 1
Offline-first with Core Data as the source of truth
Every sample lands locally first and syncs later. Conflict handling and migration work grows, but a lost connection never loses a workout or a reading.
Decision 2
Sensor validation modules before rendering
Each sample passes a validation module that checks range, sequence and checksum before it reaches the ECG renderer or HealthKit. A little latency per sample; no corrupted frames on screen, and better compatibility across device batches.
What I built
- CoreBluetooth connection management with reconnection and multi-sensor support.
- Real-time ECG graph rendering from the live data feed; SpO2 and temperature readouts.
- Offline-first Core Data store with background sync and HealthKit write-through.
- Redux-style state management for a unified data flow, and automated UI and unit test suites.
Validation
- Automated UI and unit test suites, plus device-batch testing to catch firmware differences.
- Replay of recorded sensor streams through the validation modules to verify rendering and sync behaviour.
Release and operation
- App Store releases alongside device firmware updates, with OTA update support in the app.
What changed, and what I'd do next
- Device compatibility increased by 15% through the sensor validation modules.measured
- User retention improved by 15% after BLE integration and offline sync shipped in the fitness app.measured
- App startup time reduced by 35% and memory footprint by 20% through optimisation.measured
Measured: a number from logs, analytics or a release pipeline. Observed: seen in production without a formal measurement. Design goal: what the system is built to guarantee.
What I'd do next
- Move validation rules to a data-driven format so new device batches do not require an app release.