Skip to content

Next dev#454

Open
ps2 wants to merge 137 commits into
devfrom
next-dev
Open

Next dev#454
ps2 wants to merge 137 commits into
devfrom
next-dev

Conversation

@ps2

@ps2 ps2 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

This branch is a holding ground for the next major set of features to land in dev.

It includes the Tidepool Sync (#450) and will be updated to include LibreLoop (Libre 3/3+ integration) and other new integrations.

loopkitdev and others added 30 commits March 12, 2026 15:50
- Point all 18 submodule URLs to https://github.com/loopkitdev/* forks
- Minizip and TrueTime.swift retain LoopKit origin (no forks)
- Add docs/tidepool-sync-2026-03-10.md (Tidepool sync documentation)
…ce docs

- Update all 17 submodule commit pointers to reflect rewritten history
  (filter-branch changed SHAs when fixing author to LoopKit Developer)
- Add Loop build fix commit (LoopDataManager init ordering)
- Add LOOPKIT_SYNC_PROCESS.md, SYNC_PROGRESS.md, sync-docs/
Catches the superproject up to all submodule work that has accumulated
on tidepool-sync/2026-03-10 since the initial sync commit, including:

- Loop: restore manual dose entry "+" button on insulin delivery screen
- LoopKit, NightscoutService, TidepoolService, LibreTransmitter:
  string catalog updates from Xcode build
- OmniKit: fix reentrant lock crash in isSignalLost
- Various submodules: merge upstream/{dev,main} into tidepool-sync branch
Parallel fix to OmniKit 924f10d — OmniBLE had the identical bug where
isSignalLost() read state.lastPumpDataReportDate from inside a
lockedState.mutate closure, causing recursive lock acquisition.
Tier 1
- LoopKit: bd30c463 (409 commits from tidepool/dev; 18 source conflicts + 19
  pbxproj regions resolved; DIY divergence preserved at BasalRateScheduleEditor)
- Loop: 76b6b1e3 (14 commits from tidepool/dev; 3 pbxproj regions)

Tier 3 - CGM drivers
- CGMBLEKit: 69562e7
- G7SensorKit: d024513
- dexcom-share-client-swift: 541de2f
- NightscoutRemoteCGM: b1ea9ee
- LibreTransmitter: c99daf1

Tier 3 - Pump drivers
- RileyLinkKit: 19f5ae8
- OmniKit: b3b6080 (preserves reentrant lock fix; adopts mutateState)
- OmniBLE: 645e0fc (preserves reentrant lock fix and Pod Keep Alive suspend
  special case; adopts mutateState)
- MinimedKit: f994d6e (preserves CAGE/IAGE tracking)

Tier 3 - Services
- TidepoolService: 5f6a064 (incl. DoseEntry dedupe follow-up)
- NightscoutService: 1b5cded (preserves APNS response feature)
- AmplitudeService: 77dae3e
- LogglyService: 8e18081
- MixpanelService: unchanged (already up to date with tidepool)

Tier 3 - Support/Onboarding
- LoopSupport: a312dfb
- LoopOnboarding: fd7e410

Package.resolved
- LoopAlgorithm: tidepool-org/LoopAlgorithm bd1a879 (4 test-only commits)
docs/tidepool-sync-2026-05-11.md describes the merge, conflicts, and
divergences. SYNC_PROGRESS.md updated to reflect the new branch and the
divergences carried forward.
Pulls in 3 small origin/dev updates that landed after this sync started:
- Loop: PR #2410 Live activity plot fixes (manual merge to preserve our
  post-Tidepool-sync API: kept async/await sample fetch + LoopUnit
  signature, adopted upstream's presetStart<=presetEnd guard and the
  adjustedChartStart/End helpers)
- CGMBLEKit: PR #211 handle inactive CGM sensor sessions (clean merge)
- OmniBLE: Lokalise translation update (clean merge)
Pulls in the new loopkitdev/LibreLoop repo (initial scaffold at 55b65d6),
registers its xcodeproj in the workspace, and adds LibreLoopPlugin to the
LoopWorkspace scheme so copy-plugins.sh embeds the .loopplugin bundle into
Loop.app/Frameworks. With this in place Loop's CGM picker surfaces a
"FreeStyle Libre 3" entry and runs the plugin's onboarding flow.

