Beta

Thanks for helping shape
Glucera before launch.

You've got the full app — everything here stays free after launch too. Just use it with your meter and let me know how it goes.

Join on TestFlight Free · No credit card · iPhone only
What it does

Glucera in a nutshell

Glucera turns your Bluetooth blood glucose meter into a connected companion for iPhone and Apple Watch. It pairs with your meter, pulls every reading off it, and stores them in Apple Health — then surfaces your numbers as Time in Range, estimated A1c, meal averages, and a trend chart. There's no account and nothing leaves your phone: no cloud, no analytics, no network calls.

Continuous glucose monitors aren't supported. Sensors like the FreeStyle Libre 3, Dexcom G6/G7, and Eversense roll their own encrypted Bluetooth protocols and don't publish them, so there's no standards-based way to read them. Glucera supports glucometers that implement the Bluetooth Glucose Profile (GLP 1.0.1), plus a few with documented proprietary protocols like OneTouch Verio. See the list of meters known to work — I'll keep it updated as testers report back.

Step 1

Pair your meter

  • Any Bluetooth meter exposing the standard Glucose Service (0x1808)
  • OneTouch Verio meters via the proprietary protocol
  • iOS shows the pairing prompt; Glucera takes it from there

Step 2

Readings sync automatically

  • Every reading lands in Apple Health with timestamp and meal context
  • Background sync runs for a few minutes after each connect
  • Manual entries supported when you can't pair the meter

Step 3

See your trends

  • Time in Range, average, CV%, estimated A1c (after ~14 days)
  • Meal-grouped averages and a 7/14/30/90-day trend chart
  • Add notes and meal markers to any reading

Always on hand

Widgets & Apple Watch

  • Home screen and lock screen widgets show your latest reading
  • Watch complication updates live when a sync arrives
  • Spotlight shortcut to log a manual reading
Where your feedback helps most

What to keep an eye on

No need to go through a checklist — just use the app normally. But if you're looking for things to try, these are the areas where your feedback matters most right now.

Priority 1

Bluetooth connection

  • Does your meter show up when you turn it on?
  • Does it reconnect automatically when you reopen the app?
  • Any missed readings or duplicate entries in Health?
  • Does it handle a mid-sync disconnect gracefully?

Priority 1

Apple Health accuracy

  • Do readings appear in Health after sync?
  • Are timestamps correct for your timezone?
  • Are values correct (compare to meter display)?
  • Any duplicate entries after a full resync?

Priority 2

Insights & stats

  • Do the 7/14/30/90-day filters work?
  • Does Time in Range match your expectations?
  • Are meal averages grouped correctly?
  • Does estimated A1c appear after 14+ days of data?

Priority 2

Widgets & Watch

  • Does the home screen widget update after sync?
  • Does the Watch complication show the correct value?
  • Does the stale indicator appear when the reading is old?

Priority 3

General usability

  • Any text that's hard to read or doesn't make sense?
  • Any buttons that don't respond or lead nowhere?
  • Does it work at large accessibility text sizes?
  • Anything that feels broken or confusing?

Priority 3

Your glucometer

  • Tell me your meter's make and model — I track compatibility
  • Does it connect on the first try or need multiple attempts?
  • Any meters that refuse to connect at all?
Works today

Supported devices

These meters have been tested end-to-end and sync reliably with Glucera. Any meter exposing the standard Bluetooth Glucose Service (0x1808) is likely to work — if yours isn't listed, give it a try and let me know either way.

Contour Next One

Supported

Ascensia · Standard GATT (0x1808)

Known issues

No known issues.

GlucoCheck Gold

Partially supported

aktivmed · Standard GATT (0x1808)

Known issues

  • Readings are only transmitted when the meter is powered off — not immediately after a measurement. Turn the device off to sync the latest reading.

OneTouch Verio Reflect (HCD7)

Supported

LifeScan · Proprietary Verio protocol

Known issues

No known issues.

Noticed something?

How to reach me

Whatever works for you. Even a one-liner like "X broke on my Contour Next One" is genuinely useful.

Already on it

Known issues

