Skip to content

Bump submodules and version to 3.15.2 - #485

Open
ps2 wants to merge 7 commits into
next-devfrom
bump/next-dev-3.15.2
Open

Bump submodules and version to 3.15.2#485
ps2 wants to merge 7 commits into
next-devfrom
bump/next-dev-3.15.2

Conversation

@ps2

@ps2 ps2 commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Brings in the five submodules with merged work and bumps the marketing version.

Submodules

submodule from to what
OmnipodKit 4763ce6 d58b11f eager connect watchdog for InPlay/iPhone-16 wedges, plus the O5 fresh-advert connect fix and the foreground-seed fix (#133); InPlay connection strings added to the catalog (#140)
LoopKit c4a8f64 6083d81 survive a persistent store that fails to load (#606); fix infinite loop applying an override that ends on an entry boundary (#608); Xcode 27 fix (#605); declare LoopKitUI as a LoopKitTests dependency (#609, test wiring only)
G7SensorKit 468eefc fb87aa9 defer forgetting the sensor on a suspected session end (#63)
Loop c4d89c0 bc4d79f fix CarbMath preconditionFailure when a carb entry predates the ISF window (#2489); mark two removed pre-meal strings stale (#2500)
LibreTransmitter a38975d 6058dd2 add device manufacturer field (#41); make glucose smoothing configurable; smoothing and every-minute reading strings added to the catalog (#50)
RileyLinkKit 8a3164b 8ba261c make autoConnectIDs safe to read off centralQueue, fixing a crash when toggling a RileyLink switch (#16, closes Loop#2462)
TrueTime.swift d140b0f 5dc1285 raise iOS deployment target 12.0 -> 15.0, required to build under Xcode 27

LibreTransmitter was not on the original list for this bump — it had two commits waiting on its next-dev, so it is included here. Flagging it because the glucose smoothing change is behaviour-affecting and may want its own attention.

LibreLoop e4a46429e5c3fc: 18 new keys plus a one-time catalog normalisation (#10). Its display-only forward throttle was bumped separately in 3e74b97.

Three crash fixes worth calling out

LoopKit #608 fixes an infinite loop that presented as an allocation-failure crash while entering a manual glucose value. Reachable whenever an active override meets the manual bolus screen with no dose in flight — which a CGM outage long enough to outlast the last temp basal produces reliably.

LoopKit #606 stops a Core Data migration that loses a race with the widget extension from turning into a crash loop. Relevant to any release that changes the model, since that migration runs on first launch after upgrade.

RileyLinkKit #16 fixes a long-standing data race behind unrecognized selector sent to instance 0x8000000000000000 when a RileyLink switch is toggled repeatedly. Shared by every RileyLink-based pump manager. Note this one is reasoned from the call sites rather than reproduced on device — the race surfaces probabilistically, so it is worth someone repeating the toggle test on a build carrying it.

Version

LOOP_MARKETING_VERSION  3.15.1 -> 3.15.2
CURRENT_PROJECT_VERSION 58     (unchanged)

Xcode 27

LoopKit#605 exists to satisfy Xcode 27, so this branch was built with it — Xcode 27.0 beta, build 27A5237l, the same toolchain testers are reporting from.

That surfaced a second, unrelated blocker. The build failed before reaching any of our code:

TrueTime.xcodeproj: error: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET'
is set to 12.0, but the range of supported deployment target versions is
15.0 to 27.0.x. (in target 'TrueTime-iOS')

Our TrueTime pin predated upstream's bump deployment (#3), which raises the target to 15.0 and changes nothing else. Bumping it fixes the build. Xcode 26 was unaffected, which is why this went unnoticed — and why testers already on Xcode 27 are already on the newer TrueTime commit.

String catalogs

@marionbarker flagged in review that four submodules had uncommitted Localizable.xcstrings after a build. Two carried real user-facing strings that had never reached translation, and both are now committed upstream and picked up here:

  • OmnipodKit — the "Slower Connections Expected" and "Reduced Background Wake-Ups" notice rows and the InPlay connection info screen, 15 keys from Update build_loop.yml #133
  • LibreTransmitter — "Every-minute readings", "Enable for Libre 2 / Libre 2 Plus", and the smoothing description

All four are now committed upstream and picked up here:

  • OmnipodKit (#140) — the "Slower Connections Expected" and "Reduced Background Wake-Ups" notice rows and the InPlay connection info screen, 15 keys from Update build_loop.yml #133
  • LibreTransmitter (#50) — "Every-minute readings", "Enable for Libre 2 / Libre 2 Plus", and the smoothing description
  • LibreLoop (#10) — 18 new keys, including a sensor-check alert and the packet-inspector and chart explanatory text
  • Loop (#2500) — two removed pre-meal strings marked stale; grep confirms neither is referenced in source any more

LibreLoop's diff looked at first like pure churn, but separating it showed 18 genuinely new keys against 162 entries that were only reformatted. That reformatting is a one-time serialiser normalisation — current Xcode writes xcstrings with a space before the colon and keys sorted alphabetically — and is not specific to Xcode 27: OmnipodKit's catalog was already in the new format and stayed clean under Xcode 26.

After these bumps a rebuild leaves every catalog clean, so the committed content matches what the build produces and the churn does not recur.

Verification

toolchain result
Xcode 26.6 (17F113) BUILD SUCCEEDED
Xcode 27.0 beta (27A5237l) BUILD SUCCEEDED, after the TrueTime bump

19 plugins. Version confirmed in the built app rather than just the config file:

CFBundleShortVersionString  3.15.2
CFBundleVersion             58

Not installed to a device from this exact tree; the constituent changes have had device time individually.

ps2 added 2 commits August 28, 2026 21:17
OmnipodKit  4763ce6 -> 366380d  eager connect watchdog (#133)
LoopKit     c4a8f64 -> 011a3db  persistent store (#606), override loop (#608)
G7SensorKit 468eefc -> fb87aa9  suspected session end grace (#63)
Loop        c4d89c0 -> 3ab37d5  CarbMath preconditionFailure (#2489)
LibreTransmitter a38975d -> c192a2f  device manufacturer field (#41),
            configurable glucose smoothing

LOOP_MARKETING_VERSION 3.15.1 -> 3.15.2. CURRENT_PROJECT_VERSION left at
58.
Picks up "Xcode 27 Fix" (#605): isDurationPickerExpanded in
CreatePresetNameAndScheduledEdit is declared without an inline initial
value, which Xcode 27 requires here.
@marionbarker

Copy link
Copy Markdown
Contributor

Test

❌ does not build in current configuration with Xcode 27
❓ some submodules should have updated Localizable.xcstrings committed

Method

confirm this branch is compatible with Xcode 27, builds and uses the desired submodule SHA

  • pull the bump/next-dev-3.15.2 locally and build using Xcode 27 beta 5
  • the submodules highlighted in the table above are confirmed
  • I got build failure because TrueTime.swift needs to be bumped to point to master (at least)
    • Right now master has 2 of 4 values of IPHONEOS_DEPLOYMENT_TARGET updated to 15.0 (Xcode 27), the others are still at 12.0
  • After building, do any of the submodules have updates to the xcstrings files?
    • Yes - the following submodules need to have updated xcstrings added
    • This is not a blocker, but should be cleaned up:
      • LibreLoop
      • LibreTransmitter
      • Loop
      • OmnipodKit

ps2 added 2 commits August 30, 2026 13:05
Building with Xcode 27 (27A5237l) failed before reaching any of our
code:

  TrueTime.xcodeproj: error: The iOS deployment target
  'IPHONEOS_DEPLOYMENT_TARGET' is set to 12.0, but the range of
  supported deployment target versions is 15.0 to 27.0.x.
  (in target 'TrueTime-iOS')

Upstream fixed this in "bump deployment (#3)", which raises the target
from 12.0 to 15.0 and changes nothing else. Testers already building
with Xcode 27 are on that commit.

Xcode 26 was unaffected, which is why this went unnoticed.
Picks up #609: LoopKitTests now declares its dependency on LoopKitUI.
Test-target wiring only, 15 lines of project file, no source or product
change.
OmnipodKit       366380d -> d58b11f  InPlay connection strings (#140)
LibreTransmitter c192a2f -> 6058dd2  glucose smoothing and every-minute
                                     reading strings (#50)

Both were added by earlier work but never had the regenerated catalog
committed, so the strings had not reached translation. Raised by
@marionbarker in review. Catalog content only, no source change.
@ps2

ps2 commented Aug 30, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @marionbarker — both points addressed.

TrueTime / Xcode 27. Fixed in 97cbbfc, which landed after you tested. Your observation that only 2 of 4 IPHONEOS_DEPLOYMENT_TARGET values are raised on master is accurate; the two still at 12.0 belong to TrueTimeExample, the sample app, which LoopWorkspace never builds. The two that are raised are the framework targets we consume, which is why the workspace now builds clean. Worth reporting upstream so the example app isn't left broken in Xcode 27, but it doesn't affect us.

The branch is now verified on both toolchains — Xcode 26.6 (17F113) and Xcode 27.0 beta (27A5237l), the same build you were using.

xcstrings. Two of the four had real user-facing strings that had never reached translation, both now committed upstream and picked up here:

I left Loop and LibreLoop alone deliberately. Loop produced only two "extractionState" : "stale" markers with no content, and LibreLoop produced a ~1,100 line diff that is overwhelmingly reordering and extractionState flips rather than new strings — committing that would bury real changes in future diffs. Happy to take those too if you'd rather have them clean.

After bumping, a rebuild leaves both catalogs clean, so the committed content matches what the build regenerates.

LibreLoop e4a4642 -> 9e5c3fc  18 new keys plus a one-time serialiser
                              normalisation (#10)
Loop      3ab37d5 -> bc4d79ff two removed pre-meal strings marked stale
                              (#2500)

Completes the catalog cleanup @marionbarker raised. All four submodules
now regenerate clean: a rebuild after these bumps leaves no catalog
dirty.
@marionbarker

marionbarker commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

edited because I was testing an older version: a82069d, will repeat the test.

I'm ok leaving the xcstrings not commited for now, especially because the file that change for Loop depend on whether Xcode 26.6 or 27 beta 5 is used. I'm downloading beta 6 now. Still no 27 RC available yet and I know things can change.

✅ successful build to SE 3rd gen phone running iOS 26.6.1

We probably want to pick up the RileyLink fix too. I'll test that next.

@marionbarker

Copy link
Copy Markdown
Contributor

Repeated test build with updated commit

✅ successful build with commit 4bf44ef onto SE 3rd gen test phone running iOS 26.6.1

Picks up #16: shouldConnect(to:) and connectingCount read
autoConnectIDs from the main thread while centralQueue mutates it, which
tore the Set and crashed with "unrecognized selector sent to instance
0x8000000000000000" when a RileyLink switch was toggled repeatedly
(LoopKit/Loop#2462). The property is now backed by a lock.

Affects MinimedKit, OmniKit and OmnipodKit with Omnipod Classic, which
share the provider.
@ps2
ps2 requested review from itsmojo and marionbarker August 30, 2026 22:43
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.

2 participants