No changes to Loop or LoopKit are required — discovery is purely via
PluginManager's Info.plist scan.
Bumps the LibreLoop submodule pointer to the head of main, covering:
- onboarding restructure (Apply -> Scan)
- LibreCRKit SwiftPM dep + vendored phone_cert_162b
- candidate Phase 5 handshake
- BLE PIN persisted before BLE auth
- in-session glucose streaming + monitor
- redesigned status screen, lifecycle bar, last-N readings table
- always-retrying reconnect + per-attempt scan timeout
- post-pair backfill via PatchControlCommand
- adopted upstream Libre3GlucoseQualityAssessment API
- Pair-new-sensor flow, persisted latestSample
- BLE state restoration via shared scanner + retrievePeripherals
ps2 and others added 4 commits June 3, 2026 11:56
- LibreLoop -> 84d7435 (reconnect safety, clinical-only backfill, sensor
  events, in-app log viewer)
- Loop -> a29b6bab (alerts FAQ for no-entitlement builds, watch icon fix,
  orphan asset cleanup)
- Add LibreCRKit as a submodule pinned to upstream airedev326 (aeb11d2),
  replacing the remote SPM dependency with a local workspace package.
@marionbarker

marionbarker commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Test

Built this version over an app that was running the old tidepool-sync/2026-05-11 branch from #450.
✅ the app looks nominal - I did not do thorough testing.

Issue with new build

As before - it took a couple of tries for the build with Xcode 26.5 to succeed. I just hit build again and it eventually found all the items it needed to finish the build.

I will test a browser build to make sure that succeeds.

@marionbarker

Copy link
Copy Markdown
Contributor

Browser Build Test

✅ successful build
✅ successful install from TestFlight

@Trpl7ca

Trpl7ca commented Jun 5, 2026

Copy link
Copy Markdown

Failed to build with Xcode, 26.5 to iPhone 17pro simulator. Tried 4 times and last two received same failures
Screenshot 2026-06-05 at 15 30 44

marionbarker and others added 8 commits June 6, 2026 13:46
…ization

- LibreCRKit: per-op BLE timeouts (already upstream 5712710)
- LibreLoop: silent-link watchdog + reconnect robustness
- NightscoutRemoteCGM: optional API Secret localized strings
add OmnipodKit submodule to the next-dev branch
- LoopKit: bump c5a5beb9 -> 4490dddb (latest loopkitdev/LoopKit next-dev).
- EversenseKit: add submodule (LoopKit/EversenseKit loop-next-dev @
  2aab7f9) -- adapted to current LoopKit CGMManager API + SwiftUI
  Picker. Forked to the LoopKit org since bastiaanv's repo is upstream
  we don't control.
- MedtrumKit: add submodule (loopkitdev/MedtrumKit loop-next-dev @
  3b3af0c) -- LoopKit API compat + decisionId threading + voltage
  formatter; mirrors loopandlearn/MedtrumKit#2.
- Workspace + scheme: add EversenseKit/MedtrumKit FileRefs and
  BuildActionEntries so both build as part of LoopWorkspace.

LoopWorkspace scheme builds clean on Xcode 26.5 / iOS 17 simulator.
OmnipodKit replaces both legacy Omnipod drivers, matching upstream
LoopKit/dev 3.14.2. Removes:
- OmniBLE + OmniKit submodules (.gitmodules + gitlinks)
- their .xcodeproj FileRefs from the workspace
- their plugin BuildActionEntries and *Tests TestableReferences from
  the LoopWorkspace scheme

Loop loads pump drivers as plugins and has no compile-time reference to
either, so the app builds clean without them.
Follow-up fix to 1ffa139, which added the submodules/gitlinks but
silently dropped the workspace and scheme edits (they were never
staged before commit, then discarded with the worktree). As a result
neither MedtrumKitPlugin nor EversenseKitPlugin was being built, so the
drivers weren't embedded/offered by Loop.

This commit adds:
- the .xcodeproj FileRefs in LoopWorkspace.xcworkspace
- the plugin BuildActionEntries in the LoopWorkspace scheme

Verified both MedtrumKitPlugin.loopplugin and EversenseKitPlugin.loopplugin
now build into the products dir (parity with OmnipodKit); the existing
Install Plugins phase globs *.loopplugin so embedding follows.
@marionbarker

Copy link
Copy Markdown
Contributor

Test

LoopWorkspace commit b643e2a

  • I think there is still a missing configuration for EversenseKit

