Getting Started on iOS¶
PulseLoop for iOS is a native SwiftUI app with SwiftData persistence, Live Activities, and a Dynamic Island widget. There are two ways to run it: the upcoming public TestFlight beta, or building from source in Xcode.
Pick a ring first
PulseLoop talks to a real Bluetooth ring. Before you start, check the supported hardware to make sure your ring is one PulseLoop can drive. No ring yet? You can still explore the whole app with demo data.
TestFlight beta¶
The public TestFlight beta is live. Sign up here to request an invite, or ask on the Discord.
Prefer the raw IPA?
Every release ships a pre-built IPA you can sign with your own Apple ID. See Sideloading the IPA.
56ff ring not receiving any data?
Some users have reported receiving no data when setting the 56ff ring up
directly with PulseLoop. If this happens, set the ring up once using the
Jring app first, then unpair it from Jring and use it with PulseLoop.
Build from source (Xcode)¶
Requirements¶
- Xcode 16+ on macOS.
- An iOS 18+ physical device — Bluetooth and Live Activities need real hardware, so the simulator can't reach the ring.
- A compatible
56ffor Colmi/Yawell BLE ring (see supported rings). - An OpenAI or Gemini API key — only needed for the AI Coach features.
Run it¶
- Open
PulseLoop.xcodeprojin Xcode. - Select the
PulseLoopscheme and your physical device as the run target. -
Under Signing & Capabilities, set your own Team and a unique Bundle Identifier.
The Live Activity extension needs this too
The
PulseLoopLiveActivityextension target is a separate target — give it your team and a unique bundle ID as well, or the build will fail to sign.WeatherKit capability (optional weather-aware coaching)
The Coach can share your city name and current weather with the AI provider (opt-in under Settings → Coach → "Use location & weather"). This uses WeatherKit, which needs the WeatherKit capability enabled on your App ID in the Apple Developer portal — the
PulseLoop.entitlementsalready declarescom.apple.developer.weatherkit. If you skip this step the coach still works; the weather block is simply omitted. Only the reverse-geocoded city is ever shared — never your precise location. -
Build & run (
⌘R). - On first launch, complete onboarding, then keep the ring nearby — the app auto-scans and connects when Bluetooth powers on.
- To enable the Coach, open Settings → Coach and paste your API key, then pick a provider and model. The key is stored in the iOS Keychain and never leaves the device except to call the model you chose.
Demo data (no ring required)¶
You can explore the whole UI and coach without any hardware:
- Settings → "Reseed demo data", or
- Launch with the
-seedDemo YESargument.
Running the tests¶
The unit tests in PulseLoopTests/ are hermetic — in-memory SwiftData and a
mocked client, so they need no network and no secrets.
- In Xcode:
⌘U. -
From the CLI:
CI runs this exact suite (plus SwiftLint) on every PR.
Next steps¶
- Supported hardware — what each ring can do.
- Architecture — how the app is put together.
- Contributing — add a ring driver or improve the coach.
- Looking for Android? See Getting Started on Android.