From 115e7b3c3dbb031e222831c5011f09a9d8a44f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge?= Date: Mon, 2 Nov 2026 11:29:51 +0100 Subject: [PATCH 1/8] Bump Loop: declare bluetooth-peripheral through Info.plist preprocessing Watch plugins that publish a Bluetooth service need the bluetooth-peripheral background mode. It is on by default; uncommenting INFOPLIST_PREPROCESSOR_DEFINITIONS in LoopConfigOverride.xcconfig leaves it out. Loop points at the fork until its PR is merged. --- .gitmodules | 3 ++- Loop | 2 +- LoopConfigOverride.xcconfig | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 717ffc71b4..df25b6b49a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,7 @@ [submodule "Loop"] path = Loop - url = https://github.com/LoopKit/Loop.git + url = https://github.com/bjorninge-no-personal/LoopPebble.git + branch = smartwatch-manager-review [submodule "LoopKit"] path = LoopKit url = https://github.com/LoopKit/LoopKit.git diff --git a/Loop b/Loop index 29928c1c5f..768106b374 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 29928c1c5feb69fb0e778fe94584bbd453d42c4c +Subproject commit 768106b374fcfd803d37049aa404135efc5850db diff --git a/LoopConfigOverride.xcconfig b/LoopConfigOverride.xcconfig index fac2d9ba08..5605c504eb 100644 --- a/LoopConfigOverride.xcconfig +++ b/LoopConfigOverride.xcconfig @@ -12,6 +12,9 @@ // Set this to how many days you want to keep data locally on the phone //LOOP_LOCAL_CACHE_DURATION_DAYS = 90 +// Uncomment to build without the bluetooth-peripheral background mode that watch plugins need +//INFOPLIST_PREPROCESSOR_DEFINITIONS = + // Features SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) EXPERIMENTAL_FEATURES_ENABLED SIMULATORS_ENABLED ALLOW_ALGORITHM_EXPERIMENTS DEBUG_FEATURES_ENABLED From d4f1e5d9085cf87e098798ae146ef8c0c8a7314a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge?= Date: Mon, 2 Nov 2026 11:29:51 +0100 Subject: [PATCH 2/8] Add watch plugins and the Pebble plugin (LupedSmartwatchKit) LoopKit's SmartwatchManager plugin type and Loop's host, with the LupedSmartwatchKit submodule, its projects in the workspace and its plugin bundle in the LoopWorkspace scheme. elbbepTransport (Swift package, tagged releases) is the Bluetooth link to the Pebble. LoopKit and Loop point at the forks until their PRs are merged. --- .gitmodules | 7 ++++++- Loop | 2 +- LoopKit | 2 +- LoopWorkspace.xcworkspace/contents.xcworkspacedata | 3 +++ .../xcshareddata/swiftpm/Package.resolved | 11 ++++++++++- .../xcshareddata/xcschemes/LoopWorkspace.xcscheme | 14 ++++++++++++++ LupedSmartwatchKit | 1 + 7 files changed, 36 insertions(+), 4 deletions(-) create mode 160000 LupedSmartwatchKit diff --git a/.gitmodules b/.gitmodules index df25b6b49a..2407532fa5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,8 @@ branch = smartwatch-manager-review [submodule "LoopKit"] path = LoopKit - url = https://github.com/LoopKit/LoopKit.git + url = https://github.com/dabear/LoopKit.git + branch = smartwatch-manager-review [submodule "CGMBLEKit"] path = CGMBLEKit url = https://github.com/LoopKit/CGMBLEKit.git @@ -74,3 +75,7 @@ [submodule "RoundWhiteDiscKit"] path = RoundWhiteDiscKit url = https://github.com/airedev326/RoundWhiteDiscKit.git +[submodule "LupedSmartwatchKit"] + path = LupedSmartwatchKit + url = https://github.com/dabear/LupedSmartwatchKit.git + branch = smartwatch-manager-review diff --git a/Loop b/Loop index 768106b374..48bc6d4ed8 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 768106b374fcfd803d37049aa404135efc5850db +Subproject commit 48bc6d4ed852f62ad34866bb94b6a3dcc38acb17 diff --git a/LoopKit b/LoopKit index c6192c6e1d..e2ae8f62f0 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit c6192c6e1dc343880aab33860707bc8845ad84e9 +Subproject commit e2ae8f62f09c72fb2fe9fcec096b81850e9a63cc diff --git a/LoopWorkspace.xcworkspace/contents.xcworkspacedata b/LoopWorkspace.xcworkspace/contents.xcworkspacedata index 1116bddf93..057d5260c9 100644 --- a/LoopWorkspace.xcworkspace/contents.xcworkspacedata +++ b/LoopWorkspace.xcworkspace/contents.xcworkspacedata @@ -132,6 +132,9 @@ + + diff --git a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved index dd0810d5ff..0e53ab1785 100644 --- a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "3074fb13e969eeb07af13d2659671d107eac739de84ccaff57f73a4b6201e10f", + "originHash" : "4f012abb426e0a201e0484d769e08540f8897a224b27c26e9c9c1f233e02e75e", "pins" : [ { "identity" : "amplitude-ios", @@ -64,6 +64,15 @@ "version" : "1.7.1" } }, + { + "identity" : "elbbeptransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/dabear/elbbepTransport.git", + "state" : { + "revision" : "22a718082e975e393f189c56903da14b0244fd87", + "version" : "0.3.59" + } + }, { "identity" : "json-logic-swift", "kind" : "remoteSourceControl", diff --git a/LoopWorkspace.xcworkspace/xcshareddata/xcschemes/LoopWorkspace.xcscheme b/LoopWorkspace.xcworkspace/xcshareddata/xcschemes/LoopWorkspace.xcscheme index 256d8b57df..1e3804baf0 100644 --- a/LoopWorkspace.xcworkspace/xcshareddata/xcschemes/LoopWorkspace.xcscheme +++ b/LoopWorkspace.xcworkspace/xcshareddata/xcschemes/LoopWorkspace.xcscheme @@ -314,6 +314,20 @@ ReferencedContainer = "container:G7SensorKit/G7SensorKit.xcodeproj"> + + + + Date: Mon, 2 Nov 2026 11:29:52 +0100 Subject: [PATCH 3/8] Bump LoopKit, Loop and LupedSmartwatchKit: remote actions from the watch Bolus, carbs, alert mute and presets requested from the watch, each refused unless the plugin declares it and the user allows it in Watch Permissions. The Pebble plugin declares none yet. Revert this commit (and the matching commit in LoopKit, Loop and LupedSmartwatchKit) to leave remote actions out. --- Loop | 2 +- LoopKit | 2 +- LupedSmartwatchKit | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Loop b/Loop index 48bc6d4ed8..5adc79cc55 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 48bc6d4ed852f62ad34866bb94b6a3dcc38acb17 +Subproject commit 5adc79cc55fbded002e231f82105a06b836536df diff --git a/LoopKit b/LoopKit index e2ae8f62f0..9e88151c9d 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit e2ae8f62f09c72fb2fe9fcec096b81850e9a63cc +Subproject commit 9e88151c9da17fd783df2cb3a5f4890cdffba20c diff --git a/LupedSmartwatchKit b/LupedSmartwatchKit index 60176ac577..d66e597017 160000 --- a/LupedSmartwatchKit +++ b/LupedSmartwatchKit @@ -1 +1 @@ -Subproject commit 60176ac5772adc47828aae0f980b0e2a53036df2 +Subproject commit d66e59701733ea49fa4c7c2369eb6c08dee13918 From d70a554d4b101153f4ec16a30894318ba0a635c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge?= Date: Mon, 2 Nov 2026 13:39:07 +0100 Subject: [PATCH 4/8] Bump Loop: the watch's strings in Loop's string catalog The base strings (47e7c4ab) and the remote action strings (647c0dd4), so they reach translation. To leave remote actions out, revert 647c0dd4 together with e3425e1d in Loop. --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 5adc79cc55..7c2999c5a6 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 5adc79cc55fbded002e231f82105a06b836536df +Subproject commit 7c2999c5a6629d9b865420a53e12e5c30be548d9 From 2210106a0089bcf7f6bc59f0cb4dc12220ebeb41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge?= Date: Mon, 2 Nov 2026 14:40:31 +0100 Subject: [PATCH 5/8] Bump Loop: make clear that Add Watch is for watches other than Apple Watch --- Loop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop b/Loop index 7c2999c5a6..f532d3d29b 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 7c2999c5a6629d9b865420a53e12e5c30be548d9 +Subproject commit f532d3d29b5147ec092e66508086b12dbd9b3dfa From f6ac0b921b65209262f53b59434848a96f25ff26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge=20Berg?= Date: Thu, 5 Nov 2026 09:05:26 +0100 Subject: [PATCH 6/8] Bump LoopKit and LupedSmartwatchKit: SmartwatchManager's delete() is async Like CGMManager and PumpManager since LoopKit #685: the plugin's delete() stops its work and awaits the host's removal, replacing delete(completion:) and notifyDelegateOfDeletion. --- LoopKit | 2 +- LupedSmartwatchKit | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LoopKit b/LoopKit index 9e88151c9d..826587db2f 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 9e88151c9da17fd783df2cb3a5f4890cdffba20c +Subproject commit 826587db2f56e9aa01294cf57f75bc3813e2b905 diff --git a/LupedSmartwatchKit b/LupedSmartwatchKit index d66e597017..f84aa681fd 160000 --- a/LupedSmartwatchKit +++ b/LupedSmartwatchKit @@ -1 +1 @@ -Subproject commit d66e59701733ea49fa4c7c2369eb6c08dee13918 +Subproject commit f84aa681fd41e08bcbef1020a297f307f77ff741 From ea74742cc0007467d2fa61313ff9909dcdc07fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge=20Berg?= Date: Thu, 5 Nov 2026 13:34:16 +0100 Subject: [PATCH 7/8] Bump LoopKit, Loop and LupedSmartwatchKit: Luped Remote, bolus recommendations, carb absorption (elbbepTransport 1.1.3) - LupedSmartwatchKit serves Luped Remote, a Pebble watchapp with remote actions (off until turned on in the plugin; the store link is in its settings), and declares the remote actions it sends. The host's Watch Permissions, all off by default, still decide each one. - LoopKit and Loop: a watch can ask for Loop's bolus recommendation for carbs it is about to add, and carbs from the watch may say how fast they are absorbed. - LoopKit's watch limits: 5 minutes between watch boluses and between carb entries, and watch boluses in 24 hours up to 3 maximum boluses. - elbbepTransport 1.1.3. --- Loop | 2 +- LoopKit | 2 +- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- LupedSmartwatchKit | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Loop b/Loop index f532d3d29b..73e89c6b93 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit f532d3d29b5147ec092e66508086b12dbd9b3dfa +Subproject commit 73e89c6b936f52fb2929dbab498528f1111261d2 diff --git a/LoopKit b/LoopKit index 826587db2f..8616e7b5b5 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 826587db2f56e9aa01294cf57f75bc3813e2b905 +Subproject commit 8616e7b5b59703656e9f6e9eb814014c828ab558 diff --git a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0e53ab1785..7d78a28f9f 100644 --- a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -69,8 +69,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/dabear/elbbepTransport.git", "state" : { - "revision" : "22a718082e975e393f189c56903da14b0244fd87", - "version" : "0.3.59" + "revision" : "785b5a76367e0e4260b9fdfaafad680fa8399884", + "version" : "1.1.3" } }, { diff --git a/LupedSmartwatchKit b/LupedSmartwatchKit index f84aa681fd..6f31ddf424 160000 --- a/LupedSmartwatchKit +++ b/LupedSmartwatchKit @@ -1 +1 @@ -Subproject commit f84aa681fd41e08bcbef1020a297f307f77ff741 +Subproject commit 6f31ddf42411f5ca8d13b79bf2552d2b1ad52cdc From e3bcb7b8e2f67b590850e2f87651dc54a794779e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Inge=20Berg?= Date: Thu, 5 Nov 2026 14:48:25 +0100 Subject: [PATCH 8/8] Bump LoopKit, Loop, LupedSmartwatchKit and elbbepTransport 1.1.4: presets and End mute for Luped Remote Luped Remote asks for the host's presets and can start or end them, and can end a mute of alerts (a request of 0 minutes). Loop's watch permissions are under Third-Party Smartwatch headers. --- Loop | 2 +- LoopKit | 2 +- .../xcshareddata/swiftpm/Package.resolved | 4 ++-- LupedSmartwatchKit | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Loop b/Loop index 73e89c6b93..e539d3805a 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 73e89c6b936f52fb2929dbab498528f1111261d2 +Subproject commit e539d3805a4d4664c7f57742cc9db30a9857705b diff --git a/LoopKit b/LoopKit index 8616e7b5b5..e252474171 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 8616e7b5b59703656e9f6e9eb814014c828ab558 +Subproject commit e252474171db96e462b8192e862063dc87440c4d diff --git a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved index 7d78a28f9f..1264a24610 100644 --- a/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/LoopWorkspace.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -69,8 +69,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/dabear/elbbepTransport.git", "state" : { - "revision" : "785b5a76367e0e4260b9fdfaafad680fa8399884", - "version" : "1.1.3" + "revision" : "70c4231148a7ac3b1f0941b45eaf8d9e241ee4d6", + "version" : "1.1.4" } }, { diff --git a/LupedSmartwatchKit b/LupedSmartwatchKit index 6f31ddf424..ba4b8250e4 160000 --- a/LupedSmartwatchKit +++ b/LupedSmartwatchKit @@ -1 +1 @@ -Subproject commit 6f31ddf42411f5ca8d13b79bf2552d2b1ad52cdc +Subproject commit ba4b8250e441032343a86df835a41b748f3e7c62