Skip to content

Bring iOS level with recent Android ring fixes and features - #143

Open
saksham2001 wants to merge 20 commits into
feat/ring-clear-after-syncfrom
feat/android-parity
Open

saksham2001 wants to merge 20 commits into
feat/ring-clear-after-syncfrom
feat/android-parity

Conversation

@saksham2001

Copy link
Copy Markdown
Owner

Summary

Brings iOS level with what the Android app (foureight84/PulseLoopAndroid) has merged since its last iOS sync (Oct 14). Each change follows Android's behaviour, written as Swift in the existing iOS style; Android PR numbers are in brackets. Stacked on #142 (feat/ring-clear-after-sync), so the diff here is only this work.

Ring fixes

Sleep

Vitals and Activity

YCBT rings and battery

Coach

Other

  • ActivityRecorderService moved out of PulseServices.swift unchanged, so that file stays under SwiftLint's 1000-line error limit.

Data: three SwiftData additions (SleepRecordEdit, MeasurementDeletion, plus new fields with defaults on existing models). DataArchive carries all of them as optional fields, so older exports still import.

Related issues

Ports Android PRs #62, #71, #80, #91, #92, #95, #108, #116, #117, #118, #119, #120, #122, #127, #129, #130, #133, #134 (foureight84/PulseLoopAndroid). Builds on #142.

Type of change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 📟 New / improved wearable support (BLE driver layer)
  • 🤖 Coach / LLM change (tools, prompts, orchestration)
  • 🎨 UI / DesignSystem change
  • 🧹 Refactor / chore (no behavior change)
  • 📝 Docs only
  • ⚠️ Breaking change (existing data, settings, or APIs change)

How was this tested?

  • Added / updated unit tests (PulseLoopTests): Android's test cases were ported where they exist.
  • Ran the test suite locally: 1460 tests, 0 failures.
  • Tested on a physical device with a real ring — model: not yet
  • Tested with demo data (-seedDemo YES, no hardware): Vitals detail, the Activity day view and records, and the Sleep records card were checked in the simulator.

Not checked yet:

  • In the simulator: the sleep record edit sheet, the quiet-hours settings, the coach history sheet and model picker, the battery estimate, and the measurement settings.

Needs a real ring before merge:

  • TK18: step totals and the one-time repair on real over-counted data.
  • R11:
    • sleep synced after 20:00;
    • a night that starts before 20:00 and crosses midnight (also open on Android);
    • spot HR (about 17 s) and SpO₂ (about 48 s) ending on the ring's result.
  • YCBT: the 120-min heart-rate interval (verified only on Android), the SpO₂ interval, and estimated-SpO₂ detection on real data.

Privacy & data

  • This change does not send health data off-device without explicit user action.
    • The model-list requests send only the user's own API key, to that provider, in a header.
    • Deleted readings are removed from Apple Health; nothing new is exported.
  • No secrets, API keys, or personal data are committed.
  • N/A

Screenshots / recordings

Not attached.

Checklist

  • My code follows the project's style (SwiftLint passes: no errors).
  • I ran the tests and they pass.
  • I updated docs / README where relevant (docs/hardware/colmi.md, luckring.md, tk5.md, r10m.md).
  • I read the Contributing guide.

…tired-model warnings and OpenRouter's real reasoning levels
… seed lines to stay under SwiftLint's error limits

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant