From 3fee17913c5ee67e24a2f44bd55e0a5f2c13cd71 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Mon, 25 Aug 2025 13:59:43 -0700 Subject: [PATCH 1/5] Automatic Signing --- Loop.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 1181951609..804fc8e8ce 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -5290,7 +5290,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -5315,7 +5317,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -5340,7 +5344,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5361,7 +5367,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5470,7 +5478,9 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -5490,7 +5500,9 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From de182df912ad13bc750d3b8c1e42e48397ba52fc Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Mon, 25 Aug 2025 13:59:43 -0700 Subject: [PATCH 2/5] Automatic Signing --- Loop.xcodeproj/project.pbxproj | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 412ad40359..81f67b0162 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -4500,7 +4500,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4526,7 +4528,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4552,7 +4556,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4579,7 +4585,9 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4696,7 +4704,9 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4721,7 +4731,9 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; + CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From 58ce5e39cd3a8186636f00e0391b75a4f45855d4 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Fri, 12 Sep 2025 12:22:04 -0700 Subject: [PATCH 3/5] Support iOS 26 Tinted Widget Modes --- .../Components/SystemActionLink.swift | 36 +++++++++++-------- Loop Widget Extension/LoopWidgets.swift | 4 ++- .../Widgets/SystemStatusWidget.swift | 15 +++++--- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/Loop Widget Extension/Components/SystemActionLink.swift b/Loop Widget Extension/Components/SystemActionLink.swift index eb62bbfa40..7962ec1a9f 100644 --- a/Loop Widget Extension/Components/SystemActionLink.swift +++ b/Loop Widget Extension/Components/SystemActionLink.swift @@ -9,7 +9,11 @@ import Foundation import SwiftUI +@available(iOS 16.1, *) struct SystemActionLink: View { + + @Environment(\.widgetRenderingMode) private var widgetRenderingMode + enum Destination: String, CaseIterable { case carbEntry = "carb-entry" case bolus = "manual-bolus" @@ -36,22 +40,26 @@ struct SystemActionLink: View { case .bolus: return Color("insulin") case .preMeal: - return active ? .white : Color("fresh") + return active ? Color("WidgetBackground") : Color("fresh") case .customPreset: - return active ? .white : Color("glucose") + return active ? Color("WidgetBackground") : Color("glucose") } } private func backgroundColor(active: Bool) -> Color { - switch destination { - case .carbEntry: - return active ? Color("fresh") : Color("WidgetSecondaryBackground") - case .bolus: - return active ? Color("insulin") : Color("WidgetSecondaryBackground") - case .preMeal: - return active ? Color("fresh") : Color("WidgetSecondaryBackground") - case .customPreset: - return active ? Color("glucose") : Color("WidgetSecondaryBackground") + if widgetRenderingMode == .accented { + Color(UIColor.systemBackground).opacity(active ? 0.45 : 0.15) + } else { + switch destination { + case .carbEntry: + active ? Color("fresh") : Color("WidgetSecondaryBackground") + case .bolus: + active ? Color("insulin") : Color("WidgetSecondaryBackground") + case .preMeal: + active ? Color("fresh") : Color("WidgetSecondaryBackground") + case .customPreset: + active ? Color("glucose") : Color("WidgetSecondaryBackground") + } } } @@ -73,10 +81,8 @@ struct SystemActionLink: View { icon .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .foregroundColor(foregroundColor(active: active)) - .background( - ContainerRelativeShape() - .fill(backgroundColor(active: active)) - ) + .background(backgroundColor(active: active)) + .clipShape(ContainerRelativeShape()) } } } diff --git a/Loop Widget Extension/LoopWidgets.swift b/Loop Widget Extension/LoopWidgets.swift index 26f92edb45..a7065deb4a 100644 --- a/Loop Widget Extension/LoopWidgets.swift +++ b/Loop Widget Extension/LoopWidgets.swift @@ -13,6 +13,8 @@ struct LoopWidgets: WidgetBundle { @WidgetBundleBuilder var body: some Widget { - SystemStatusWidget() + if #available(iOS 16.1, *) { + SystemStatusWidget() + } } } diff --git a/Loop Widget Extension/Widgets/SystemStatusWidget.swift b/Loop Widget Extension/Widgets/SystemStatusWidget.swift index a64096d2ad..015f6c5d50 100644 --- a/Loop Widget Extension/Widgets/SystemStatusWidget.swift +++ b/Loop Widget Extension/Widgets/SystemStatusWidget.swift @@ -10,9 +10,11 @@ import LoopUI import SwiftUI import WidgetKit +@available(iOS 16.1, *) struct SystemStatusWidgetEntryView : View { @Environment(\.widgetFamily) private var widgetFamily + @Environment(\.widgetRenderingMode) private var widgetRenderingMode var entry: StatusWidgetTimelineProvider.Entry @@ -27,17 +29,21 @@ struct SystemStatusWidgetEntryView : View { .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .padding(5) .background( - ContainerRelativeShape() - .fill(Color("WidgetSecondaryBackground")) + widgetRenderingMode == .accented + ? Color(UIColor.systemBackground).opacity(0.15) + : Color("WidgetSecondaryBackground") ) + .clipShape(ContainerRelativeShape()) PumpView(entry: entry) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center) .padding(5) .background( - ContainerRelativeShape() - .fill(Color("WidgetSecondaryBackground")) + widgetRenderingMode == .accented + ? Color(UIColor.systemBackground).opacity(0.15) + : Color("WidgetSecondaryBackground") ) + .clipShape(ContainerRelativeShape()) } if widgetFamily != .systemSmall { @@ -66,6 +72,7 @@ struct SystemStatusWidgetEntryView : View { } } +@available(iOS 16.1, *) struct SystemStatusWidget: Widget { let kind: String = "SystemStatusWidget" From d6fd195e0b500f858f3e1086a3ec6a0e440e5352 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Fri, 12 Sep 2025 12:35:43 -0700 Subject: [PATCH 4/5] Support iOS 26 Tinted Widget Modes --- Loop.xcodeproj/project.pbxproj | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 81f67b0162..412ad40359 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -4500,9 +4500,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4528,9 +4526,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4556,9 +4552,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4585,9 +4579,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4704,9 +4696,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4731,9 +4721,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; From c64b840255ab223e3bb97c222b5665a42d4e8d37 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Sat, 13 Sep 2025 19:25:52 -0700 Subject: [PATCH 5/5] Merge branch 'dev' into ios-26-widgets --- Loop.xcodeproj/project.pbxproj | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 81f67b0162..412ad40359 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -4500,9 +4500,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4528,9 +4526,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ""; INFOPLIST_FILE = LoopCore/Info.plist; @@ -4556,9 +4552,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4585,9 +4579,7 @@ buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; CLANG_ENABLE_OBJC_WEAK = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopCore/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4704,9 +4696,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; @@ -4731,9 +4721,7 @@ isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = YES; - CODE_SIGN_IDENTITY = "Apple Development"; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LoopUI/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";