You might run into these — I'm aware and working on them. No need to report unless you have something new to add.

  • Known
    Widgets may take a few minutes to update after sync

    iOS widget refresh scheduling means the home screen widget sometimes shows the previous reading immediately after a sync. It will update within a few minutes without any action needed.

  • Known
    Some meters take 2–3 connection attempts on first pair

    On first connection, some glucometers need a couple of tries before the GATT handshake completes. Subsequent connections are faster. Force-quit and reopen if stuck.

  • Investigating
    Intermittent failure to read context packets on some Accu-Chek models

    A small number of testers report that meal context (Before/After Meal markers from the meter) isn't always captured correctly on Accu-Chek Guide. I'm looking into it. If you hit this, let me know your meter firmware version.

  • By design
    The app can't sync in the background continuously

    iOS limits background Bluetooth access. Glucera uses a 3-minute background window after connection and will reconnect when you open the app. Continuous background sync would require constant battery drain and is not planned.

What you're running

Current build

Glucera 0.0.1 Build 64
April 29, 2026

Fixed in this build

  • The Lock Screen and Dynamic Island Live Activity now shows your meter's actual name. Previously it was hardcoded to display "Contour Next One" no matter which meter was paired.
  • Removed the duplicate "Rename" row on the Glucometer detail sheet — tap the device name (with the small pencil glyph) to rename. The redundant button was leftover from before Build 62.

Improved in this build

  • Several alert and error screens that previously fell back to English now show in German or French — the "Re-pair your meter" recovery alert, the Bluetooth-off banner, the Manual Entry sheet, the device detail sheet, and the Bluetooth-off pairing state. Heads up if you're testing in a non-English locale.

What's in the app

  • Wireless BLE sync from any Bluetooth glucometer supporting GATT service 0x1808
  • All readings stored in Apple Health — no account, no cloud
  • Time in Range, average, CV%, estimated A1c, meal averages, trend chart
  • Apple Watch complication — updates in real time when a reading syncs
  • Home screen widgets (small & medium) and lock screen widget
  • Meal markers and free-text notes on every reading
  • Sync log with source tags (Auto / Manual / Background) in Settings
  • Onboarding with guided first-time pairing
  • English, German, and French localizations
0.0.1 Build 64
April 29, 2026

Fixed

  • Live Activity hardcoded the meter name as "Contour Next One" regardless of which meter was paired — non-Contour testers saw the wrong name in their Dynamic Island and Lock Screen. The activity is now created with DeviceStore.current()?.name, plumbed through both call sites (foreground sync snapshot and headless background sync), with a "Glucometer" fallback for the empty-pair edge case.
  • Duplicate "Rename" row in the Device detail sheet's Actions section was leftover from before Build 62's tap-the-name affordance shipped. Removed; the Status section's tap-the-name (with the small pencil glyph) is now the single rename path.

Improved

  • Localization gaps in alert and error paths closed for German and French. New L10n keys for the UUID re-link alert, the multi-sentence "Re-pair your meter" recovery alert, the Bluetooth-off banner with its Settings shortcut, the Manual Entry sheet (Glucose Value / Notes / Date & Time / out-of-range error / title), the Device detail sheet (Connected / Not connected, Debug section, row labels, Forget action and confirmation, Rename alert), and the Bluetooth-off state on the onboarding pairing screen. 28 new keys, all three locales updated and validated.
0.0.1 Build 63
April 27, 2026

Fixed

  • Crash on connect when a manual entry's synthetic timestamp-derived sequence number had been mis-attributed to a real meter by an earlier readHK pass. The next sync would compute seq = lastSeq + 1 (≈ 1.7 billion) and UInt8(seq >> 8) would trap with "Not enough bits to represent the passed value." Manual entries are now skipped when computing per-device max-sequence; out-of-range stored sequences are clamped to 16 bits and reset to 0; both syncTapped and the headless background sync path mask the byte values defensively.
  • Standard-meter connection robustness: encryption-insufficient errors on subscription or RACP write are now detected immediately and surface a dedicated "Re-pair your meter" alert with concrete recovery instructions, instead of waiting up to 40 s for the sync timeout. The error path also auto-triggers a 60-second UUID-repair scan so the app catches the meter advertising under a new identity after you put it back into pairing mode.

Improved

  • Standard 0x1808 service-discovery scope narrowed to [Glucose Service, OneTouch Verio] only — the unencrypted Device Information / Current Time reads we used for diagnostic logging were running alongside the encrypted-CCCD subscribe attempts and could interfere with the iOS bonding handshake on some Ascensia Contour models. Diagnostic prints ([BLE] …) now route through os.Logger so they reach Console.app and idevicesyslog, not just the Xcode debug console.
  • Background sync polling now stops when BLEsyncError fires, instead of continuing to issue doomed RACP writes every 10 s for 3 minutes against a meter whose bond is no longer trusted.
  • BLE driver hardening: doWrite short-circuits when the peripheral is not .connected; subscription retry is gated on connection state and prior encryption-error reporting; the OneTouch Verio handler is cleared on didDisconnectPeripheral and didFailToConnect for symmetry with the explicit disconnect path.
