Dominic Kennedy

DOSBTS: Fork to TestFlight in One Session

SwiftOpen SourceHealth Tech

Forking an open-source diabetes app, renaming 149 files, fighting code signing, and shipping to TestFlight. The surprisingly satisfying start of a retro health tool.

Why fork a diabetes app?

The vision: a diabetes management tool with a DOS amber CGA aesthetic. Black backgrounds, amber text, retro terminal vibes — but tracking real blood glucose data from a .

Building from scratch would take months. GlucoseDirect, an open-source app by creepymonster, already does the hard part: reading CGM data, displaying trends, managing alerts. It's , built with SwiftUI, and uses a clean . Fork it, rebrand it, transform the UI later.

First build: it just works

Opened the Xcode project. Let resolve GRDB.swift 6.29.3. Hit build.

BUILD SUCCEEDED. Zero errors on the simulator.

That's the sign of a well-maintained codebase. The upstream project is solid — , SwiftUI for the interface, a single SPM dependency. Respectfully built software.

The Great Rename

GlucoseDirect was already taken on TestFlight (it's the upstream app). We needed our own identity: DOSBTS — DOS Blood Testing System.

The audit found 149 files with references to "GlucoseDirect", "LibreDirect", or "Glucose Direct":

  • 119 Swift files (header comments)
  • 26 localization files (display names in 13 languages)
  • 35 references in the
  • Scheme files, xcconfig files, class names

had to be systematic:

  1. Localization strings: "Glucose Direct" to "DOSBTS" (26 files)
  2. Swift classes: GlucoseDirectApp to DOSBTSApp, delegate to match
  3. Header comments across all 119 Swift files
  4. Config files: GlucoseDirect.xcconfig to DOSBTS.xcconfig
  5. Xcode project internals: pbxproj (longest strings first)
  6. Scheme files renamed and contents updated
  7. .xcodeproj directory renamed last

148 files changed, 236 insertions, 236 deletions. Build succeeded on the first try.

Signing hurdles

Archiving hit a wall: "Personal development teams do not support Time Sensitive Notifications, NFC Tag Reading, and HealthKit Access."

These are inherited from GlucoseDirect — it needs NFC to read Libre sensor tags directly, HealthKit for health data, and Time Sensitive Notifications for urgent alerts. DOSBTS doesn't need any of these yet. Strip them, keep for the widget, archive again.

Success.

The milestone

Product > Archive > Distribute > App Store Connect > Upload.

Created the app record as "DOSBTS" with bundle ID com.cinimody.eatthisidie. Uploaded. Waited for processing. And there it was in TestFlight.

DOSBTS is live on the phone. It's still GlucoseDirect under the hood — same UI, same features, same everything. But it builds, it signs, it distributes. The foundation is laid.

What's next

The real work starts now:

  • Audit — decide what to keep from GlucoseDirect, what to strip
  • DOS aesthetic — black backgrounds, amber text, SF Mono, the full CGA treatment
  • alignment — bring it into the design system
  • Food logging — the feature GlucoseDirect doesn't have, the whole reason for this fork

The fork-to-TestFlight pipeline took a single session. The transformation into something distinctly DOSBTS will take many more. But every session starts with a working app on a real device, and that changes everything about how you iterate.