From 0b59a1e1d152c5d341bf716f08c2032ff8d1573f Mon Sep 17 00:00:00 2001 From: Nathaniel Hamming Date: Mon, 25 Sep 2023 15:24:19 -0300 Subject: [PATCH 01/14] [COASTAL-1291] plugin identifier is no longer class property (#45) --- CGMBLEKit/TransmitterManager.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index ce98efd..e151c9f 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -395,7 +395,7 @@ extension TransmitterManager { public class G5CGMManager: TransmitterManager, CGMManager { - public static let pluginIdentifier: String = "DexG5Transmitter" + public let pluginIdentifier: String = "DexG5Transmitter" public let localizedTitle = LocalizedString("Dexcom G5", comment: "CGM display title") @@ -426,7 +426,7 @@ public class G5CGMManager: TransmitterManager, CGMManager { public class G6CGMManager: TransmitterManager, CGMManager { - public static let pluginIdentifier: String = "DexG6Transmitter" + public let pluginIdentifier: String = "DexG6Transmitter" public let localizedTitle = LocalizedString("Dexcom G6", comment: "CGM display title") From 117e3cde677b94460fbca374d92dca73c09005b4 Mon Sep 17 00:00:00 2001 From: Nathaniel Hamming Date: Mon, 25 Sep 2023 15:24:19 -0300 Subject: [PATCH 02/14] [COASTAL-1291] plugin identifier is no longer class property (#45) --- CGMBLEKit/TransmitterManager.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index ce98efd..e151c9f 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -395,7 +395,7 @@ extension TransmitterManager { public class G5CGMManager: TransmitterManager, CGMManager { - public static let pluginIdentifier: String = "DexG5Transmitter" + public let pluginIdentifier: String = "DexG5Transmitter" public let localizedTitle = LocalizedString("Dexcom G5", comment: "CGM display title") @@ -426,7 +426,7 @@ public class G5CGMManager: TransmitterManager, CGMManager { public class G6CGMManager: TransmitterManager, CGMManager { - public static let pluginIdentifier: String = "DexG6Transmitter" + public let pluginIdentifier: String = "DexG6Transmitter" public let localizedTitle = LocalizedString("Dexcom G6", comment: "CGM display title") From 569bff0c86bae7bee3c158967621ac032791090d Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Fri, 1 Mar 2024 15:01:13 -0600 Subject: [PATCH 03/14] Types moved to LoopAlgorithm --- CGMBLEKit/Glucose+SensorDisplayable.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/CGMBLEKit/Glucose+SensorDisplayable.swift b/CGMBLEKit/Glucose+SensorDisplayable.swift index e37feaa..7832228 100644 --- a/CGMBLEKit/Glucose+SensorDisplayable.swift +++ b/CGMBLEKit/Glucose+SensorDisplayable.swift @@ -8,6 +8,7 @@ import Foundation import LoopKit +import LoopAlgorithm extension Glucose: GlucoseDisplayable { From f5f9101459ef7817d670b1ead743e2ab055dcf4c Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Fri, 1 Mar 2024 15:01:13 -0600 Subject: [PATCH 04/14] Types moved to LoopAlgorithm --- CGMBLEKit/Glucose+SensorDisplayable.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/CGMBLEKit/Glucose+SensorDisplayable.swift b/CGMBLEKit/Glucose+SensorDisplayable.swift index e37feaa..7832228 100644 --- a/CGMBLEKit/Glucose+SensorDisplayable.swift +++ b/CGMBLEKit/Glucose+SensorDisplayable.swift @@ -8,6 +8,7 @@ import Foundation import LoopKit +import LoopAlgorithm extension Glucose: GlucoseDisplayable { From 817ced1f975d1b72a57541110946dcea23f5974b Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Thu, 21 Nov 2024 15:47:36 -0800 Subject: [PATCH 05/14] [LOOP-5153] Remove HealthKit dependency from LoopAlgorithm --- CGMBLEKit/Calibration.swift | 8 ++++---- CGMBLEKit/Glucose.swift | 16 ++++++++-------- CGMBLEKit/TransmitterManager.swift | 5 +++-- .../TransmitterSettingsViewController.swift | 4 ++-- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/CGMBLEKit/Calibration.swift b/CGMBLEKit/Calibration.swift index fd05c90..80768a5 100644 --- a/CGMBLEKit/Calibration.swift +++ b/CGMBLEKit/Calibration.swift @@ -7,7 +7,7 @@ // import Foundation -import HealthKit +import LoopAlgorithm public struct Calibration { @@ -16,12 +16,12 @@ public struct Calibration { return nil } - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter - glucose = HKQuantity(unit: unit, doubleValue: Double(calibrationMessage.glucose)) + glucose = LoopQuantity(unit: unit, doubleValue: Double(calibrationMessage.glucose)) date = activationDate.addingTimeInterval(TimeInterval(calibrationMessage.timestamp)) } - public let glucose: HKQuantity + public let glucose: LoopQuantity public let date: Date } diff --git a/CGMBLEKit/Glucose.swift b/CGMBLEKit/Glucose.swift index 20decf4..3e98633 100644 --- a/CGMBLEKit/Glucose.swift +++ b/CGMBLEKit/Glucose.swift @@ -7,7 +7,7 @@ // import Foundation -import HealthKit +import LoopAlgorithm enum GlucoseLimits { static var minimum: UInt16 = 40 @@ -70,14 +70,14 @@ public struct Glucose { return glucoseMessage.glucoseIsDisplayOnly } - public var glucose: HKQuantity? { - guard state.hasReliableGlucose && glucoseMessage.glucose >= 39 else { + public var glucose: LoopQuantity? { + guard state.hasReliableGlucose && glucoseMessage.glucose >= 39 else { return nil } - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter - return HKQuantity(unit: unit, doubleValue: Double(min(max(glucoseMessage.glucose, GlucoseLimits.minimum), GlucoseLimits.maximum))) + return LoopQuantity(unit: unit, doubleValue: Double(min(max(glucoseMessage.glucose, GlucoseLimits.minimum), GlucoseLimits.maximum))) } public var state: CalibrationState { @@ -88,13 +88,13 @@ public struct Glucose { return Int(glucoseMessage.trend) } - public var trendRate: HKQuantity? { + public var trendRate: LoopQuantity? { guard glucoseMessage.trend < Int8.max && glucoseMessage.trend > Int8.min else { return nil } - let unit = HKUnit.milligramsPerDeciliterPerMinute - return HKQuantity(unit: unit, doubleValue: Double(glucoseMessage.trend) / 10) + let unit = LoopUnit.milligramsPerDeciliterPerMinute + return LoopQuantity(unit: unit, doubleValue: Double(glucoseMessage.trend) / 10) } // An identifier for this reading thatʼs consistent between backfill/live data diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index dc500ea..c5578bf 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -6,6 +6,7 @@ // import HealthKit +import LoopAlgorithm import LoopKit import ShareClient import os.log @@ -125,8 +126,8 @@ public class TransmitterManager: TransmitterDelegate { } }() - let quantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: glucoseValue) - let trendRate = HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trendRateValue) + let quantity = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: glucoseValue) + let trendRate = LoopQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trendRateValue) let sample = NewGlucoseSample(date: timestamp, quantity: quantity, condition: nil, trend: trend, trendRate: trendRate, isDisplayOnly: false, wasUserEntered: false, syncIdentifier: syncIdentifier) self.updateDelegate(with: .newData([sample])) } diff --git a/CGMBLEKitUI/TransmitterSettingsViewController.swift b/CGMBLEKitUI/TransmitterSettingsViewController.swift index 255c856..330df19 100644 --- a/CGMBLEKitUI/TransmitterSettingsViewController.swift +++ b/CGMBLEKitUI/TransmitterSettingsViewController.swift @@ -7,7 +7,7 @@ import UIKit import Combine -import HealthKit +import LoopAlgorithm import LoopKit import LoopKitUI import CGMBLEKit @@ -515,7 +515,7 @@ private extension UIAlertController { private extension SettingsTableViewCell { - func setGlucose(_ glucose: HKQuantity?, formatter: QuantityFormatter, isDisplayOnly: Bool) { + func setGlucose(_ glucose: LoopQuantity?, formatter: QuantityFormatter, isDisplayOnly: Bool) { if isDisplayOnly { textLabel?.text = LocalizedString("Glucose (Adjusted)", comment: "Describes a glucose value adjusted to reflect a recent calibration") } else { From 527d328653c506256870cd03d78ae192215784f0 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Thu, 21 Nov 2024 15:47:36 -0800 Subject: [PATCH 06/14] [LOOP-5153] Remove HealthKit dependency from LoopAlgorithm --- CGMBLEKit/Calibration.swift | 8 ++++---- CGMBLEKit/Glucose.swift | 16 ++++++++-------- CGMBLEKit/TransmitterManager.swift | 5 +++-- .../TransmitterSettingsViewController.swift | 4 ++-- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/CGMBLEKit/Calibration.swift b/CGMBLEKit/Calibration.swift index fd05c90..80768a5 100644 --- a/CGMBLEKit/Calibration.swift +++ b/CGMBLEKit/Calibration.swift @@ -7,7 +7,7 @@ // import Foundation -import HealthKit +import LoopAlgorithm public struct Calibration { @@ -16,12 +16,12 @@ public struct Calibration { return nil } - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter - glucose = HKQuantity(unit: unit, doubleValue: Double(calibrationMessage.glucose)) + glucose = LoopQuantity(unit: unit, doubleValue: Double(calibrationMessage.glucose)) date = activationDate.addingTimeInterval(TimeInterval(calibrationMessage.timestamp)) } - public let glucose: HKQuantity + public let glucose: LoopQuantity public let date: Date } diff --git a/CGMBLEKit/Glucose.swift b/CGMBLEKit/Glucose.swift index 20decf4..3e98633 100644 --- a/CGMBLEKit/Glucose.swift +++ b/CGMBLEKit/Glucose.swift @@ -7,7 +7,7 @@ // import Foundation -import HealthKit +import LoopAlgorithm enum GlucoseLimits { static var minimum: UInt16 = 40 @@ -70,14 +70,14 @@ public struct Glucose { return glucoseMessage.glucoseIsDisplayOnly } - public var glucose: HKQuantity? { - guard state.hasReliableGlucose && glucoseMessage.glucose >= 39 else { + public var glucose: LoopQuantity? { + guard state.hasReliableGlucose && glucoseMessage.glucose >= 39 else { return nil } - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter - return HKQuantity(unit: unit, doubleValue: Double(min(max(glucoseMessage.glucose, GlucoseLimits.minimum), GlucoseLimits.maximum))) + return LoopQuantity(unit: unit, doubleValue: Double(min(max(glucoseMessage.glucose, GlucoseLimits.minimum), GlucoseLimits.maximum))) } public var state: CalibrationState { @@ -88,13 +88,13 @@ public struct Glucose { return Int(glucoseMessage.trend) } - public var trendRate: HKQuantity? { + public var trendRate: LoopQuantity? { guard glucoseMessage.trend < Int8.max && glucoseMessage.trend > Int8.min else { return nil } - let unit = HKUnit.milligramsPerDeciliterPerMinute - return HKQuantity(unit: unit, doubleValue: Double(glucoseMessage.trend) / 10) + let unit = LoopUnit.milligramsPerDeciliterPerMinute + return LoopQuantity(unit: unit, doubleValue: Double(glucoseMessage.trend) / 10) } // An identifier for this reading thatʼs consistent between backfill/live data diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index dc500ea..c5578bf 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -6,6 +6,7 @@ // import HealthKit +import LoopAlgorithm import LoopKit import ShareClient import os.log @@ -125,8 +126,8 @@ public class TransmitterManager: TransmitterDelegate { } }() - let quantity = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: glucoseValue) - let trendRate = HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trendRateValue) + let quantity = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: glucoseValue) + let trendRate = LoopQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trendRateValue) let sample = NewGlucoseSample(date: timestamp, quantity: quantity, condition: nil, trend: trend, trendRate: trendRate, isDisplayOnly: false, wasUserEntered: false, syncIdentifier: syncIdentifier) self.updateDelegate(with: .newData([sample])) } diff --git a/CGMBLEKitUI/TransmitterSettingsViewController.swift b/CGMBLEKitUI/TransmitterSettingsViewController.swift index 255c856..330df19 100644 --- a/CGMBLEKitUI/TransmitterSettingsViewController.swift +++ b/CGMBLEKitUI/TransmitterSettingsViewController.swift @@ -7,7 +7,7 @@ import UIKit import Combine -import HealthKit +import LoopAlgorithm import LoopKit import LoopKitUI import CGMBLEKit @@ -515,7 +515,7 @@ private extension UIAlertController { private extension SettingsTableViewCell { - func setGlucose(_ glucose: HKQuantity?, formatter: QuantityFormatter, isDisplayOnly: Bool) { + func setGlucose(_ glucose: LoopQuantity?, formatter: QuantityFormatter, isDisplayOnly: Bool) { if isDisplayOnly { textLabel?.text = LocalizedString("Glucose (Adjusted)", comment: "Describes a glucose value adjusted to reflect a recent calibration") } else { From f998db8e0fa29ba5acabb5834ea311e32cd14517 Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Thu, 21 Nov 2024 22:04:13 -0800 Subject: [PATCH 07/14] [LOOP-5153] Remove HealthKit dependency from LoopAlgorithm --- CGMBLEKit Example/ViewController.swift | 14 +++++++------- CGMBLEKit.xcodeproj/project.pbxproj | 12 ------------ CGMBLEKit/Command.swift | 7 +++---- CGMBLEKit/Transmitter.swift | 1 - CGMBLEKitTests/GlucoseTests.swift | 1 - CGMBLEKitUI/TransmitterManager+UI.swift | 1 - Common/HKUnit.swift | 20 -------------------- 7 files changed, 10 insertions(+), 46 deletions(-) delete mode 100644 Common/HKUnit.swift diff --git a/CGMBLEKit Example/ViewController.swift b/CGMBLEKit Example/ViewController.swift index f1d2766..42a754a 100644 --- a/CGMBLEKit Example/ViewController.swift +++ b/CGMBLEKit Example/ViewController.swift @@ -6,9 +6,9 @@ // Copyright © 2015 Nathan Racklyeft. All rights reserved. // -import UIKit -import HealthKit import CGMBLEKit +import LoopAlgorithm +import UIKit class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate { @@ -77,7 +77,7 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate @IBAction func calibrate(_ sender: UIButton) { let dialog = UIAlertController(title: "Enter BG", message: "Calibrate sensor.", preferredStyle: .alert) - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter dialog.addTextField { (textField : UITextField!) in textField.placeholder = unit.unitString @@ -86,15 +86,15 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate dialog.addAction(UIAlertAction(title: "Calibrate", style: .default, handler: { (action: UIAlertAction!) in let textField = dialog.textFields![0] as UITextField - let minGlucose = HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 40) - let maxGlucose = HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 400) + let minGlucose = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: 40) + let maxGlucose = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: 400) if let text = textField.text, let entry = Double(text) { guard entry >= minGlucose.doubleValue(for: unit) && entry <= maxGlucose.doubleValue(for: unit) else { // TODO: notify the user if the glucose is not in range return } - let glucose = HKQuantity(unit: unit, doubleValue: Double(entry)) + let glucose = LoopQuantity(unit: unit, doubleValue: Double(entry)) AppDelegate.sharedDelegate.commandQueue.enqueue(.calibrateSensor(to: glucose, at: Date())) } })) @@ -161,7 +161,7 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate } func transmitter(_ transmitter: Transmitter, didRead glucose: Glucose) { - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter if let value = glucose.glucose?.doubleValue(for: unit) { titleLabel.text = "\(value) \(unit.unitString)" } else { diff --git a/CGMBLEKit.xcodeproj/project.pbxproj b/CGMBLEKit.xcodeproj/project.pbxproj index 87f0a34..541db45 100644 --- a/CGMBLEKit.xcodeproj/project.pbxproj +++ b/CGMBLEKit.xcodeproj/project.pbxproj @@ -42,7 +42,6 @@ 4379CFD7210EB1BF00AADC79 /* Locked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFD5210EB19F00AADC79 /* Locked.swift */; }; 4379CFD9210EB3AC00AADC79 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFD8210EB3AB00AADC79 /* UIColor.swift */; }; 4379CFDA210EB3D200AADC79 /* CGMBLEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CABDF31C3506F100005705 /* CGMBLEKit.framework */; }; - 4379CFE1210EC27500AADC79 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 4379CFE52110EBAE00AADC79 /* TransmitterSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFE42110EBAE00AADC79 /* TransmitterSetupViewController.swift */; }; 4379CFE72110EC5500AADC79 /* TransmitterIDSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFE62110EC5500AADC79 /* TransmitterIDSetupViewController.swift */; }; 4379CFEA2110EDB100AADC79 /* TransmitterManagerSetup.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4379CFEC2110EDB100AADC79 /* TransmitterManagerSetup.storyboard */; }; @@ -107,10 +106,7 @@ 43E3978B1D5668BD0028E321 /* CalibrationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3978A1D5668BD0028E321 /* CalibrationState.swift */; }; 43E3978F1D566B170028E321 /* Glucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3978E1D566B170028E321 /* Glucose.swift */; }; 43E397911D5692080028E321 /* GlucoseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397901D5692080028E321 /* GlucoseTests.swift */; }; - 43E397931D56950C0028E321 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 43E4B1F21F8AF9790038823E /* PeripheralManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E4B1F11F8AF9790038823E /* PeripheralManager.swift */; }; - 43E5292C2060C4FA00ACEB3B /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; - 43E5292D2060C50800ACEB3B /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 43EEA7111D14DC0800CBBDA0 /* AESCrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EEA70F1D14DC0800CBBDA0 /* AESCrypt.h */; settings = {ATTRIBUTES = (Public, ); }; }; 43EEA7121D14DC0800CBBDA0 /* AESCrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = 43EEA7101D14DC0800CBBDA0 /* AESCrypt.m */; }; 43F82BCC1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F82BCB1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift */; }; @@ -137,7 +133,6 @@ A9AD37EC225EEE850058C179 /* AuthRequestRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CABE171C350B3D00005705 /* AuthRequestRxMessage.swift */; }; A9AD37ED225EEE850058C179 /* AuthChallengeRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CABE1A1C350B3D00005705 /* AuthChallengeRxMessage.swift */; }; A9AD37EE225EEE850058C179 /* GlucoseHistoryTxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CD31CA73CE8003CC1B0 /* GlucoseHistoryTxMessage.swift */; }; - A9AD37EF225EEE850058C179 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; A9AD37F0225EEE850058C179 /* CalibrationDataRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43846AC51D8F896C00799272 /* CalibrationDataRxMessage.swift */; }; A9AD37F1225EEE850058C179 /* SessionStopTxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CCF1CA73C57003CC1B0 /* SessionStopTxMessage.swift */; }; A9AD37F2225EEE850058C179 /* PeripheralManager+G5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431CE7661F91D0B300255374 /* PeripheralManager+G5.swift */; }; @@ -452,7 +447,6 @@ 43E3978A1D5668BD0028E321 /* CalibrationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalibrationState.swift; sourceTree = ""; }; 43E3978E1D566B170028E321 /* Glucose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Glucose.swift; sourceTree = ""; }; 43E397901D5692080028E321 /* GlucoseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlucoseTests.swift; sourceTree = ""; }; - 43E397921D56950C0028E321 /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; }; 43E4B1F11F8AF9790038823E /* PeripheralManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralManager.swift; sourceTree = ""; }; 43EEA70F1D14DC0800CBBDA0 /* AESCrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESCrypt.h; sourceTree = ""; }; 43EEA7101D14DC0800CBBDA0 /* AESCrypt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AESCrypt.m; sourceTree = ""; }; @@ -948,7 +942,6 @@ isa = PBXGroup; children = ( 43DC87BF1C8B509B005BC30D /* Data.swift */, - 43E397921D56950C0028E321 /* HKUnit.swift */, 43026D3E2131C5C600A332E2 /* LocalizedString.swift */, 4379CFD5210EB19F00AADC79 /* Locked.swift */, 4379CFD1210EB0F700AADC79 /* TimeInterval.swift */, @@ -1359,7 +1352,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 43E5292C2060C4FA00ACEB3B /* HKUnit.swift in Sources */, C1CD8B0C203931AD00A8F498 /* NSUserDefaults.swift in Sources */, E71BFF7E20673BD700C876A2 /* CommandQueue.swift in Sources */, 43D140CE2047AA930032346D /* Data.swift in Sources */, @@ -1372,7 +1364,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4379CFE1210EC27500AADC79 /* HKUnit.swift in Sources */, 4325E9E8210EAED100969CE5 /* TransmitterManager+UI.swift in Sources */, 4379CFD9210EB3AC00AADC79 /* UIColor.swift in Sources */, 4325E9E9210EAED100969CE5 /* TransmitterSettingsViewController.swift in Sources */, @@ -1403,7 +1394,6 @@ 43CABE261C350B3D00005705 /* AuthChallengeRxMessage.swift in Sources */, 43CE7CD41CA73CE8003CC1B0 /* GlucoseHistoryTxMessage.swift in Sources */, C1614F082AAFD07700F636E5 /* TransmitterManagerState.swift in Sources */, - 43E397931D56950C0028E321 /* HKUnit.swift in Sources */, 43846AC61D8F896C00799272 /* CalibrationDataRxMessage.swift in Sources */, 43CE7CD01CA73C57003CC1B0 /* SessionStopTxMessage.swift in Sources */, 431CE7671F91D0B300255374 /* PeripheralManager+G5.swift in Sources */, @@ -1448,7 +1438,6 @@ 43460F88200B30D10030C0E3 /* TransmitterIDTests.swift in Sources */, 43F82BCC1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift in Sources */, 433BC81D205CBB16000B1200 /* GlucoseBackfillMessageTests.swift in Sources */, - 43E5292D2060C50800ACEB3B /* HKUnit.swift in Sources */, 43F82BD41D037227006F5DD7 /* SessionStartRxMessageTests.swift in Sources */, 43846AC81D8F89BE00799272 /* CalibrationDataRxMessageTests.swift in Sources */, 43DC87C01C8B509B005BC30D /* Data.swift in Sources */, @@ -1478,7 +1467,6 @@ A9AD37EC225EEE850058C179 /* AuthRequestRxMessage.swift in Sources */, A9AD37ED225EEE850058C179 /* AuthChallengeRxMessage.swift in Sources */, A9AD37EE225EEE850058C179 /* GlucoseHistoryTxMessage.swift in Sources */, - A9AD37EF225EEE850058C179 /* HKUnit.swift in Sources */, A9AD37F0225EEE850058C179 /* CalibrationDataRxMessage.swift in Sources */, A9AD37F1225EEE850058C179 /* SessionStopTxMessage.swift in Sources */, A9AD37F2225EEE850058C179 /* PeripheralManager+G5.swift in Sources */, diff --git a/CGMBLEKit/Command.swift b/CGMBLEKit/Command.swift index c9d0e2b..7568f10 100644 --- a/CGMBLEKit/Command.swift +++ b/CGMBLEKit/Command.swift @@ -7,15 +7,14 @@ // import Foundation -import HealthKit - +import LoopAlgorithm public enum Command: RawRepresentable { public typealias RawValue = [String: Any] case startSensor(at: Date) case stopSensor(at: Date) - case calibrateSensor(to: HKQuantity, at: Date) + case calibrateSensor(to: LoopQuantity, at: Date) case resetTransmitter public init?(rawValue: RawValue) { @@ -37,7 +36,7 @@ public enum Command: RawRepresentable { } self = .stopSensor(at: date) case .calibrateSensor?: - guard let date = date, let glucose = rawValue["glucose"] as? HKQuantity else { + guard let date = date, let glucose = rawValue["glucose"] as? LoopQuantity else { return nil } self = .calibrateSensor(to: glucose, at: date) diff --git a/CGMBLEKit/Transmitter.swift b/CGMBLEKit/Transmitter.swift index d2d1534..07f6a35 100644 --- a/CGMBLEKit/Transmitter.swift +++ b/CGMBLEKit/Transmitter.swift @@ -8,7 +8,6 @@ import Foundation import CoreBluetooth -import HealthKit import os.log diff --git a/CGMBLEKitTests/GlucoseTests.swift b/CGMBLEKitTests/GlucoseTests.swift index 119136a..8aa16b5 100644 --- a/CGMBLEKitTests/GlucoseTests.swift +++ b/CGMBLEKitTests/GlucoseTests.swift @@ -7,7 +7,6 @@ // import XCTest -import HealthKit @testable import CGMBLEKit class GlucoseTests: XCTestCase { diff --git a/CGMBLEKitUI/TransmitterManager+UI.swift b/CGMBLEKitUI/TransmitterManager+UI.swift index 0cabda7..5c595e0 100644 --- a/CGMBLEKitUI/TransmitterManager+UI.swift +++ b/CGMBLEKitUI/TransmitterManager+UI.swift @@ -8,7 +8,6 @@ import SwiftUI import LoopKit import LoopKitUI -import HealthKit import CGMBLEKit diff --git a/Common/HKUnit.swift b/Common/HKUnit.swift deleted file mode 100644 index 69e6f9a..0000000 --- a/Common/HKUnit.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// HKUnit.swift -// xDripG5 -// -// Created by Nate Racklyeft on 8/6/16. -// Copyright © 2016 Nathan Racklyeft. All rights reserved. -// - -import HealthKit - - -extension HKUnit { - static let milligramsPerDeciliter: HKUnit = { - return HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci)) - }() - - static let milligramsPerDeciliterPerMinute: HKUnit = { - return HKUnit.milligramsPerDeciliter.unitDivided(by: .minute()) - }() -} From 6432a544bb2a80c3c355f9ed7f0eecd8076c6c0d Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Thu, 21 Nov 2024 22:04:13 -0800 Subject: [PATCH 08/14] [LOOP-5153] Remove HealthKit dependency from LoopAlgorithm --- CGMBLEKit Example/ViewController.swift | 14 +++++++------- CGMBLEKit.xcodeproj/project.pbxproj | 12 ------------ CGMBLEKit/Command.swift | 7 +++---- CGMBLEKit/Transmitter.swift | 1 - CGMBLEKitTests/GlucoseTests.swift | 1 - CGMBLEKitUI/TransmitterManager+UI.swift | 1 - Common/HKUnit.swift | 20 -------------------- 7 files changed, 10 insertions(+), 46 deletions(-) delete mode 100644 Common/HKUnit.swift diff --git a/CGMBLEKit Example/ViewController.swift b/CGMBLEKit Example/ViewController.swift index f1d2766..42a754a 100644 --- a/CGMBLEKit Example/ViewController.swift +++ b/CGMBLEKit Example/ViewController.swift @@ -6,9 +6,9 @@ // Copyright © 2015 Nathan Racklyeft. All rights reserved. // -import UIKit -import HealthKit import CGMBLEKit +import LoopAlgorithm +import UIKit class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate { @@ -77,7 +77,7 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate @IBAction func calibrate(_ sender: UIButton) { let dialog = UIAlertController(title: "Enter BG", message: "Calibrate sensor.", preferredStyle: .alert) - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter dialog.addTextField { (textField : UITextField!) in textField.placeholder = unit.unitString @@ -86,15 +86,15 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate dialog.addAction(UIAlertAction(title: "Calibrate", style: .default, handler: { (action: UIAlertAction!) in let textField = dialog.textFields![0] as UITextField - let minGlucose = HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 40) - let maxGlucose = HKQuantity(unit: HKUnit.milligramsPerDeciliter, doubleValue: 400) + let minGlucose = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: 40) + let maxGlucose = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: 400) if let text = textField.text, let entry = Double(text) { guard entry >= minGlucose.doubleValue(for: unit) && entry <= maxGlucose.doubleValue(for: unit) else { // TODO: notify the user if the glucose is not in range return } - let glucose = HKQuantity(unit: unit, doubleValue: Double(entry)) + let glucose = LoopQuantity(unit: unit, doubleValue: Double(entry)) AppDelegate.sharedDelegate.commandQueue.enqueue(.calibrateSensor(to: glucose, at: Date())) } })) @@ -161,7 +161,7 @@ class ViewController: UIViewController, TransmitterDelegate, UITextFieldDelegate } func transmitter(_ transmitter: Transmitter, didRead glucose: Glucose) { - let unit = HKUnit.milligramsPerDeciliter + let unit = LoopUnit.milligramsPerDeciliter if let value = glucose.glucose?.doubleValue(for: unit) { titleLabel.text = "\(value) \(unit.unitString)" } else { diff --git a/CGMBLEKit.xcodeproj/project.pbxproj b/CGMBLEKit.xcodeproj/project.pbxproj index 87f0a34..541db45 100644 --- a/CGMBLEKit.xcodeproj/project.pbxproj +++ b/CGMBLEKit.xcodeproj/project.pbxproj @@ -42,7 +42,6 @@ 4379CFD7210EB1BF00AADC79 /* Locked.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFD5210EB19F00AADC79 /* Locked.swift */; }; 4379CFD9210EB3AC00AADC79 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFD8210EB3AB00AADC79 /* UIColor.swift */; }; 4379CFDA210EB3D200AADC79 /* CGMBLEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CABDF31C3506F100005705 /* CGMBLEKit.framework */; }; - 4379CFE1210EC27500AADC79 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 4379CFE52110EBAE00AADC79 /* TransmitterSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFE42110EBAE00AADC79 /* TransmitterSetupViewController.swift */; }; 4379CFE72110EC5500AADC79 /* TransmitterIDSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4379CFE62110EC5500AADC79 /* TransmitterIDSetupViewController.swift */; }; 4379CFEA2110EDB100AADC79 /* TransmitterManagerSetup.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4379CFEC2110EDB100AADC79 /* TransmitterManagerSetup.storyboard */; }; @@ -107,10 +106,7 @@ 43E3978B1D5668BD0028E321 /* CalibrationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3978A1D5668BD0028E321 /* CalibrationState.swift */; }; 43E3978F1D566B170028E321 /* Glucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3978E1D566B170028E321 /* Glucose.swift */; }; 43E397911D5692080028E321 /* GlucoseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397901D5692080028E321 /* GlucoseTests.swift */; }; - 43E397931D56950C0028E321 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 43E4B1F21F8AF9790038823E /* PeripheralManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E4B1F11F8AF9790038823E /* PeripheralManager.swift */; }; - 43E5292C2060C4FA00ACEB3B /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; - 43E5292D2060C50800ACEB3B /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; 43EEA7111D14DC0800CBBDA0 /* AESCrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EEA70F1D14DC0800CBBDA0 /* AESCrypt.h */; settings = {ATTRIBUTES = (Public, ); }; }; 43EEA7121D14DC0800CBBDA0 /* AESCrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = 43EEA7101D14DC0800CBBDA0 /* AESCrypt.m */; }; 43F82BCC1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F82BCB1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift */; }; @@ -137,7 +133,6 @@ A9AD37EC225EEE850058C179 /* AuthRequestRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CABE171C350B3D00005705 /* AuthRequestRxMessage.swift */; }; A9AD37ED225EEE850058C179 /* AuthChallengeRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CABE1A1C350B3D00005705 /* AuthChallengeRxMessage.swift */; }; A9AD37EE225EEE850058C179 /* GlucoseHistoryTxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CD31CA73CE8003CC1B0 /* GlucoseHistoryTxMessage.swift */; }; - A9AD37EF225EEE850058C179 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397921D56950C0028E321 /* HKUnit.swift */; }; A9AD37F0225EEE850058C179 /* CalibrationDataRxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43846AC51D8F896C00799272 /* CalibrationDataRxMessage.swift */; }; A9AD37F1225EEE850058C179 /* SessionStopTxMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CCF1CA73C57003CC1B0 /* SessionStopTxMessage.swift */; }; A9AD37F2225EEE850058C179 /* PeripheralManager+G5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431CE7661F91D0B300255374 /* PeripheralManager+G5.swift */; }; @@ -452,7 +447,6 @@ 43E3978A1D5668BD0028E321 /* CalibrationState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalibrationState.swift; sourceTree = ""; }; 43E3978E1D566B170028E321 /* Glucose.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Glucose.swift; sourceTree = ""; }; 43E397901D5692080028E321 /* GlucoseTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlucoseTests.swift; sourceTree = ""; }; - 43E397921D56950C0028E321 /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; }; 43E4B1F11F8AF9790038823E /* PeripheralManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralManager.swift; sourceTree = ""; }; 43EEA70F1D14DC0800CBBDA0 /* AESCrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESCrypt.h; sourceTree = ""; }; 43EEA7101D14DC0800CBBDA0 /* AESCrypt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AESCrypt.m; sourceTree = ""; }; @@ -948,7 +942,6 @@ isa = PBXGroup; children = ( 43DC87BF1C8B509B005BC30D /* Data.swift */, - 43E397921D56950C0028E321 /* HKUnit.swift */, 43026D3E2131C5C600A332E2 /* LocalizedString.swift */, 4379CFD5210EB19F00AADC79 /* Locked.swift */, 4379CFD1210EB0F700AADC79 /* TimeInterval.swift */, @@ -1359,7 +1352,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 43E5292C2060C4FA00ACEB3B /* HKUnit.swift in Sources */, C1CD8B0C203931AD00A8F498 /* NSUserDefaults.swift in Sources */, E71BFF7E20673BD700C876A2 /* CommandQueue.swift in Sources */, 43D140CE2047AA930032346D /* Data.swift in Sources */, @@ -1372,7 +1364,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4379CFE1210EC27500AADC79 /* HKUnit.swift in Sources */, 4325E9E8210EAED100969CE5 /* TransmitterManager+UI.swift in Sources */, 4379CFD9210EB3AC00AADC79 /* UIColor.swift in Sources */, 4325E9E9210EAED100969CE5 /* TransmitterSettingsViewController.swift in Sources */, @@ -1403,7 +1394,6 @@ 43CABE261C350B3D00005705 /* AuthChallengeRxMessage.swift in Sources */, 43CE7CD41CA73CE8003CC1B0 /* GlucoseHistoryTxMessage.swift in Sources */, C1614F082AAFD07700F636E5 /* TransmitterManagerState.swift in Sources */, - 43E397931D56950C0028E321 /* HKUnit.swift in Sources */, 43846AC61D8F896C00799272 /* CalibrationDataRxMessage.swift in Sources */, 43CE7CD01CA73C57003CC1B0 /* SessionStopTxMessage.swift in Sources */, 431CE7671F91D0B300255374 /* PeripheralManager+G5.swift in Sources */, @@ -1448,7 +1438,6 @@ 43460F88200B30D10030C0E3 /* TransmitterIDTests.swift in Sources */, 43F82BCC1D035AA4006F5DD7 /* TransmitterTimeRxMessageTests.swift in Sources */, 433BC81D205CBB16000B1200 /* GlucoseBackfillMessageTests.swift in Sources */, - 43E5292D2060C50800ACEB3B /* HKUnit.swift in Sources */, 43F82BD41D037227006F5DD7 /* SessionStartRxMessageTests.swift in Sources */, 43846AC81D8F89BE00799272 /* CalibrationDataRxMessageTests.swift in Sources */, 43DC87C01C8B509B005BC30D /* Data.swift in Sources */, @@ -1478,7 +1467,6 @@ A9AD37EC225EEE850058C179 /* AuthRequestRxMessage.swift in Sources */, A9AD37ED225EEE850058C179 /* AuthChallengeRxMessage.swift in Sources */, A9AD37EE225EEE850058C179 /* GlucoseHistoryTxMessage.swift in Sources */, - A9AD37EF225EEE850058C179 /* HKUnit.swift in Sources */, A9AD37F0225EEE850058C179 /* CalibrationDataRxMessage.swift in Sources */, A9AD37F1225EEE850058C179 /* SessionStopTxMessage.swift in Sources */, A9AD37F2225EEE850058C179 /* PeripheralManager+G5.swift in Sources */, diff --git a/CGMBLEKit/Command.swift b/CGMBLEKit/Command.swift index c9d0e2b..7568f10 100644 --- a/CGMBLEKit/Command.swift +++ b/CGMBLEKit/Command.swift @@ -7,15 +7,14 @@ // import Foundation -import HealthKit - +import LoopAlgorithm public enum Command: RawRepresentable { public typealias RawValue = [String: Any] case startSensor(at: Date) case stopSensor(at: Date) - case calibrateSensor(to: HKQuantity, at: Date) + case calibrateSensor(to: LoopQuantity, at: Date) case resetTransmitter public init?(rawValue: RawValue) { @@ -37,7 +36,7 @@ public enum Command: RawRepresentable { } self = .stopSensor(at: date) case .calibrateSensor?: - guard let date = date, let glucose = rawValue["glucose"] as? HKQuantity else { + guard let date = date, let glucose = rawValue["glucose"] as? LoopQuantity else { return nil } self = .calibrateSensor(to: glucose, at: date) diff --git a/CGMBLEKit/Transmitter.swift b/CGMBLEKit/Transmitter.swift index d2d1534..07f6a35 100644 --- a/CGMBLEKit/Transmitter.swift +++ b/CGMBLEKit/Transmitter.swift @@ -8,7 +8,6 @@ import Foundation import CoreBluetooth -import HealthKit import os.log diff --git a/CGMBLEKitTests/GlucoseTests.swift b/CGMBLEKitTests/GlucoseTests.swift index 119136a..8aa16b5 100644 --- a/CGMBLEKitTests/GlucoseTests.swift +++ b/CGMBLEKitTests/GlucoseTests.swift @@ -7,7 +7,6 @@ // import XCTest -import HealthKit @testable import CGMBLEKit class GlucoseTests: XCTestCase { diff --git a/CGMBLEKitUI/TransmitterManager+UI.swift b/CGMBLEKitUI/TransmitterManager+UI.swift index 0cabda7..5c595e0 100644 --- a/CGMBLEKitUI/TransmitterManager+UI.swift +++ b/CGMBLEKitUI/TransmitterManager+UI.swift @@ -8,7 +8,6 @@ import SwiftUI import LoopKit import LoopKitUI -import HealthKit import CGMBLEKit diff --git a/Common/HKUnit.swift b/Common/HKUnit.swift deleted file mode 100644 index 69e6f9a..0000000 --- a/Common/HKUnit.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// HKUnit.swift -// xDripG5 -// -// Created by Nate Racklyeft on 8/6/16. -// Copyright © 2016 Nathan Racklyeft. All rights reserved. -// - -import HealthKit - - -extension HKUnit { - static let milligramsPerDeciliter: HKUnit = { - return HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci)) - }() - - static let milligramsPerDeciliterPerMinute: HKUnit = { - return HKUnit.milligramsPerDeciliter.unitDivided(by: .minute()) - }() -} From fdcb137ee659db20a4ce3a1dff5142c0edb1367f Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Fri, 6 Dec 2024 14:34:33 -0800 Subject: [PATCH 09/14] Bump to iOS 17 --- CGMBLEKit.xcodeproj/project.pbxproj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CGMBLEKit.xcodeproj/project.pbxproj b/CGMBLEKit.xcodeproj/project.pbxproj index 541db45..77f8ab5 100644 --- a/CGMBLEKit.xcodeproj/project.pbxproj +++ b/CGMBLEKit.xcodeproj/project.pbxproj @@ -1874,7 +1874,6 @@ FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ResetTransmitter/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.ResetTransmitter; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1902,7 +1901,6 @@ FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ResetTransmitter/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.ResetTransmitter; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2065,7 +2063,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, @@ -2126,7 +2124,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, From 8c80ac8d4f18e11136fee7e87dfe3ba726580cfa Mon Sep 17 00:00:00 2001 From: Cameron Ingham Date: Fri, 6 Dec 2024 14:34:33 -0800 Subject: [PATCH 10/14] Bump to iOS 17 --- CGMBLEKit.xcodeproj/project.pbxproj | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CGMBLEKit.xcodeproj/project.pbxproj b/CGMBLEKit.xcodeproj/project.pbxproj index 541db45..77f8ab5 100644 --- a/CGMBLEKit.xcodeproj/project.pbxproj +++ b/CGMBLEKit.xcodeproj/project.pbxproj @@ -1874,7 +1874,6 @@ FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ResetTransmitter/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.ResetTransmitter; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1902,7 +1901,6 @@ FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = ResetTransmitter/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.loopkit.ResetTransmitter; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2065,7 +2063,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, @@ -2126,7 +2124,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; + IPHONEOS_DEPLOYMENT_TARGET = 17.6; LOCALIZED_STRING_MACRO_NAMES = ( NSLocalizedString, CFLocalizedString, From b63cf260ba817b542510e5d213b6d9609fecd5f1 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Thu, 24 Jul 2025 12:30:39 -0500 Subject: [PATCH 11/14] Changes for protocol updates --- CGMBLEKit/TransmitterManager.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index c5578bf..8660855 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -545,9 +545,7 @@ extension CalibrationState { // MARK: - AlertResponder implementation extension G5CGMManager { - public func acknowledgeAlert(alertIdentifier: Alert.AlertIdentifier, completion: @escaping (Error?) -> Void) { - completion(nil) - } + public func acknowledgeAlert(alertIdentifier: LoopKit.Alert.AlertIdentifier) async throws { } } // MARK: - AlertSoundVendor implementation @@ -558,9 +556,7 @@ extension G5CGMManager { // MARK: - AlertResponder implementation extension G6CGMManager { - public func acknowledgeAlert(alertIdentifier: Alert.AlertIdentifier, completion: @escaping (Error?) -> Void) { - completion(nil) - } + public func acknowledgeAlert(alertIdentifier: LoopKit.Alert.AlertIdentifier) async throws { } } // MARK: - AlertSoundVendor implementation From d2ea8df5294805d3cf63f8ce8f8fc79859316b53 Mon Sep 17 00:00:00 2001 From: Pete Schwamb Date: Thu, 24 Jul 2025 12:30:39 -0500 Subject: [PATCH 12/14] Changes for protocol updates --- CGMBLEKit/TransmitterManager.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index c5578bf..8660855 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -545,9 +545,7 @@ extension CalibrationState { // MARK: - AlertResponder implementation extension G5CGMManager { - public func acknowledgeAlert(alertIdentifier: Alert.AlertIdentifier, completion: @escaping (Error?) -> Void) { - completion(nil) - } + public func acknowledgeAlert(alertIdentifier: LoopKit.Alert.AlertIdentifier) async throws { } } // MARK: - AlertSoundVendor implementation @@ -558,9 +556,7 @@ extension G5CGMManager { // MARK: - AlertResponder implementation extension G6CGMManager { - public func acknowledgeAlert(alertIdentifier: Alert.AlertIdentifier, completion: @escaping (Error?) -> Void) { - completion(nil) - } + public func acknowledgeAlert(alertIdentifier: LoopKit.Alert.AlertIdentifier) async throws { } } // MARK: - AlertSoundVendor implementation From 15c704799a251d5b50a59bcf2b40fcc1e004d8e8 Mon Sep 17 00:00:00 2001 From: Nathaniel Hamming Date: Fri, 24 Oct 2025 17:27:27 -0300 Subject: [PATCH 13/14] [LOOP-5496] adding loop status checks (#51) --- CGMBLEKit/TransmitterManager.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index 8660855..7af351d 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -430,6 +430,12 @@ extension TransmitterManager { public class G5CGMManager: TransmitterManager, CGMManager { + public var inSignalLoss: Bool = false + + public var isInoperable: Bool { + cgmManagerStatus.isInoperable + } + public let pluginIdentifier: String = "DexG5Transmitter" public let localizedTitle = LocalizedString("Dexcom G5", comment: "CGM display title") @@ -467,6 +473,12 @@ public class G5CGMManager: TransmitterManager, CGMManager { public class G6CGMManager: TransmitterManager, CGMManager { + public var inSignalLoss: Bool = false + + public var isInoperable: Bool { + cgmManagerStatus.isInoperable + } + public let pluginIdentifier: String = "DexG6Transmitter" public let localizedTitle = LocalizedString("Dexcom G6", comment: "CGM display title") From 70d42f855304f7685a940d38d18e3ba571b73f40 Mon Sep 17 00:00:00 2001 From: Nathaniel Hamming Date: Fri, 24 Oct 2025 17:27:27 -0300 Subject: [PATCH 14/14] [LOOP-5496] adding loop status checks (#51) --- CGMBLEKit/TransmitterManager.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CGMBLEKit/TransmitterManager.swift b/CGMBLEKit/TransmitterManager.swift index 8660855..7af351d 100644 --- a/CGMBLEKit/TransmitterManager.swift +++ b/CGMBLEKit/TransmitterManager.swift @@ -430,6 +430,12 @@ extension TransmitterManager { public class G5CGMManager: TransmitterManager, CGMManager { + public var inSignalLoss: Bool = false + + public var isInoperable: Bool { + cgmManagerStatus.isInoperable + } + public let pluginIdentifier: String = "DexG5Transmitter" public let localizedTitle = LocalizedString("Dexcom G5", comment: "CGM display title") @@ -467,6 +473,12 @@ public class G5CGMManager: TransmitterManager, CGMManager { public class G6CGMManager: TransmitterManager, CGMManager { + public var inSignalLoss: Bool = false + + public var isInoperable: Bool { + cgmManagerStatus.isInoperable + } + public let pluginIdentifier: String = "DexG6Transmitter" public let localizedTitle = LocalizedString("Dexcom G6", comment: "CGM display title")