0.0.1 Build 62
April 26, 2026

Fixed

  • Duplicate readings that slipped through Build 61's narrow dedup window are now collapsed. The post-sync and HealthKit-load passes match on (BGMSequenceNumber, value) — meter-canonical, so the same physical reading is recognized whether it was reattributed to a different device UUID after the single-device migration, or written by a re-sync at a slightly different timestamp due to meter-clock drift. A minute-bucket fallback covers legacy records that pre-date sequence-number metadata.
  • First-run users with Bluetooth off now land on the "Pair Glucometer" empty state instead of an empty dashboard. Previously the dashboard appeared whenever allLogEntries carried any event message, even if no meter had ever been paired.

Added

  • Notes field on the Log Reading sheet — type a free-text note alongside the value, date, and meal context. Notes appear on the reading detail and the row pencil indicator just like notes on synced readings.
  • Big "+" button on the hero card. Logging a manual reading no longer requires opening the "…" menu first; the menu retains Resync All and Settings.
  • Manual entries are visually labeled with a purple "Manual" pill in the reading list, and the synthetic timestamp-derived sequence number that previously leaked into the row UI is now hidden for those entries (also hidden on the reading detail sheet).
  • Tap the device name on the Glucometer detail sheet to rename it — a small pencil glyph next to the name signals the affordance. The separate "Rename" row in the actions list is no longer required.
0.0.1 Build 61
April 25, 2026

Fixed

  • The Trend chart no longer renders every reading twice. Build 60's single-device migration kept HealthKit data attributed to forgotten meters, and the post-sync deduplication only matched on (deviceUUID, sequence), so the same physical reading could end up in the in-memory list under two different device IDs and double-render in the chart and statistics. Sync now also dedupes by (timestamp, value), and the chart / stats compute pass collapses any remaining collisions defensively. The reading list, hero, A1c, Time-in-Range, and widget snapshot all benefit.
0.0.1 Build 60
April 25, 2026

Added

  • Log a manual reading from inside the app. Open the "…" menu on the hero card and choose "Log Reading" to enter a value (in your preferred unit), date/time, and meal context. Useful for readings taken on a meter you can't pair, or to fill in a gap. Spotlight's "Log Reading" shortcut now opens the same sheet (it was previously a stub).

Changed

  • One paired meter at a time. With a meter paired, Settings → Glucometer shows status, last sync, sequence number, Rename, and Forget; you must Forget the current meter before pairing a different one. Anyone who paired more than one meter on a previous build keeps the meter they used most recently; readings from any other meters are preserved in Apple Health and continue to show in the list.

Fixed

  • Push notifications now show the value in mmol/L when that unit is selected — previously always rendered mg/dL regardless of preference.
  • The lock-screen widget and Live Activity now update immediately after an in-app sync, not only after a background sync — the foreground sync path was missing the widget timeline reload that the background path already had.
0.0.1 Build 59
April 24, 2026

Fixed

  • Dynamic Island and Live Activity now honor the mmol/L preference — previously the Live Activity always rendered mg/dL regardless of the in-app setting
  • Info help popovers (the small "i" buttons) no longer clip long text — the popover is now wider and scrollable, and text is left-aligned for readability
  • Opening the app from a widget no longer sometimes shows the empty "No Data" state when records are actually present — every foreground transition now refreshes from Apple Health, covering both cold-launch HealthKit authorization races and records written by the headless background sync
0.0.1 Build 58
April 24, 2026

Fixed

  • OneTouch Ultra Plus Reflect records now sync — the response parser tracks the pending command kind and interprets responses accordingly (instead of guessing by value), and the Flex-era record sanity check is relaxed because Reflect records carry non-zero Blood Sugar Mentor metadata in bytes 6-10
0.0.1 Build 57
April 24, 2026

Fixed

  • OneTouch Verio meters now sync correctly — the 10-second poll timer was firing standard RACP commands at the proprietary Verio characteristic, interfering with the Verio handler's own sync flow. Both the poll path and the manual Resync button now skip RACP when a Verio is active.
0.0.1 Build 56
April 24, 2026