I successful built and both Eversense and Medtrum are shown as options for CGM and Pump respectively.

  • ✅ Medtrum was successfully selected and a patch was primed and activated
  • ❌ Eversense can be selected, but then it returns to the main screen (no CGM selected)
    • Xcode says
    • Error loading /var/containers/Bundle/Application/863A60E7-851D-448B-9A15-7027D0E9383B/Loop.app/Frameworks/EversenseKitPlugin.framework/EversenseKitPlugin (139): dlopen(/var/containers/Bundle/Application/863A60E7-851D-448B-9A15-7027D0E9383B/Loop.app/Frameworks/EversenseKitPlugin.framework/EversenseKitPlugin, 0x0109): Symbol not found: _swift_coroFrameAlloc
    • etc
    • 2aab7f9d10254655bd266991b266b92980afa454 EversenseKit (remotes/origin/loop-next-dev)

loopkitdev and others added 14 commits June 10, 2026 11:49
# Conflicts:
#	.gitmodules
#	Loop
#	LoopKit
#	LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved
#	NightscoutRemoteCGM
Integrate LibreLoop (Libre 3 CGM) + glucose alarms onto next-dev
Resolves PR #454 conflicts between the next-dev integration branch and
the 3.14.2 release line:

- Loop / LoopKit: clean sub-merges of dev's commits into next-dev's
  (Loop: OmnipodKit-support DeviceDataManager change; LoopKit: 3.14.2
  localization updates), pushed to the loopkitdev forks' next-dev.
- OmnipodKit: keep next-dev's f529581a (already contains dev's pin).
- EversenseKit / MedtrumKit: keep next-dev's adapted forks
  (LoopKit/EversenseKit, loopkitdev/MedtrumKit) over dev's upstream
  pins; both build against current LoopKit.
- .gitmodules: keep next-dev's loopkitdev fork URLs + the libre
  additions (LibreLoop, LibreCRKit) + LoopAlgorithm submodule.
- Scheme: keep next-dev's Medtrum/Eversense plugin BuildActionEntries
  and add dev's MedtrumKitTests TestableReference.
- VersionOverride: keep 3.15.0 (next-dev) over dev's 3.14.2.

Brings in dev's 3.14.2 release infra (Xcode 26.4 CI, fastlane 2.335.0,
scripts, kit tests). Full LoopWorkspace scheme builds clean.
CI couldn't clone https://github.com/loopkitdev/LibreLoop.git (that
repo no longer exists -- it's now LoopKit/LibreLoop_old). The canonical
fork is LoopKit/LibreLoop, which is public and already contains the
pinned commit bb2f1e54, so only the URL changes -- the gitlink is
unchanged.
The Xcode 16 Swift type-checker times out on LibreCRKit's crypto
expressions ("unable to type-check this expression in reasonable
time"); Xcode 26 compiles them fine. Aligns CircleCI with the GitHub
Actions workflow, which already runs Xcode 26.4 on macos-26.

Also removes the hardcoded OS=18.5 from the simulator destination --
the Xcode 26 image ships iOS 26.x simulators, so pinning 18.5 would
fail to find a matching destination.
In the CircleCI Xcode 26.4 image the iPhone 16 family only exists on
iOS 18.6; the iOS 26.4.1 runtime ships the iPhone 17 family. With the
OS unpinned (latest = 26.4.1), iPhone 16 had no match. iPhone 17 is
present at 26.4.1, matching the local build destination.
loopandlearn/OmnipodKit loop-next-dev HEAD (f529581a) has a test that
fails to compile -- UnfinalizedDose's bolus init now requires
decisionId but PodCommsSessionTests wasn't updated, breaking the CI
`test` step. Points OmnipodKit at loopkitdev/OmnipodKit loop-next-dev
@ d03b34d (f529581a + the one-line test fix); upstream PR is
loopandlearn/OmnipodKit#77. Revert to loopandlearn once that merges.
…continuous decay, sorted appendedUnion input)
LoopWorkspace scheme now passes: 1242 tests, 0 failures.
xcpretty rendered every test as passing while xcodebuild itself exited
65 (set -o pipefail propagated the code, so the job correctly went red,
but the failing tests were invisible in the log). xcbeautify preserves
the exit code and prints the failing-test detail. Also emit a JUnit
report + store_test_results so failures show in the Tests tab.
…data))

Fixes RawSpan build errors for anyone whose CryptoSwift resolves to
1.9.0/1.10.0 on the Xcode 26 SDK. Verified building against 1.10.0.
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.

4 participants