Repository navigation
feat(health): parse WorkoutStatistics from Apple Health export - #29
Merged
Merged
Conversation
Co-authored-by: Muse Code <muse-code@meta.com>
johnnyhuy
force-pushed
the
agent/issue-28-workout-statistics
branch
from
November 7, 2026 11:27
d0bc6c3 to
25a0037
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds WorkoutStatistics parsing for Apple Health exports. A new Foundation-only parser reads Workout elements and their nested WorkoutStatistics from export.xml, and ParsedWorkout exposes per-workout active and basal energy, distance, step count, and heart-rate summaries (average, minimum, maximum) with unit normalisation to kilocalories and metres.
Part of #7. Closes #28.
How it was verified:
mise run lint- no new violations in the added files. The repo total stays at the pre-existing baseline (504 warnings, 11 serious across 122 files, all in existing app files).mise run build- passed.mise run test- passed, 110 tests with 0 failures. The 15 new WorkoutStatisticsTests are listed below.mise run ios:build:devandmise run ios:test:uiwere not run. Nothing user-facing changed; this slice is core parsing logic only.Proof, terminal capture from
swift test --filter WorkoutStatisticsTests:Each test name states what it shows. Together they cover parsing two workouts from a mixed export, skipping top-level Record elements, preferring child statistics over workout totals, falling back to workout totals when statistics are absent, preserving unknown statistic types, handling an empty export, throwing on malformed XML, normalising miles and kilojoules, and a Codable round-trip.
Reviewer notes:
.other(type)with their raw values, so a new HealthKit quantity does not drop the workout.