Fixed

  • Hero card "Syncing…" label shows the ellipsis correctly (was showing literal "Syncingu2026")
  • Cancel button on the Connecting/Syncing screens so users can back out instead of waiting for the 15-second timeout
  • Done button on the pair-complete screen so users aren't stuck when zero records synced
  • Not Now button on the pairing screen to skip back to the empty app without pairing

Improved

  • OneTouch Verio sync has a 15-second timeout — if the meter doesn't respond, the sync fails cleanly instead of hanging forever
  • Sync errors now include full diagnostic data (device name, UUID, manufacturer, Bluetooth state, offending packet hex) in the sync log
  • Every Verio TX/RX packet is logged as hex for debugging
  • Background sync errors are saved and surface in the sync log when the app is next opened
0.0.1 Build 55
April 24, 2026

Fixed

  • OneTouch Verio meters now appear in the pairing list — scan was filtering for the standard glucose service only, excluding meters that advertise proprietary services
  • Pairing list now matches meters by name prefix (OneTouch, Contour, Accu-Chek, GlucoMen, CareSens, etc.) in addition to advertised service UUIDs
  • OneTouch Verio commands are serialized correctly — one at a time, waiting for ACK between writes
0.0.1 Build 54
April 24, 2026

Added

  • OneTouch Verio BLE protocol support — LifeScan meters that use the proprietary AF9DF7A1 service (Verio Flex, Verio Reflect, HCD7) now sync natively via the reverse-engineered protocol
0.0.1 Build 52
April 24, 2026

Fixed

  • BLE reconnection restored to pre-queue behavior — subscriptions fire first to trigger encryption handshake
  • Subscription retry loop removed — errors are logged but don't block the sync flow
  • Debug panel is now scrollable, live-updating, and capped at 50 devices

Added

  • Scan diagnostics: unfiltered BLE scan shows all nearby devices for debugging invisible meters
  • Share Scan Report exports device info, Bluetooth state, all nearby devices, and sync log
  • Bluetooth-off detection with red indicator and Settings shortcut on pairing screen and main app
0.0.1 Build 48
April 23, 2026

Fixed

  • Reconnecting to a meter after the initial pairing now works reliably — GATT queue state was not reset between connections, causing the operation queue to get stuck
0.0.1 Build 47
April 23, 2026

Fixed

  • GATT measurement parser now uses flag-conditional byte offsets — fixes misread glucose values on meters that omit optional fields (time offset, sensor status)
  • Control solution readings (type nibble 10) are now filtered out
  • BLE GATT operations are serialized via a queue — one op at a time per peripheral, as required by the spec

Added

  • Clock sync: reads the meter's Current Time service on connect and applies the offset to all parsed timestamps
  • Manufacturer name read from Device Information service for diagnostics
0.0.1 Build 46
April 23, 2026

Fixed

  • Meters that require a PIN/passkey for pairing now work — iOS shows the system pairing dialog automatically and the sync starts after authentication completes

Improved

  • Pairing screen has a collapsible Debug panel showing Bluetooth state, discovered peripherals with RSSI and advertised services, saved devices, and connectable status
  • All BLE errors (connect, disconnect, discovery, subscription) are now logged instead of silently ignored
0.0.1 Build 45
April 22, 2026

Fixed

  • Second meter no longer inherits the sequence number of the first — each device now tracks its own sync cursor independently

Improved

  • Sync log now shows the device name on each event
  • RACP commands and raw GATT record bytes logged as copyable monospace hex for debugging
  • Diagnostics export includes device name and raw hex for each event
0.0.1 Build 42
April 22, 2026

Added

  • Notifications now show the meter name as the title instead of "Glucera"
  • Large home screen widget shows the meter name in the header
0.0.1 Build 41
April 22, 2026

Fixed

  • First sync with a new meter now requests all stored records instead of filtering by sequence number — fixes GlucoCheck Gold and other meters that don't support the optional RACP sequence filter operator
0.0.1 Build 40
April 21, 2026

Fixed

  • Widgets and watch complications now update reliably after a background sync — previously the new reading was written but not flushed to the shared container before the extension read it
0.0.1 Build 38
April 20, 2026

Fixed

  • Rectangular lock screen widget no longer truncates the app name and glucose value — text now scales down instead of clipping

Added

  • Live Activity toggle in Settings — disable the Dynamic Island and Lock Screen live display if you don't need it; turning it off immediately dismisses any running activity
  • Watch complications show a subtle background tint based on glucose status — green for in range, red for low, orange for high
0.0.1 Build 23
April 19, 2026

Fixed

  • Widget now shows the glucose value clearly even when the reading is stale — previously the dimmed stale style made it nearly invisible on the dark background
0.0.1 Build 22
April 19, 2026

Fixed

  • Stats card now updates immediately after the first sync without needing to collapse and re-expand it
  • Sync log now opens instantly from Settings without requiring Settings to be dismissed first
0.0.1 Build 21
April 19, 2026

Fixed

  • Watch complication now updates in real time when a reading is synced from the phone — previously the value only refreshed when the Watch app was foregrounded

Added

  • Sync log entries now show a source tag (Auto / Manual / Background) so you can see how each sync was triggered
  • Background syncs that happen while the app is not running are captured and shown in the sync log when you next open the app

Improved

  • CSV Export and Sync Log moved from the ellipsis menu into Settings → Data
0.0.1 Build 20
April 19, 2026

Fixed

  • Widget now updates immediately after a background sync, not only when you open the app
  • Duplicate readings no longer appear in the list when the same reading was synced under a different device identifier in a previous app version
0.0.1 Build 18
April 18, 2026

Fixed

  • Meters that sent an error response over RACP no longer incorrectly trigger a data delivery callback
  • A second paired meter connected during an active sync is now properly queued — previously it would stay connected but never receive data

Improved

  • Sync polling starts at 10s after a meter connects so new readings feel near-instant; automatically slows to 30s once a reading has been received
0.0.1 Build 14
April 17, 2026

Fixed

  • Sharing a single reading now works — tapping the share button in the reading detail view opens the iOS share sheet correctly
  • Device manager and device detail sheet now correctly show "Not connected" when the glucometer is off or out of range
  • Info popovers (question mark buttons) now appear as small anchored bubbles instead of full-screen sheets
0.0.1 Build 13
April 16, 2026

What's new

  • Connection info is now subtle: no top banner, no persistent sync button — status appears as a quiet suffix on the hero timestamp ("Syncing…", "Ready for connection", "Connected ✓")
  • Tapping the glucose value at the top opens the detail view for the latest reading
  • Sync log available under the ellipsis menu — shows timestamped events from the current session
  • Send Diagnostics in Settings shares device info and sync events (no glucose data) via the system share sheet
  • Haptic feedback on connect and sync complete, with a toggle in Settings to disable

Improved

  • Reconnect logic retries indefinitely while the app is open instead of giving up after 3 attempts
  • Device detail sheet updates connection state live (was showing a stale snapshot)
  • All fixed font sizes replaced with Dynamic Type-aware styles — text scales correctly at larger accessibility sizes
  • eA1c figure moved inside the Statistics card rather than floating below the insights section
0.0.1 Build 3
April 11, 2026

What's new

  • Watch complication now shows the glucose value color-coded (green = in range, red = low, orange = high)
  • Watch complication shows a stale indicator (warning icon, gray value) when the reading is more than 8 hours old
  • Meal type in the reading detail view is now tappable — tap to change the meal marker for any reading
  • Onboarding now includes a guided "Pair Your Glucometer" step with live device discovery and first sync
  • After onboarding, the main UI (hero card, insights, reading list) is shown instead of a blank scanner screen
  • Empty state includes a "Pair Glucometer" button and shows nearby device count

Fixed

  • French localization added across app, widget, Watch app, and complication
  • Swift 6 strict concurrency compliance in background sync pipeline
  • First launch no longer auto-shows scanner over the main UI
0.0.1 Build 1
April 10, 2026

Initial beta release

  • Blood glucose sync from Bluetooth glucometer via BLE GATT
  • HealthKit integration — readings stored as HKQuantitySample with full metadata
  • Time in Range, average, CV%, std dev, estimated A1c, meal averages, trend chart
  • Home screen widget (small, medium, lock screen) and Apple Watch complication
  • Meal marker and note on every reading — editable from list and detail view
  • Target range configuration with ADA presets
  • English, German, and French localizations across app, widget, Watch app, and complication
Install

Get the app

Tap the link below to open Glucera in TestFlight. You'll get every update automatically as I ship new builds.

Install via TestFlight

Requires iPhone with iOS 17 or later.
TestFlight is Apple's official beta distribution platform.

Open TestFlight

Don't have TestFlight? Install it from the App Store first — it's Apple's official beta testing app and is free. Once you have TestFlight, the link above will take you straight to Glucera.

Appreciate you being here.

Every "this felt off" or "my meter didn't connect" makes the app better for everyone who'll use it after launch. I read everything.