From 4c7978b166f719b1ef4df039fec5de8184c60b7a Mon Sep 17 00:00:00 2001 From: Nathaniel Hamming Date: Fri, 6 Sep 2024 16:30:11 -0300 Subject: [PATCH] [LOOP-4945] remove stale glucose timer from CGM status HUD view (#699) * remove stale glucose timer from CGM status HUD view * removed loop status extension * putting glucose value staleness timer in the aggregate class * updating unit tests * response to comments * start staleness timer when app starts --- .../Base.lproj/Localizable.strings | 5 - .../Base.lproj/MainInterface.storyboard | 112 ----- Loop Status Extension/Info.plist | 35 -- .../Loop Status Extension.entitlements | 10 - Loop Status Extension/StateColorPalette.swift | 17 - .../StatusChartsManager.swift | 21 - .../StatusViewController.swift | 319 -------------- .../ar.lproj/InfoPlist.strings | 3 - .../ar.lproj/Localizable.strings | 33 -- .../ar.lproj/MainInterface.strings | 6 - .../da.lproj/InfoPlist.strings | 6 - .../da.lproj/Localizable.strings | 45 -- .../da.lproj/MainInterface.strings | 12 - .../de.lproj/InfoPlist.strings | 6 - .../de.lproj/Localizable.strings | 45 -- .../de.lproj/MainInterface.strings | 12 - .../en.lproj/Localizable.strings | 5 - .../en.lproj/MainInterface.strings | 6 - .../es.lproj/InfoPlist.strings | 6 - .../es.lproj/Localizable.strings | 45 -- .../es.lproj/MainInterface.strings | 12 - .../fi.lproj/InfoPlist.strings | 6 - .../fi.lproj/Localizable.strings | 45 -- .../fi.lproj/MainInterface.strings | 12 - .../fr.lproj/InfoPlist.strings | 6 - .../fr.lproj/Localizable.strings | 45 -- .../fr.lproj/MainInterface.strings | 12 - .../he.lproj/InfoPlist.strings | 6 - .../he.lproj/Localizable.strings | 45 -- .../he.lproj/MainInterface.strings | 12 - .../it.lproj/InfoPlist.strings | 6 - .../it.lproj/Localizable.strings | 45 -- .../it.lproj/MainInterface.strings | 12 - .../ja.lproj/InfoPlist.strings | 3 - .../ja.lproj/Localizable.strings | 33 -- .../ja.lproj/MainInterface.strings | 6 - .../nb.lproj/InfoPlist.strings | 6 - .../nb.lproj/Localizable.strings | 45 -- .../nb.lproj/MainInterface.strings | 12 - .../nl.lproj/InfoPlist.strings | 6 - .../nl.lproj/Localizable.strings | 45 -- .../nl.lproj/MainInterface.strings | 12 - .../pl.lproj/InfoPlist.strings | 6 - .../pl.lproj/Localizable.strings | 45 -- .../pl.lproj/MainInterface.strings | 12 - .../pt-BR.lproj/InfoPlist.strings | 3 - .../pt-BR.lproj/Localizable.strings | 33 -- .../pt-BR.lproj/MainInterface.strings | 6 - .../ro.lproj/InfoPlist.strings | 6 - .../ro.lproj/Localizable.strings | 45 -- .../ro.lproj/MainInterface.strings | 12 - .../ru.lproj/InfoPlist.strings | 6 - .../ru.lproj/Localizable.strings | 45 -- .../ru.lproj/MainInterface.strings | 12 - .../sk.lproj/InfoPlist.strings | 3 - .../sk.lproj/Localizable.strings | 42 -- .../sk.lproj/MainInterface.strings | 12 - .../sv.lproj/InfoPlist.strings | 6 - .../sv.lproj/Localizable.strings | 45 -- .../sv.lproj/MainInterface.strings | 12 - .../tr.lproj/InfoPlist.strings | 6 - .../tr.lproj/Localizable.strings | 45 -- .../tr.lproj/MainInterface.strings | 12 - .../vi.lproj/InfoPlist.strings | 3 - .../vi.lproj/Localizable.strings | 33 -- .../vi.lproj/MainInterface.strings | 6 - .../zh-Hans.lproj/Localizable.strings | 6 - .../zh-Hans.lproj/MainInterface.strings | 6 - Loop.xcodeproj/project.pbxproj | 395 ------------------ Loop/Managers/LoopDataManager.swift | 39 +- .../GlucoseStoreProtocol.swift | 2 + .../StatusTableViewController.swift | 11 +- .../CGMStatusHUDViewModelTests.swift | 81 +--- LoopUI/ViewModel/CGMStatusHUDViewModel.swift | 62 +-- LoopUI/Views/CGMStatusHUDView.swift | 21 +- 75 files changed, 84 insertions(+), 2176 deletions(-) delete mode 100644 Loop Status Extension/Base.lproj/Localizable.strings delete mode 100644 Loop Status Extension/Base.lproj/MainInterface.storyboard delete mode 100644 Loop Status Extension/Info.plist delete mode 100644 Loop Status Extension/Loop Status Extension.entitlements delete mode 100644 Loop Status Extension/StateColorPalette.swift delete mode 100644 Loop Status Extension/StatusChartsManager.swift delete mode 100644 Loop Status Extension/StatusViewController.swift delete mode 100644 Loop Status Extension/ar.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ar.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ar.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/da.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/da.lproj/Localizable.strings delete mode 100644 Loop Status Extension/da.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/de.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/de.lproj/Localizable.strings delete mode 100644 Loop Status Extension/de.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/en.lproj/Localizable.strings delete mode 100644 Loop Status Extension/en.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/es.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/es.lproj/Localizable.strings delete mode 100644 Loop Status Extension/es.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/fi.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/fi.lproj/Localizable.strings delete mode 100644 Loop Status Extension/fi.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/fr.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/fr.lproj/Localizable.strings delete mode 100644 Loop Status Extension/fr.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/he.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/he.lproj/Localizable.strings delete mode 100644 Loop Status Extension/he.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/it.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/it.lproj/Localizable.strings delete mode 100644 Loop Status Extension/it.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ja.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ja.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ja.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/nb.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/nb.lproj/Localizable.strings delete mode 100644 Loop Status Extension/nb.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/nl.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/nl.lproj/Localizable.strings delete mode 100644 Loop Status Extension/nl.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/pl.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/pl.lproj/Localizable.strings delete mode 100644 Loop Status Extension/pl.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/Localizable.strings delete mode 100644 Loop Status Extension/pt-BR.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ro.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ro.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ro.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/ru.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/ru.lproj/Localizable.strings delete mode 100644 Loop Status Extension/ru.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/sk.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/sk.lproj/Localizable.strings delete mode 100644 Loop Status Extension/sk.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/sv.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/sv.lproj/Localizable.strings delete mode 100644 Loop Status Extension/sv.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/tr.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/tr.lproj/Localizable.strings delete mode 100644 Loop Status Extension/tr.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/vi.lproj/InfoPlist.strings delete mode 100644 Loop Status Extension/vi.lproj/Localizable.strings delete mode 100644 Loop Status Extension/vi.lproj/MainInterface.strings delete mode 100644 Loop Status Extension/zh-Hans.lproj/Localizable.strings delete mode 100644 Loop Status Extension/zh-Hans.lproj/MainInterface.strings diff --git a/Loop Status Extension/Base.lproj/Localizable.strings b/Loop Status Extension/Base.lproj/Localizable.strings deleted file mode 100644 index d21551845d..0000000000 --- a/Loop Status Extension/Base.lproj/Localizable.strings +++ /dev/null @@ -1,5 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; diff --git a/Loop Status Extension/Base.lproj/MainInterface.storyboard b/Loop Status Extension/Base.lproj/MainInterface.storyboard deleted file mode 100644 index 78d5e1c465..0000000000 --- a/Loop Status Extension/Base.lproj/MainInterface.storyboard +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Loop Status Extension/Info.plist b/Loop Status Extension/Info.plist deleted file mode 100644 index 98c5c3e989..0000000000 --- a/Loop Status Extension/Info.plist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - AppGroupIdentifier - $(APP_GROUP_IDENTIFIER) - CFBundleDevelopmentRegion - en - CFBundleDisplayName - $(MAIN_APP_DISPLAY_NAME) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - XPC! - CFBundleShortVersionString - $(LOOP_MARKETING_VERSION) - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - MainAppBundleIdentifier - $(MAIN_APP_BUNDLE_IDENTIFIER) - NSExtension - - NSExtensionMainStoryboard - MainInterface - NSExtensionPointIdentifier - com.apple.widget-extension - - - diff --git a/Loop Status Extension/Loop Status Extension.entitlements b/Loop Status Extension/Loop Status Extension.entitlements deleted file mode 100644 index d9849a816d..0000000000 --- a/Loop Status Extension/Loop Status Extension.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.application-groups - - $(APP_GROUP_IDENTIFIER) - - - diff --git a/Loop Status Extension/StateColorPalette.swift b/Loop Status Extension/StateColorPalette.swift deleted file mode 100644 index e6f18b436a..0000000000 --- a/Loop Status Extension/StateColorPalette.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// StateColorPalette.swift -// Loop -// -// Copyright © 2017 LoopKit Authors. All rights reserved. -// - -import LoopUI -import LoopKitUI - -extension StateColorPalette { - static let loopStatus = StateColorPalette(unknown: .unknownColor, normal: .freshColor, warning: .agingColor, error: .staleColor) - - static let cgmStatus = loopStatus - - static let pumpStatus = StateColorPalette(unknown: .unknownColor, normal: .pumpStatusNormal, warning: .agingColor, error: .staleColor) -} diff --git a/Loop Status Extension/StatusChartsManager.swift b/Loop Status Extension/StatusChartsManager.swift deleted file mode 100644 index c75041e52f..0000000000 --- a/Loop Status Extension/StatusChartsManager.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// StatusChartsManager.swift -// Loop Status Extension -// -// Copyright © 2019 LoopKit Authors. All rights reserved. -// - -import Foundation -import LoopUI -import LoopKitUI -import SwiftCharts -import UIKit - -class StatusChartsManager: ChartsManager { - let predictedGlucose = PredictedGlucoseChart(predictedGlucoseBounds: FeatureFlags.predictedGlucoseChartClampEnabled ? .default : nil, - yAxisStepSizeMGDLOverride: FeatureFlags.predictedGlucoseChartClampEnabled ? 40 : nil) - - init(colors: ChartColorPalette, settings: ChartSettings, traitCollection: UITraitCollection) { - super.init(colors: colors, settings: settings, charts: [predictedGlucose], traitCollection: traitCollection) - } -} diff --git a/Loop Status Extension/StatusViewController.swift b/Loop Status Extension/StatusViewController.swift deleted file mode 100644 index 21a4ada94b..0000000000 --- a/Loop Status Extension/StatusViewController.swift +++ /dev/null @@ -1,319 +0,0 @@ -// -// StatusViewController.swift -// Loop Status Extension -// -// Created by Bharat Mediratta on 11/25/16. -// Copyright © 2016 LoopKit Authors. All rights reserved. -// - -import CoreData -import HealthKit -import LoopKit -import LoopKitUI -import LoopCore -import LoopUI -import NotificationCenter -import UIKit -import SwiftCharts -import LoopAlgorithm - -class StatusViewController: UIViewController, NCWidgetProviding { - - @IBOutlet weak var hudView: StatusBarHUDView! { - didSet { - hudView.loopCompletionHUD.stateColors = .loopStatus - hudView.cgmStatusHUD.stateColors = .cgmStatus - hudView.cgmStatusHUD.tintColor = .label - hudView.pumpStatusHUD.tintColor = .insulinTintColor - hudView.backgroundColor = .clear - - // given the reduced width of the widget, allow for tighter spacing - hudView.containerView.spacing = 6.0 - } - } - @IBOutlet weak var activeCarbsTitleLabel: UILabel! - @IBOutlet weak var activeCarbsAmountLabel: UILabel! - @IBOutlet weak var activeInsulinTitleLabel: UILabel! - @IBOutlet weak var activeInsulinAmountLabel: UILabel! - @IBOutlet weak var glucoseChartContentView: LoopKitUI.ChartContainerView! - - private lazy var charts: StatusChartsManager = { - let charts = StatusChartsManager( - colors: ChartColorPalette( - axisLine: .axisLineColor, - axisLabel: .axisLabelColor, - grid: .gridColor, - glucoseTint: .glucoseTintColor, - insulinTint: .insulinTintColor, - carbTint: .carbTintColor - ), - settings: { - var settings = ChartSettings() - settings.top = 8 - settings.bottom = 8 - settings.trailing = 8 - settings.axisTitleLabelsToLabelsSpacing = 0 - settings.labelsToAxisSpacingX = 6 - settings.clipInnerFrame = false - return settings - }(), - traitCollection: traitCollection - ) - - if FeatureFlags.predictedGlucoseChartClampEnabled { - charts.predictedGlucose.glucoseDisplayRange = ChartConstants.glucoseChartDefaultDisplayBoundClamped - } else { - charts.predictedGlucose.glucoseDisplayRange = ChartConstants.glucoseChartDefaultDisplayBound - } - - return charts - }() - - var statusExtensionContext: StatusExtensionContext? - - lazy var defaults = UserDefaults.appGroup - - private var observers: [Any] = [] - - lazy var healthStore = HKHealthStore() - - lazy var cacheStore = PersistenceController.controllerInAppGroupDirectory() - - lazy var localCacheDuration = Bundle.main.localCacheDuration - - lazy var settingsStore: SettingsStore = SettingsStore( - store: cacheStore, - expireAfter: localCacheDuration) - - lazy var glucoseStore = GlucoseStore( - cacheStore: cacheStore, - provenanceIdentifier: HKSource.default().bundleIdentifier - ) - - lazy var doseStore = DoseStore( - cacheStore: cacheStore, - longestEffectDuration: ExponentialInsulinModelPreset.rapidActingAdult.effectDuration, - basalProfile: settingsStore.latestSettings?.basalRateSchedule, - insulinSensitivitySchedule: settingsStore.latestSettings?.insulinSensitivitySchedule, - provenanceIdentifier: HKSource.default().bundleIdentifier - ) - - private var pluginManager: PluginManager = { - let containingAppFrameworksURL = Bundle.main.privateFrameworksURL?.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().appendingPathComponent("Frameworks") - return PluginManager(pluginsURL: containingAppFrameworksURL) - }() - - override func viewDidLoad() { - super.viewDidLoad() - - activeCarbsTitleLabel.text = NSLocalizedString("Active Carbs", comment: "Widget label title describing the active carbs") - activeInsulinTitleLabel.text = NSLocalizedString("Active Insulin", comment: "Widget label title describing the active insulin") - activeCarbsTitleLabel.textColor = .secondaryLabel - activeCarbsAmountLabel.textColor = .label - activeInsulinTitleLabel.textColor = .secondaryLabel - activeInsulinAmountLabel.textColor = .label - - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(openLoopApp(_:))) - view.addGestureRecognizer(tapGestureRecognizer) - - self.charts.prerender() - glucoseChartContentView.chartGenerator = { [weak self] (frame) in - return self?.charts.chart(atIndex: 0, frame: frame)?.view - } - - extensionContext?.widgetLargestAvailableDisplayMode = .expanded - - switch extensionContext?.widgetActiveDisplayMode ?? .compact { - case .expanded: - glucoseChartContentView.isHidden = false - case .compact: - fallthrough - @unknown default: - glucoseChartContentView.isHidden = true - } - - observers = [ - // TODO: Observe cross-process notifications of Loop status updating - ] - } - - deinit { - for observer in observers { - NotificationCenter.default.removeObserver(observer) - } - } - - func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) { - let compactHeight = hudView.systemLayoutSizeFitting(maxSize).height + activeCarbsTitleLabel.systemLayoutSizeFitting(maxSize).height - - switch activeDisplayMode { - case .expanded: - preferredContentSize = CGSize(width: maxSize.width, height: compactHeight + 135) - case .compact: - fallthrough - @unknown default: - preferredContentSize = CGSize(width: maxSize.width, height: compactHeight) - } - } - - override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransition(to: size, with: coordinator) - - coordinator.animate(alongsideTransition: { - (UIViewControllerTransitionCoordinatorContext) -> Void in - self.glucoseChartContentView.isHidden = self.extensionContext?.widgetActiveDisplayMode != .expanded - }) - } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - charts.traitCollection = traitCollection - } - - @objc private func openLoopApp(_: Any) { - if let url = Bundle.main.mainAppUrl { - self.extensionContext?.open(url) - } - } - - func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) { - let result = update() - completionHandler(result) - } - - @discardableResult - func update() -> NCUpdateResult { - let group = DispatchGroup() - - var activeInsulin: Double? - let carbUnit = HKUnit.gram() - var glucose: [StoredGlucoseSample] = [] - - charts.startDate = Calendar.current.nextDate(after: Date(timeIntervalSinceNow: .minutes(-5)), matching: DateComponents(minute: 0), matchingPolicy: .strict, direction: .backward) ?? Date() - - // Showing the whole history plus full prediction in the glucose plot - // is a little crowded, so limit it to three hours in the future: - charts.maxEndDate = charts.startDate.addingTimeInterval(TimeInterval(hours: 3)) - - group.enter() - glucoseStore.getGlucoseSamples(start: charts.startDate) { (result) in - switch result { - case .failure: - glucose = [] - case .success(let samples): - glucose = samples - } - group.leave() - } - - group.notify(queue: .main) { - guard let defaults = self.defaults, let context = defaults.statusExtensionContext else { - return - } - - // Pump Status - let pumpManagerHUDView: BaseHUDView - if let hudViewContext = context.pumpManagerHUDViewContext, - let contextHUDView = PumpManagerHUDViewFromRawValue(hudViewContext.pumpManagerHUDViewRawValue, pluginManager: self.pluginManager) - { - pumpManagerHUDView = contextHUDView - } else { - pumpManagerHUDView = ReservoirVolumeHUDView.instantiate() - } - pumpManagerHUDView.stateColors = .pumpStatus - self.hudView.removePumpManagerProvidedView() - self.hudView.addPumpManagerProvidedHUDView(pumpManagerHUDView) - - if let netBasal = context.netBasal { - self.hudView.pumpStatusHUD.basalRateHUD.setNetBasalRate(netBasal.rate, percent: netBasal.percentage, at: netBasal.start) - } - - if let lastCompleted = context.lastLoopCompleted { - self.hudView.loopCompletionHUD.lastLoopCompleted = lastCompleted - } - - if let isClosedLoop = context.isClosedLoop { - self.hudView.loopCompletionHUD.loopIconClosed = isClosedLoop - } - - let insulinFormatter: NumberFormatter = { - let numberFormatter = NumberFormatter() - - numberFormatter.numberStyle = .decimal - numberFormatter.minimumFractionDigits = 2 - numberFormatter.maximumFractionDigits = 2 - - return numberFormatter - }() - - if let activeInsulin = activeInsulin, - let valueStr = insulinFormatter.string(from: activeInsulin) - { - self.activeInsulinAmountLabel.text = String(format: NSLocalizedString("%1$@ U", comment: "The subtitle format describing units of active insulin. (1: localized insulin value description)"), valueStr) - } else { - self.activeInsulinAmountLabel.text = NSLocalizedString("? U", comment: "Displayed in the widget when the amount of active insulin cannot be determined.") - } - - self.hudView.pumpStatusHUD.presentStatusHighlight(context.pumpStatusHighlightContext) - self.hudView.pumpStatusHUD.lifecycleProgress = context.pumpLifecycleProgressContext - - // Active carbs - let carbsFormatter = QuantityFormatter(for: carbUnit) - - if let carbsOnBoard = context.carbsOnBoard, - let activeCarbsNumberString = carbsFormatter.string(from: HKQuantity(unit: carbUnit, doubleValue: carbsOnBoard)) - { - self.activeCarbsAmountLabel.text = String(format: NSLocalizedString("%1$@", comment: "The subtitle format describing the grams of active carbs. (1: localized carb value description)"), activeCarbsNumberString) - } else { - self.activeCarbsAmountLabel.text = NSLocalizedString("? g", comment: "Displayed in the widget when the amount of active carbs cannot be determined.") - } - - // CGM Status - self.hudView.cgmStatusHUD.presentStatusHighlight(context.cgmStatusHighlightContext) - self.hudView.cgmStatusHUD.lifecycleProgress = context.cgmLifecycleProgressContext - - guard let unit = context.predictedGlucose?.unit else { - return - } - - if let lastGlucose = glucose.last { - self.hudView.cgmStatusHUD.setGlucoseQuantity( - lastGlucose.quantity.doubleValue(for: unit), - at: lastGlucose.startDate, - unit: unit, - staleGlucoseAge: LoopAlgorithm.inputDataRecencyInterval, - glucoseDisplay: context.glucoseDisplay, - wasUserEntered: lastGlucose.wasUserEntered, - isDisplayOnly: lastGlucose.isDisplayOnly - ) - } - - // Charts - self.charts.predictedGlucose.glucoseUnit = unit - self.charts.predictedGlucose.setGlucoseValues(glucose) - - if let predictedGlucose = context.predictedGlucose?.samples, context.isClosedLoop == true { - self.charts.predictedGlucose.setPredictedGlucoseValues(predictedGlucose) - } else { - self.charts.predictedGlucose.setPredictedGlucoseValues([]) - } - - self.charts.predictedGlucose.targetGlucoseSchedule = self.settingsStore.latestSettings?.glucoseTargetRangeSchedule - self.charts.invalidateChart(atIndex: 0) - self.charts.prerender() - self.glucoseChartContentView.reloadChart() - } - - switch extensionContext?.widgetActiveDisplayMode ?? .compact { - case .expanded: - glucoseChartContentView.isHidden = false - case .compact: - fallthrough - @unknown default: - glucoseChartContentView.isHidden = true - } - - // Right now we always act as if there's new data. - // TODO: keep track of data changes and return .noData if necessary - return NCUpdateResult.newData - } -} diff --git a/Loop Status Extension/ar.lproj/InfoPlist.strings b/Loop Status Extension/ar.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/ar.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/ar.lproj/Localizable.strings b/Loop Status Extension/ar.lproj/Localizable.strings deleted file mode 100644 index 5935bf3282..0000000000 --- a/Loop Status Extension/ar.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "كارب النشط"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "أنسولين نشط"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "متوقع %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "أنسولين نشط %1$@ وحدة"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "وحدة"; - diff --git a/Loop Status Extension/ar.lproj/MainInterface.strings b/Loop Status Extension/ar.lproj/MainInterface.strings deleted file mode 100644 index 23ec628122..0000000000 --- a/Loop Status Extension/ar.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "كارب النشط"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "أنسولين نشط"; - diff --git a/Loop Status Extension/da.lproj/InfoPlist.strings b/Loop Status Extension/da.lproj/InfoPlist.strings deleted file mode 100644 index ffe563a634..0000000000 --- a/Loop Status Extension/da.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop-statusudvidelse"; - diff --git a/Loop Status Extension/da.lproj/Localizable.strings b/Loop Status Extension/da.lproj/Localizable.strings deleted file mode 100644 index 4388492489..0000000000 --- a/Loop Status Extension/da.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive kulhydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Med tiden %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/da.lproj/MainInterface.strings b/Loop Status Extension/da.lproj/MainInterface.strings deleted file mode 100644 index ca088fa3ce..0000000000 --- a/Loop Status Extension/da.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive kulhydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/de.lproj/InfoPlist.strings b/Loop Status Extension/de.lproj/InfoPlist.strings deleted file mode 100644 index 8a7abf7ee4..0000000000 --- a/Loop Status Extension/de.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status-Erweiterung"; - diff --git a/Loop Status Extension/de.lproj/Localizable.strings b/Loop Status Extension/de.lproj/Localizable.strings deleted file mode 100644 index 196ef74140..0000000000 --- a/Loop Status Extension/de.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? IE"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ IE"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive KH"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktives Insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Voraussichtlich %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ IE"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "IE"; - diff --git a/Loop Status Extension/de.lproj/MainInterface.strings b/Loop Status Extension/de.lproj/MainInterface.strings deleted file mode 100644 index fb0ae387e6..0000000000 --- a/Loop Status Extension/de.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive KH"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktives Insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 IE"; - diff --git a/Loop Status Extension/en.lproj/Localizable.strings b/Loop Status Extension/en.lproj/Localizable.strings deleted file mode 100644 index d21551845d..0000000000 --- a/Loop Status Extension/en.lproj/Localizable.strings +++ /dev/null @@ -1,5 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; diff --git a/Loop Status Extension/en.lproj/MainInterface.strings b/Loop Status Extension/en.lproj/MainInterface.strings deleted file mode 100644 index 3a52b2e5e2..0000000000 --- a/Loop Status Extension/en.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Eventually 92 mg/dL"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "IOB 1.0 U"; - diff --git a/Loop Status Extension/es.lproj/InfoPlist.strings b/Loop Status Extension/es.lproj/InfoPlist.strings deleted file mode 100644 index 029eaa2d2a..0000000000 --- a/Loop Status Extension/es.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensión de Estado de Loop"; - diff --git a/Loop Status Extension/es.lproj/Localizable.strings b/Loop Status Extension/es.lproj/Localizable.strings deleted file mode 100644 index a893db7399..0000000000 --- a/Loop Status Extension/es.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? gr"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carbohidratos Activos"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina activa"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventualmente %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/es.lproj/MainInterface.strings b/Loop Status Extension/es.lproj/MainInterface.strings deleted file mode 100644 index 5354b0e9c3..0000000000 --- a/Loop Status Extension/es.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carbohidratos Activos"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 gr"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina activa"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/fi.lproj/InfoPlist.strings b/Loop Status Extension/fi.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/fi.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/fi.lproj/Localizable.strings b/Loop Status Extension/fi.lproj/Localizable.strings deleted file mode 100644 index af5d51baf2..0000000000 --- a/Loop Status Extension/fi.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Akt. hiilari"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Akt. insuliini"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Ennuste %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/fi.lproj/MainInterface.strings b/Loop Status Extension/fi.lproj/MainInterface.strings deleted file mode 100644 index a1e847d468..0000000000 --- a/Loop Status Extension/fi.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Akt. hiilari"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Akt. insuliini"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/fr.lproj/InfoPlist.strings b/Loop Status Extension/fr.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/fr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/fr.lproj/Localizable.strings b/Loop Status Extension/fr.lproj/Localizable.strings deleted file mode 100644 index 1c6e8dfb18..0000000000 --- a/Loop Status Extension/fr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Glucides actifs"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insuline active"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Finalement %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/fr.lproj/MainInterface.strings b/Loop Status Extension/fr.lproj/MainInterface.strings deleted file mode 100644 index 4d13ebda2d..0000000000 --- a/Loop Status Extension/fr.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Glucides actifs"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insuline active"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/he.lproj/InfoPlist.strings b/Loop Status Extension/he.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/he.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/he.lproj/Localizable.strings b/Loop Status Extension/he.lproj/Localizable.strings deleted file mode 100644 index 27db2c87a8..0000000000 --- a/Loop Status Extension/he.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "U %1$@"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "פחמימות פעילות"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "אינסולין פעיל"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "בדרך ל-%1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/he.lproj/MainInterface.strings b/Loop Status Extension/he.lproj/MainInterface.strings deleted file mode 100644 index 7bb2ea5747..0000000000 --- a/Loop Status Extension/he.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "פחמימות פעילות"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "אינסולין פעיל"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "U 0"; - diff --git a/Loop Status Extension/it.lproj/InfoPlist.strings b/Loop Status Extension/it.lproj/InfoPlist.strings deleted file mode 100644 index da11eb5a77..0000000000 --- a/Loop Status Extension/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Estensione dello stato di funzionamento di Loop"; - diff --git a/Loop Status Extension/it.lproj/Localizable.strings b/Loop Status Extension/it.lproj/Localizable.strings deleted file mode 100644 index 871ef62d8c..0000000000 --- a/Loop Status Extension/it.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ contro %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carb Attivi"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina attiva"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Probabile Glic. %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/it.lproj/MainInterface.strings b/Loop Status Extension/it.lproj/MainInterface.strings deleted file mode 100644 index ab9c005998..0000000000 --- a/Loop Status Extension/it.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carb Attivi"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina attiva"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/ja.lproj/InfoPlist.strings b/Loop Status Extension/ja.lproj/InfoPlist.strings deleted file mode 100644 index bb232bb4cc..0000000000 --- a/Loop Status Extension/ja.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "ループ"; - diff --git a/Loop Status Extension/ja.lproj/Localizable.strings b/Loop Status Extension/ja.lproj/Localizable.strings deleted file mode 100644 index d328a81f35..0000000000 --- a/Loop Status Extension/ja.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "残存糖質"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "残存インスリン"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "予想 %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/ja.lproj/MainInterface.strings b/Loop Status Extension/ja.lproj/MainInterface.strings deleted file mode 100644 index 2407f97e64..0000000000 --- a/Loop Status Extension/ja.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "残存糖質"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "残存インスリン"; - diff --git a/Loop Status Extension/nb.lproj/InfoPlist.strings b/Loop Status Extension/nb.lproj/InfoPlist.strings deleted file mode 100644 index 24d50f5390..0000000000 --- a/Loop Status Extension/nb.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Utvidelse av Loop status"; - diff --git a/Loop Status Extension/nb.lproj/Localizable.strings b/Loop Status Extension/nb.lproj/Localizable.strings deleted file mode 100644 index 2e4a88ce5f..0000000000 --- a/Loop Status Extension/nb.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktive karbohydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Omsider %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/nb.lproj/MainInterface.strings b/Loop Status Extension/nb.lproj/MainInterface.strings deleted file mode 100644 index 7942de07be..0000000000 --- a/Loop Status Extension/nb.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktive karbohydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/nl.lproj/InfoPlist.strings b/Loop Status Extension/nl.lproj/InfoPlist.strings deleted file mode 100644 index 62e5156f17..0000000000 --- a/Loop Status Extension/nl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extensie"; - diff --git a/Loop Status Extension/nl.lproj/Localizable.strings b/Loop Status Extension/nl.lproj/Localizable.strings deleted file mode 100644 index b5f9439380..0000000000 --- a/Loop Status Extension/nl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Actieve Koolhydraten"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Actieve Insuline"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Uiteindelijk %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/nl.lproj/MainInterface.strings b/Loop Status Extension/nl.lproj/MainInterface.strings deleted file mode 100644 index 3300ee0aec..0000000000 --- a/Loop Status Extension/nl.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Actieve Koolhydraten"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Actieve Insuline"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/pl.lproj/InfoPlist.strings b/Loop Status Extension/pl.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/pl.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/pl.lproj/Localizable.strings b/Loop Status Extension/pl.lproj/Localizable.strings deleted file mode 100644 index 9f9cab187f..0000000000 --- a/Loop Status Extension/pl.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? J"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ J"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktywne węglowodany"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktywna insulina"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Docelowo %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ J"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "J"; - diff --git a/Loop Status Extension/pl.lproj/MainInterface.strings b/Loop Status Extension/pl.lproj/MainInterface.strings deleted file mode 100644 index 137aac2c3c..0000000000 --- a/Loop Status Extension/pl.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktywne węglowodany"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktywna insulina"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 J"; - diff --git a/Loop Status Extension/pt-BR.lproj/InfoPlist.strings b/Loop Status Extension/pt-BR.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/pt-BR.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/pt-BR.lproj/Localizable.strings b/Loop Status Extension/pt-BR.lproj/Localizable.strings deleted file mode 100644 index ed1ddc8056..0000000000 --- a/Loop Status Extension/pt-BR.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carboidratos Ativos"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulina Ativa"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventualmente %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/pt-BR.lproj/MainInterface.strings b/Loop Status Extension/pt-BR.lproj/MainInterface.strings deleted file mode 100644 index 09c2331507..0000000000 --- a/Loop Status Extension/pt-BR.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carboidratos Ativos"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulina Ativa"; - diff --git a/Loop Status Extension/ro.lproj/InfoPlist.strings b/Loop Status Extension/ro.lproj/InfoPlist.strings deleted file mode 100644 index 811f60ffd2..0000000000 --- a/Loop Status Extension/ro.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Extensie stare Loop"; - diff --git a/Loop Status Extension/ro.lproj/Localizable.strings b/Loop Status Extension/ro.lproj/Localizable.strings deleted file mode 100644 index e749a36e8e..0000000000 --- a/Loop Status Extension/ro.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? U"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ U"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Carbohidrați activi"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Insulină activă"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Eventually %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@%2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/ro.lproj/MainInterface.strings b/Loop Status Extension/ro.lproj/MainInterface.strings deleted file mode 100644 index 52df0e4c8c..0000000000 --- a/Loop Status Extension/ro.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Carbohidrați activi"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Insulină activă"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 U"; - diff --git a/Loop Status Extension/ru.lproj/InfoPlist.strings b/Loop Status Extension/ru.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/ru.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/ru.lproj/Localizable.strings b/Loop Status Extension/ru.lproj/Localizable.strings deleted file mode 100644 index 590b1893da..0000000000 --- a/Loop Status Extension/ru.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? г"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? ед."; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ Ед"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ версии %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Активные углеводы"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Активный инсулин"; - -/* The short unit display string for decibles */ -"dB" = "дБ"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "В конечном итоге %1$@"; - -/* The short unit display string for grams */ -"g" = "г"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ ед"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "мг/дл"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "ммоль/л"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "ед"; - diff --git a/Loop Status Extension/ru.lproj/MainInterface.strings b/Loop Status Extension/ru.lproj/MainInterface.strings deleted file mode 100644 index 7a44069cbe..0000000000 --- a/Loop Status Extension/ru.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Активные углеводы"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 г"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Активный инсулин"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 ед."; - diff --git a/Loop Status Extension/sk.lproj/InfoPlist.strings b/Loop Status Extension/sk.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/sk.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/sk.lproj/Localizable.strings b/Loop Status Extension/sk.lproj/Localizable.strings deleted file mode 100644 index f7fe0850f1..0000000000 --- a/Loop Status Extension/sk.lproj/Localizable.strings +++ /dev/null @@ -1,42 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? j"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%@ j"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v %2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktívne sacharidy"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktívny inzulín"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ j"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "j"; - diff --git a/Loop Status Extension/sk.lproj/MainInterface.strings b/Loop Status Extension/sk.lproj/MainInterface.strings deleted file mode 100644 index e249f99412..0000000000 --- a/Loop Status Extension/sk.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktívne sacharidy"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktívny inzulín"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 j"; - diff --git a/Loop Status Extension/sv.lproj/InfoPlist.strings b/Loop Status Extension/sv.lproj/InfoPlist.strings deleted file mode 100644 index 1565e025fa..0000000000 --- a/Loop Status Extension/sv.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Status Extension"; - diff --git a/Loop Status Extension/sv.lproj/Localizable.strings b/Loop Status Extension/sv.lproj/Localizable.strings deleted file mode 100644 index fb3f8b00e7..0000000000 --- a/Loop Status Extension/sv.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? g"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? E"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ E"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktiva kolhydrater"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktivt insulin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Förväntat %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ E"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dl"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "E"; - diff --git a/Loop Status Extension/sv.lproj/MainInterface.strings b/Loop Status Extension/sv.lproj/MainInterface.strings deleted file mode 100644 index afc966ed37..0000000000 --- a/Loop Status Extension/sv.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktiva kolhydrater"; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 g"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktivt insulin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 E"; - diff --git a/Loop Status Extension/tr.lproj/InfoPlist.strings b/Loop Status Extension/tr.lproj/InfoPlist.strings deleted file mode 100644 index a67e46ff7e..0000000000 --- a/Loop Status Extension/tr.lproj/InfoPlist.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - -/* Bundle name */ -"CFBundleName" = "Loop Durum Uzantısı"; - diff --git a/Loop Status Extension/tr.lproj/Localizable.strings b/Loop Status Extension/tr.lproj/Localizable.strings deleted file mode 100644 index 0f5ebe9125..0000000000 --- a/Loop Status Extension/tr.lproj/Localizable.strings +++ /dev/null @@ -1,45 +0,0 @@ -/* Displayed in the widget when the amount of active carbs cannot be determined. */ -"? g" = "? gr"; - -/* Displayed in the widget when the amount of active insulin cannot be determined. */ -"? U" = "? Ü"; - -/* The subtitle format describing the grams of active carbs. (1: localized carb value description) */ -"%1$@" = "%1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"%1$@ U" = "%1$@ Ü"; - -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Aktif Karb."; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Aktif İnsülin"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Nihai KŞ %1$@"; - -/* The short unit display string for grams */ -"g" = "gr"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "AİNS %1$@ Ü"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "Ü"; - diff --git a/Loop Status Extension/tr.lproj/MainInterface.strings b/Loop Status Extension/tr.lproj/MainInterface.strings deleted file mode 100644 index de7b3fc545..0000000000 --- a/Loop Status Extension/tr.lproj/MainInterface.strings +++ /dev/null @@ -1,12 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Aktif Karb."; - -/* Class = "UILabel"; text = "0 g"; ObjectID = "dPp-lJ-5sh"; */ -"dPp-lJ-5sh.text" = "0 gr"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Aktif İnsülin"; - -/* Class = "UILabel"; text = "0 U"; ObjectID = "Vgf-p1-2QP"; */ -"Vgf-p1-2QP.text" = "0 Ü"; - diff --git a/Loop Status Extension/vi.lproj/InfoPlist.strings b/Loop Status Extension/vi.lproj/InfoPlist.strings deleted file mode 100644 index 034a1e1f6a..0000000000 --- a/Loop Status Extension/vi.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Bundle display name */ -"CFBundleDisplayName" = "Loop"; - diff --git a/Loop Status Extension/vi.lproj/Localizable.strings b/Loop Status Extension/vi.lproj/Localizable.strings deleted file mode 100644 index a0b94d6a7f..0000000000 --- a/Loop Status Extension/vi.lproj/Localizable.strings +++ /dev/null @@ -1,33 +0,0 @@ -/* The format string for the app name and version number. (1: bundle name)(2: bundle version) */ -"%1$@ v%2$@" = "%1$@ v%2$@"; - -/* Widget label title describing the active carbs */ -"Active Carbs" = "Lượng Carbs còn hoạt động"; - -/* Widget label title describing the active insulin */ -"Active Insulin" = "Lượng Insulin còn hoạt động"; - -/* The short unit display string for decibles */ -"dB" = "dB"; - -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "Kết quả là %1$@"; - -/* The short unit display string for grams */ -"g" = "g"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ U"; - -/* The short unit display string for milligrams of glucose per decilter */ -"mg/dL" = "mg/dL"; - -/* The short unit display string for millimoles of glucose per liter */ -"mmol/L" = "mmol/L"; - -/* Format string for combining localized numeric value and unit. (1: numeric value)(2: unit) */ -"QUANTITY_VALUE_AND_UNIT" = "%1$@ %2$@"; - -/* The short unit display string for international units of insulin */ -"U" = "U"; - diff --git a/Loop Status Extension/vi.lproj/MainInterface.strings b/Loop Status Extension/vi.lproj/MainInterface.strings deleted file mode 100644 index c766b97e1b..0000000000 --- a/Loop Status Extension/vi.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "Lượng Carbs còn hoạt động"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "Lượng Insulin còn hoạt động"; - diff --git a/Loop Status Extension/zh-Hans.lproj/Localizable.strings b/Loop Status Extension/zh-Hans.lproj/Localizable.strings deleted file mode 100644 index b1d62cfb8c..0000000000 --- a/Loop Status Extension/zh-Hans.lproj/Localizable.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* The subtitle format describing eventual glucose. (1: localized glucose value description) */ -"Eventually %1$@" = "最终 %1$@"; - -/* The subtitle format describing units of active insulin. (1: localized insulin value description) */ -"IOB %1$@ U" = "IOB %1$@ 单位"; - diff --git a/Loop Status Extension/zh-Hans.lproj/MainInterface.strings b/Loop Status Extension/zh-Hans.lproj/MainInterface.strings deleted file mode 100644 index 2a063e6084..0000000000 --- a/Loop Status Extension/zh-Hans.lproj/MainInterface.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "UILabel"; text = "Active Carbs"; ObjectID = "9iF-xY-Bh4"; */ -"9iF-xY-Bh4.text" = "最终血糖为92 毫克/分升"; - -/* Class = "UILabel"; text = "Active Insulin"; ObjectID = "UPi-dG-yYD"; */ -"UPi-dG-yYD.text" = "IOB 1.0 单位"; - diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 0f2fa3feb3..3195a8fd62 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -63,10 +63,8 @@ 1D080CBD2473214A00356610 /* AlertStore.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1D080CBB2473214A00356610 /* AlertStore.xcdatamodeld */; }; 1D12D3B92548EFDD00B53E8B /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D12D3B82548EFDD00B53E8B /* main.swift */; }; 1D3F0F7526D59B6C004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; }; - 1D3F0F7626D59DCD004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; }; 1D3F0F7726D59DCE004A5960 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 892A5D58222F0A27008961AB /* Debug.swift */; }; 1D49795824E7289700948F05 /* ServicesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D49795724E7289700948F05 /* ServicesViewModel.swift */; }; - 1D4990E824A25931005CC357 /* FeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89E267FB2292456700A3F2AF /* FeatureFlags.swift */; }; 1D4A3E2D2478628500FD601B /* StoredAlert+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D4A3E2B2478628500FD601B /* StoredAlert+CoreDataClass.swift */; }; 1D4A3E2E2478628500FD601B /* StoredAlert+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D4A3E2C2478628500FD601B /* StoredAlert+CoreDataProperties.swift */; }; 1D63DEA526E950D400F46FA5 /* SupportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D63DEA426E950D400F46FA5 /* SupportManager.swift */; }; @@ -108,7 +106,6 @@ 4344628220A7A37F00C4BE6F /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4344628120A7A37E00C4BE6F /* CoreBluetooth.framework */; }; 4344629220A7C19800C4BE6F /* ButtonGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4344629120A7C19800C4BE6F /* ButtonGroup.swift */; }; 4344629820A8B2D700C4BE6F /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4374B5EE209D84BE00D17AA8 /* OSLog.swift */; }; - 4345E3FB21F04911009E00E5 /* UIColor+HIG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0C31E4659E700FF19A9 /* UIColor+HIG.swift */; }; 4345E3FC21F04911009E00E5 /* UIColor+HIG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0C31E4659E700FF19A9 /* UIColor+HIG.swift */; }; 4345E40121F67300009E00E5 /* PotentialCarbEntryUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92581C5479E4001FFDE1 /* PotentialCarbEntryUserInfo.swift */; }; 4345E40221F67300009E00E5 /* PotentialCarbEntryUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92581C5479E4001FFDE1 /* PotentialCarbEntryUserInfo.swift */; }; @@ -162,12 +159,10 @@ 43BFF0B51E45C1E700FF19A9 /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */; }; 43BFF0B71E45C20C00FF19A9 /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */; }; 43BFF0C61E465A4400FF19A9 /* UIColor+HIG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0C31E4659E700FF19A9 /* UIColor+HIG.swift */; }; - 43BFF0CD1E466C8400FF19A9 /* StateColorPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0CC1E466C8400FF19A9 /* StateColorPalette.swift */; }; 43C05CA821EB2B26006FB252 /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431E73471FF95A900069B5F7 /* PersistenceController.swift */; }; 43C05CA921EB2B26006FB252 /* PersistenceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431E73471FF95A900069B5F7 /* PersistenceController.swift */; }; 43C05CAA21EB2B49006FB252 /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; }; 43C05CAB21EB2B4A006FB252 /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; }; - 43C05CAC21EB2B8B006FB252 /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; }; 43C05CAD21EB2BBF006FB252 /* NSUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430B29892041F54A00BA9F93 /* NSUserDefaults.swift */; }; 43C05CAF21EB2C24006FB252 /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; }; 43C05CB221EBD88A006FB252 /* LoopCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 43D9002A21EB209400AF44BF /* LoopCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -193,7 +188,6 @@ 43DBF0531C93EC8200B3C386 /* DeviceDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DBF0521C93EC8200B3C386 /* DeviceDataManager.swift */; }; 43DFB62320D4CAE7008A7BAE /* PumpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C3B6F620BBCAA30026CAFA /* PumpManager.swift */; }; 43E3449F1B9D68E900C85C07 /* StatusTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3449E1B9D68E900C85C07 /* StatusTableViewController.swift */; }; - 43E93FB51E4675E800EAB8DB /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */; }; 43E93FB61E469A4000EAB8DB /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */; }; 43E93FB71E469A5100EAB8DB /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.swift */; }; 43F41C371D3BF32400C11ED6 /* UIAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F41C361D3BF32400C11ED6 /* UIAlertController.swift */; }; @@ -203,7 +197,6 @@ 43FCBBC21E51710B00343C1B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43776F9A1B8022E90074EA36 /* LaunchScreen.storyboard */; }; 43FCEEA9221A615B0013DD30 /* StatusChartsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEA8221A615B0013DD30 /* StatusChartsManager.swift */; }; 43FCEEAD221A66780013DD30 /* DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEAC221A66780013DD30 /* DateFormatter.swift */; }; - 43FCEEB1221A863E0013DD30 /* StatusChartsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */; }; 4B60626C287E286000BF8BBB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B60626A287E286000BF8BBB /* Localizable.strings */; }; 4B60626D287E286000BF8BBB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B60626A287E286000BF8BBB /* Localizable.strings */; }; 4B67E2C8289B4EDB002D92AF /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B67E2C6289B4EDB002D92AF /* InfoPlist.strings */; }; @@ -215,7 +208,6 @@ 4F2C15741E0209F500E160D4 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; 4F2C15811E0495B200E160D4 /* WatchContext+WatchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2C15801E0495B200E160D4 /* WatchContext+WatchApp.swift */; }; 4F2C15821E074FC600E160D4 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; - 4F2C15831E0757E600E160D4 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.swift */; }; 4F2C15851E075B8700E160D4 /* LoopUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F75288D1DFE1DC600C322D6 /* LoopUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4F2C15931E09BF2C00E160D4 /* HUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2C15921E09BF2C00E160D4 /* HUDView.swift */; }; 4F2C15951E09BF3C00E160D4 /* HUDView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15941E09BF3C00E160D4 /* HUDView.xib */; }; @@ -223,11 +215,7 @@ 4F2C159A1E0C9E5600E160D4 /* LoopUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4F526D611DF8D9A900A04910 /* NetBasal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D601DF8D9A900A04910 /* NetBasal.swift */; }; 4F6663941E905FD2009E74FC /* ChartColorPalette+Loop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6663931E905FD2009E74FC /* ChartColorPalette+Loop.swift */; }; - 4F70C1E11DE8DCA7006380B7 /* StatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F70C1E01DE8DCA7006380B7 /* StatusViewController.swift */; }; - 4F70C1E41DE8DCA7006380B7 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4F70C1E21DE8DCA7006380B7 /* MainInterface.storyboard */; }; - 4F70C1E81DE8DCA7006380B7 /* Loop Status Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4F70C1DC1DE8DCA7006380B7 /* Loop Status Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 4F70C2101DE8FAC5006380B7 /* ExtensionDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F70C20F1DE8FAC5006380B7 /* ExtensionDataManager.swift */; }; - 4F70C2121DE900EA006380B7 /* StatusExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */; }; 4F70C2131DE90339006380B7 /* StatusExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */; }; 4F7528941DFE1E9500C322D6 /* LoopUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; }; 4F75289A1DFE1F6000C322D6 /* BasalRateHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */; }; @@ -242,16 +230,13 @@ 4F7E8AC720E2AC0300AEA65E /* WatchPredictedGlucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7E8AC620E2AC0300AEA65E /* WatchPredictedGlucose.swift */; }; 4F7E8ACB20E2ACB500AEA65E /* WatchPredictedGlucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7E8AC620E2AC0300AEA65E /* WatchPredictedGlucose.swift */; }; 4F82655020E69F9A0031A8F5 /* HUDInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F82654F20E69F9A0031A8F5 /* HUDInterfaceController.swift */; }; - 4FAC02541E22F6B20087A773 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; 4FC8C8011DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */; }; - 4FC8C8021DEB943800A1452E /* NSUserDefaults+StatusExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */; }; 4FDDD23720DC51DF00D04B16 /* LoopDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FDDD23620DC51DF00D04B16 /* LoopDataManager.swift */; }; 4FF4D0F81E1725B000846527 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 434F54561D287FDB002A9274 /* NibLoadable.swift */; }; 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; 63F5E17C297DDF3900A62D4B /* ckcomplication.strings in Resources */ = {isa = PBXBuildFile; fileRef = 63F5E17A297DDF3900A62D4B /* ckcomplication.strings */; }; 7D23667D21250C7E0028B67D /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D23667C21250C7E0028B67D /* LocalizedString.swift */; }; - 7D7076351FE06EDE004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076371FE06EDE004AC8EA /* Localizable.strings */; }; 7D7076451FE06EE0004AC8EA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076471FE06EE0004AC8EA /* InfoPlist.strings */; }; 7D70764A1FE06EE1004AC8EA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D70764C1FE06EE1004AC8EA /* Localizable.strings */; }; 7D70764F1FE06EE1004AC8EA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7D7076511FE06EE1004AC8EA /* InfoPlist.strings */; }; @@ -324,8 +309,6 @@ 89F9119424358E4500ECCAF3 /* CarbAbsorptionTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89F9119324358E4500ECCAF3 /* CarbAbsorptionTime.swift */; }; 89F9119624358E6900ECCAF3 /* BolusPickerValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89F9119524358E6900ECCAF3 /* BolusPickerValues.swift */; }; 89FE21AD24AC57E30033F501 /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FE21AC24AC57E30033F501 /* Collection.swift */; }; - A90EF53C25DEF06200F32D61 /* PluginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C16DA84122E8E112008624C2 /* PluginManager.swift */; }; - A90EF54425DEF0A000F32D61 /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4374B5EE209D84BE00D17AA8 /* OSLog.swift */; }; A91D2A3F26CF0FF80023B075 /* IconTitleSubtitleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91D2A3E26CF0FF80023B075 /* IconTitleSubtitleTableViewCell.swift */; }; A91E4C2124F867A700BE9213 /* StoredAlertTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91E4C2024F867A700BE9213 /* StoredAlertTests.swift */; }; A91E4C2324F86F1000BE9213 /* CriticalEventLogExportManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91E4C2224F86F1000BE9213 /* CriticalEventLogExportManagerTests.swift */; }; @@ -379,7 +362,6 @@ B4001CEE28CBBC82002FB414 /* AlertManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4001CED28CBBC82002FB414 /* AlertManagementView.swift */; }; B405E35924D2A75B00DD058D /* DerivedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A966152923EA5A37005D8B29 /* DerivedAssets.xcassets */; }; B405E35A24D2B1A400DD058D /* HUDAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15961E09E94E00E160D4 /* HUDAssets.xcassets */; }; - B405E35B24D2E05600DD058D /* HUDAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15961E09E94E00E160D4 /* HUDAssets.xcassets */; }; B40D07C7251A89D500C1C6D7 /* GlucoseDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40D07C6251A89D500C1C6D7 /* GlucoseDisplay.swift */; }; B42C951424A3C76000857C73 /* CGMStatusHUDViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42C951324A3C76000857C73 /* CGMStatusHUDViewModel.swift */; }; B42D124328D371C400E43D22 /* AlertMuter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42D124228D371C400E43D22 /* AlertMuter.swift */; }; @@ -392,7 +374,6 @@ B490A03F24D0550F00F509FA /* GlucoseRangeCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A03E24D0550F00F509FA /* GlucoseRangeCategory.swift */; }; B490A04124D0559D00F509FA /* DeviceLifecycleProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A04024D0559D00F509FA /* DeviceLifecycleProgressState.swift */; }; B490A04324D055D900F509FA /* DeviceStatusHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A04224D055D900F509FA /* DeviceStatusHighlight.swift */; }; - B491B09E24D0B600004CBE8F /* DerivedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A966152523EA5A25005D8B29 /* DerivedAssets.xcassets */; }; B491B0A324D0B66D004CBE8F /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A03C24D04F9400F509FA /* Color.swift */; }; B491B0A424D0B675004CBE8F /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B11E45C18400FF19A9 /* UIColor.swift */; }; B4AC0D3F24B9005300CDB0A1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEE31CDE5C0A003C8C80 /* UIImage.swift */; }; @@ -414,7 +395,6 @@ B4FEEF7D24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4FEEF7C24B8A71F00A8DF9B /* DeviceDataManager+DeviceStatus.swift */; }; C1004DF22981F5B700B8CF94 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF02981F5B700B8CF94 /* InfoPlist.strings */; }; C1004DF52981F5B700B8CF94 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF32981F5B700B8CF94 /* Localizable.strings */; }; - C1004DF82981F5B700B8CF94 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1004DF62981F5B700B8CF94 /* InfoPlist.strings */; }; C110888D2A3913C600BA4898 /* BuildDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = C110888C2A3913C600BA4898 /* BuildDetails.swift */; }; C11613492983096D00777E7C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C11613472983096D00777E7C /* InfoPlist.strings */; }; C116134C2983096D00777E7C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C116134A2983096D00777E7C /* Localizable.strings */; }; @@ -434,10 +414,6 @@ C138C6F82C1B8A2C00F08F1A /* GlucoseCondition.swift in Sources */ = {isa = PBXBuildFile; fileRef = C138C6F72C1B8A2C00F08F1A /* GlucoseCondition.swift */; }; C13DA2B024F6C7690098BB29 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C13DA2AF24F6C7690098BB29 /* UIViewController.swift */; }; C148CEE724FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C148CEE624FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift */; }; - C159C825286785E000A86EC0 /* LoopUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; }; - C159C828286785E100A86EC0 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C159C8192867857000A86EC0 /* LoopKitUI.framework */; }; - C159C82A286785E300A86EC0 /* MockKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C159C8212867859800A86EC0 /* MockKitUI.framework */; }; - C159C82D2867876500A86EC0 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F70C1DD1DE8DCA7006380B7 /* NotificationCenter.framework */; }; C159C82F286787EF00A86EC0 /* LoopKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C159C82E286787EF00A86EC0 /* LoopKit.framework */; }; C15A8C492A7305B1009D736B /* SwiftCharts in Frameworks */ = {isa = PBXBuildFile; productRef = C1E3DC4628595FAA00CA19FF /* SwiftCharts */; }; C165756F2534C468004AE16E /* SimpleBolusViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C165756E2534C468004AE16E /* SimpleBolusViewModelTests.swift */; }; @@ -488,7 +464,6 @@ C1C660D1252E4DD5009B5C32 /* LoopConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C660D0252E4DD5009B5C32 /* LoopConstants.swift */; }; C1C73F0D1DE3D0270022FC89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1C73F0F1DE3D0270022FC89 /* InfoPlist.strings */; }; C1CCF1122858FA900035389C /* LoopCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43D9FFCF21EAE05D00AF44BF /* LoopCore.framework */; }; - C1CCF1172858FBAD0035389C /* SwiftCharts in Frameworks */ = {isa = PBXBuildFile; productRef = C1CCF1162858FBAD0035389C /* SwiftCharts */; }; C1D0B6302986D4D90098D215 /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D0B62F2986D4D90098D215 /* LocalizedString.swift */; }; C1D0B6312986D4D90098D215 /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D0B62F2986D4D90098D215 /* LocalizedString.swift */; }; C1D289B522F90A52003FFBD9 /* BasalDeliveryState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D289B422F90A52003FFBD9 /* BasalDeliveryState.swift */; }; @@ -512,9 +487,7 @@ C1F7822627CC056900C0919A /* SettingsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F7822527CC056900C0919A /* SettingsManager.swift */; }; C1F8B243223E73FD00DD66CF /* BolusProgressTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F8B1D122375E4200DD66CF /* BolusProgressTableViewCell.swift */; }; C1FB428C217806A400FAB378 /* StateColorPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1FB428B217806A300FAB378 /* StateColorPalette.swift */; }; - C1FB428D21791D2500FAB378 /* PumpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C3B6F620BBCAA30026CAFA /* PumpManager.swift */; }; C1FB428F217921D600FAB378 /* PumpManagerUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1FB428E217921D600FAB378 /* PumpManagerUI.swift */; }; - C1FB4290217922A100FAB378 /* PumpManagerUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1FB428E217921D600FAB378 /* PumpManagerUI.swift */; }; DD3DBD292A33AFE9000F8B5B /* IntegralRetrospectiveCorrectionSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3DBD282A33AFE9000F8B5B /* IntegralRetrospectiveCorrectionSelectionView.swift */; }; DDC389F62A2B61750066E2E8 /* ApplicationFactorStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC389F52A2B61750066E2E8 /* ApplicationFactorStrategy.swift */; }; DDC389F82A2B620B0066E2E8 /* GlucoseBasedApplicationFactorStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC389F72A2B620B0066E2E8 /* GlucoseBasedApplicationFactorStrategy.swift */; }; @@ -614,13 +587,6 @@ remoteGlobalIDString = 43776F8B1B8022E90074EA36; remoteInfo = Loop; }; - 4F70C1E61DE8DCA7006380B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 43776F841B8022E90074EA36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F70C1DB1DE8DCA7006380B7; - remoteInfo = "Loop Status Extension"; - }; 4F7528961DFE1ED400C322D6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 43776F841B8022E90074EA36 /* Project object */; @@ -635,13 +601,6 @@ remoteGlobalIDString = 43D9001A21EB209400AF44BF; remoteInfo = "LoopCore-watchOS"; }; - C11B9D582867781E00500CF8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 43776F841B8022E90074EA36 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4F75288A1DFE1DC600C322D6; - remoteInfo = LoopUI; - }; C1CCF1142858FA900035389C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 43776F841B8022E90074EA36 /* Project object */; @@ -720,7 +679,6 @@ files = ( 14B1736928AED9EE006CCD7C /* Loop Widget Extension.appex in Embed App Extensions */, E9B07F94253BBA6500BAD8F8 /* Loop Intent Extension.appex in Embed App Extensions */, - 4F70C1E81DE8DCA7006380B7 /* Loop Status Extension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -890,7 +848,6 @@ 43BFF0B11E45C18400FF19A9 /* UIColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; 43BFF0B31E45C1BE00FF19A9 /* NumberFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = ""; }; 43BFF0C31E4659E700FF19A9 /* UIColor+HIG.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+HIG.swift"; sourceTree = ""; }; - 43BFF0CC1E466C8400FF19A9 /* StateColorPalette.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StateColorPalette.swift; sourceTree = ""; }; 43C05CB021EBBDB9006FB252 /* TimeInRangeLesson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeInRangeLesson.swift; sourceTree = ""; }; 43C05CB421EBE274006FB252 /* Date.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Date.swift; sourceTree = ""; }; 43C05CB721EBEA54006FB252 /* HKUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; }; @@ -945,7 +902,6 @@ 43F89CA222BDFBBC006BB54E /* UIActivityIndicatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIActivityIndicatorView.swift; sourceTree = ""; }; 43FCEEA8221A615B0013DD30 /* StatusChartsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusChartsManager.swift; sourceTree = ""; }; 43FCEEAC221A66780013DD30 /* DateFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatter.swift; sourceTree = ""; }; - 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusChartsManager.swift; sourceTree = ""; }; 4B60626B287E286000BF8BBB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 4B67E2C7289B4EDB002D92AF /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = G4ShareSpy.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -959,12 +915,7 @@ 4F526D5E1DF2459000A04910 /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; }; 4F526D601DF8D9A900A04910 /* NetBasal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetBasal.swift; sourceTree = ""; }; 4F6663931E905FD2009E74FC /* ChartColorPalette+Loop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChartColorPalette+Loop.swift"; sourceTree = ""; }; - 4F70C1DC1DE8DCA7006380B7 /* Loop Status Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Loop Status Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 4F70C1DD1DE8DCA7006380B7 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; - 4F70C1E01DE8DCA7006380B7 /* StatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = StatusViewController.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 4F70C1E31DE8DCA7006380B7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; - 4F70C1E51DE8DCA7006380B7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4F70C1FD1DE8E662006380B7 /* Loop Status Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Loop Status Extension.entitlements"; sourceTree = ""; }; 4F70C20F1DE8FAC5006380B7 /* ExtensionDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionDataManager.swift; sourceTree = ""; }; 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusExtensionContext.swift; sourceTree = ""; }; 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LoopUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -980,85 +931,65 @@ 4FFEDFBE20E5CF22000BFC58 /* ChartHUDController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartHUDController.swift; sourceTree = ""; }; 63F5E17B297DDF3900A62D4B /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/ckcomplication.strings; sourceTree = ""; }; 7D199D93212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Main.strings; sourceTree = ""; }; - 7D199D94212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/MainInterface.strings; sourceTree = ""; }; 7D199D95212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Interface.strings; sourceTree = ""; }; 7D199D96212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 7D199D97212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D199D99212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 7D199D9A212A067600241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 7D199D9D212A067700241026 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 7D23667521250BE30028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; 7D23667621250BF70028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23667821250C2D0028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; 7D23667921250C440028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; 7D23667A21250C480028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; 7D23667C21250C7E0028B67D /* LocalizedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LocalizedString.swift; path = LoopUI/Common/LocalizedString.swift; sourceTree = SOURCE_ROOT; }; 7D23667E21250CAC0028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; 7D23667F21250CB80028B67D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = ""; }; 7D23668521250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Main.strings; sourceTree = ""; }; - 7D23668621250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/MainInterface.strings; sourceTree = ""; }; 7D23668721250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Interface.strings; sourceTree = ""; }; 7D23668821250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 7D23668921250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23668B21250D180028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 7D23668C21250D190028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 7D23668F21250D190028B67D /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 7D23669521250D220028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Main.strings; sourceTree = ""; }; - 7D23669621250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/MainInterface.strings; sourceTree = ""; }; 7D23669721250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Interface.strings; sourceTree = ""; }; 7D23669821250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 7D23669921250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D23669B21250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 7D23669C21250D230028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 7D23669F21250D240028B67D /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 7D2366A521250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; }; - 7D2366A621250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; 7D2366A721250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Interface.strings"; sourceTree = ""; }; 7D2366A821250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7D2366A921250D2C0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - 7D2366AB21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7D2366AC21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7D2366AF21250D2D0028B67D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 7D2366B421250D350028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Interface.strings; sourceTree = ""; }; 7D2366B721250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = ""; }; - 7D2366B821250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainInterface.strings; sourceTree = ""; }; 7D2366B921250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 7D2366BA21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366BC21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 7D2366BD21250D360028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 7D2366BF21250D370028B67D /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 7D2366C521250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Main.strings; sourceTree = ""; }; - 7D2366C621250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/MainInterface.strings; sourceTree = ""; }; 7D2366C721250D3F0028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Interface.strings; sourceTree = ""; }; 7D2366C821250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 7D2366C921250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366CB21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 7D2366CC21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 7D2366CF21250D400028B67D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 7D2366D521250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Main.strings; sourceTree = ""; }; - 7D2366D621250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/MainInterface.strings; sourceTree = ""; }; 7D2366D721250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Interface.strings; sourceTree = ""; }; 7D2366D821250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; 7D2366D921250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D2366DB21250D4A0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; 7D2366DC21250D4B0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; 7D2366DF21250D4B0028B67D /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; 7D68AAAA1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Main.strings; sourceTree = ""; }; - 7D68AAAB1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MainInterface.strings; sourceTree = ""; }; 7D68AAAC1FE2DB0A00522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Interface.strings; sourceTree = ""; }; - 7D68AAAD1FE2E8D400522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 7D68AAB31FE2E8D500522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 7D68AAB41FE2E8D600522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; 7D68AAB71FE2E8D600522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 7D68AAB81FE2E8D700522C49 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; - 7D7076361FE06EDE004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 7D70764B1FE06EE1004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 7D70765F1FE06EE3004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 7D7076641FE06EE4004AC8EA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEED52335A3CB005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 7D9BEED72335A489005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; - 7D9BEED82335A4F7005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEEDA2335A522005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEEDB2335A587005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEEDD2335A5CC005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Interface.strings; sourceTree = ""; }; 7D9BEEDE2335A5F7005DCFD6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; @@ -1094,71 +1025,59 @@ 7D9BEF122335D694005DCFD6 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Main.strings; sourceTree = ""; }; 7D9BEF132335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Intents.strings; sourceTree = ""; }; 7D9BEF152335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF162335EC4B005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEF172335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF182335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Main.strings; sourceTree = ""; }; 7D9BEF1A2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF1B2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF1C2335EC4C005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF1E2335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF1F2335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF222335EC4D005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF282335EC4E005DCFD6 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF292335EC58005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Intents.strings"; sourceTree = ""; }; 7D9BEF2B2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main.strings"; sourceTree = ""; }; - 7D9BEF2C2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/MainInterface.strings"; sourceTree = ""; }; 7D9BEF2D2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Interface.strings"; sourceTree = ""; }; 7D9BEF2E2335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Main.strings"; sourceTree = ""; }; 7D9BEF302335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF312335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF322335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - 7D9BEF342335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF352335EC59005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF382335EC5A005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF3E2335EC5A005DCFD6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; 7D9BEF3F2335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Intents.strings; sourceTree = ""; }; 7D9BEF412335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF422335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEF432335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF442335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Main.strings; sourceTree = ""; }; 7D9BEF462335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF472335EC62005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF4A2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF4B2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF4E2335EC63005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF542335EC64005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF552335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Intents.strings; sourceTree = ""; }; 7D9BEF572335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF582335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEF592335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF5A2335EC6E005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Main.strings; sourceTree = ""; }; 7D9BEF5C2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF5D2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF5E2335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF602335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF612335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF642335EC6F005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF6A2335EC70005DCFD6 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF6B2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Intents.strings; sourceTree = ""; }; 7D9BEF6D2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF6E2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEF6F2335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF702335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Main.strings; sourceTree = ""; }; 7D9BEF722335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF732335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 7D9BEF762335EC7D005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF772335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF7A2335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF802335EC7E005DCFD6 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF812335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Intents.strings; sourceTree = ""; }; 7D9BEF832335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Main.strings; sourceTree = ""; }; - 7D9BEF842335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BEF852335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Interface.strings; sourceTree = ""; }; 7D9BEF862335EC8B005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Main.strings; sourceTree = ""; }; 7D9BEF882335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF892335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF8A2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BEF8C2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF8D2335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF902335EC8C005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; 7D9BEF962335EC8D005DCFD6 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; @@ -1168,18 +1087,15 @@ 7D9BEF9A233600D9005DCFD6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; 7D9BF13A23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Intents.strings; sourceTree = ""; }; 7D9BF13B23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Main.strings; sourceTree = ""; }; - 7D9BF13C23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/MainInterface.strings; sourceTree = ""; }; 7D9BF13D23370E8B005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Interface.strings; sourceTree = ""; }; 7D9BF13E23370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Main.strings; sourceTree = ""; }; 7D9BF13F23370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14023370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14123370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - 7D9BF14223370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14323370E8C005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14423370E8D005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7D9BF14623370E8D005DCFD6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; 7DD382771F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Main.strings; sourceTree = ""; }; - 7DD382781F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/MainInterface.strings; sourceTree = ""; }; 7DD382791F8DBFC60071272B /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Interface.strings; sourceTree = ""; }; 7E69CFFB2A16A77E00203CBD /* ResetLoopManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetLoopManager.swift; sourceTree = ""; }; 80F864E52433BF5D0026EC26 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1334,7 +1250,6 @@ C1004DEF2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DF12981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DF42981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; - C1004DF72981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DF92981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; C1004DFA2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DFB2981F5B700B8CF94 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1342,7 +1257,6 @@ C1004DFD2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DFE2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004DFF2981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - C1004E002981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E012981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; C1004E022981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E032981F67A00B8CF94 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1350,7 +1264,6 @@ C1004E052981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E062981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E072981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; - C1004E082981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E092981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; C1004E0A2981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E0B2981F6A100B8CF94 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1358,7 +1271,6 @@ C1004E0D2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E0E2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E0F2981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - C1004E102981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E112981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; C1004E122981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E132981F6E200B8CF94 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1366,7 +1278,6 @@ C1004E152981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E162981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E172981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; - C1004E182981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E192981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = ""; }; C1004E1A2981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E1B2981F6F500B8CF94 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1374,26 +1285,22 @@ C1004E1D2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E1E2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E1F2981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; - C1004E202981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E212981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; C1004E222981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E232981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E242981F72D00B8CF94 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E252981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E262981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; - C1004E272981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E282981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; C1004E292981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2A2981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2B2981F74300B8CF94 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2C2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - C1004E2D2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2E2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E2F2981F75B00B8CF94 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E302981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E312981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E322981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - C1004E332981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E342981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C1004E352981F77B00B8CF94 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C101947127DD473C004E7EB8 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1438,7 +1345,6 @@ C13DA2AF24F6C7690098BB29 /* UIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; C148CEE624FD91BD00711B3B /* DeliveryUncertaintyAlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeliveryUncertaintyAlertManager.swift; sourceTree = ""; }; C14952142995822A0095AA84 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - C14952152995822A0095AA84 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; C155A8F32986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; C155A8F42986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; C155A8F52986396E009BD257 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/ckcomplication.strings; sourceTree = ""; }; @@ -1446,7 +1352,6 @@ C159C8212867859800A86EC0 /* MockKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = MockKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C159C82E286787EF00A86EC0 /* LoopKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C15A581F29C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; - C15A582029C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; C15A582129C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C15A582229C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C15A582329C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1462,7 +1367,6 @@ C16FC0AF2A99392F0025E239 /* live_capture_input.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = live_capture_input.json; sourceTree = ""; }; C1742331259BEADC00399C9D /* ManualEntryDoseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualEntryDoseView.swift; sourceTree = ""; }; C174233B259BEB0F00399C9D /* ManualEntryDoseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualEntryDoseViewModel.swift; sourceTree = ""; }; - C174571329830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C174571429830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; C174571529830930009EFCF2 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C1750AEB255B013300B8011C /* Minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1492,7 +1396,6 @@ C19008FF252271BB00721625 /* SimpleBolusCalculatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleBolusCalculatorTests.swift; sourceTree = ""; }; C191D2A025B3ACAA00C26C0B /* DosingStrategySelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DosingStrategySelectionView.swift; sourceTree = ""; }; C192C5FE29C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; - C192C5FF29C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; C192C60029C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; C192C60129C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; }; C192C60229C78711001EFEA6 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; @@ -1506,7 +1409,6 @@ C19E387B298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; C19E387C298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; C19E387D298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; - C19E387E298638CE00851444 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; C19F496225630504003632D7 /* Minizip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Minizip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C1AD41FF256D61E500164DDD /* Comparable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Comparable.swift; sourceTree = ""; }; C1AD48CE298639890013B994 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1515,7 +1417,6 @@ C1AD630029BBFAA80002685D /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/ckcomplication.strings; sourceTree = ""; }; C1AF062229426300002C1B19 /* ManualGlucoseEntryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManualGlucoseEntryRow.swift; sourceTree = ""; }; C1B0CFD429C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - C1B0CFD529C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; C1B0CFD629C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; C1B0CFD729C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; C1B0CFD829C786BF0045B04D /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; @@ -1530,7 +1431,6 @@ C1BCB5AF298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; C1BCB5B0298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; C1BCB5B1298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; - C1BCB5B2298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; C1BCB5B3298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; C1BCB5B4298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; C1BCB5B5298309C4001C50FF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1542,13 +1442,9 @@ C1C247892995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; C1C2478B2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; C1C2478C2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1C2478D2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; - C1C2478E2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/MainInterface.strings; sourceTree = ""; }; - C1C2478F2995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; C1C247902995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; C1C247912995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; C1C31277297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; - C1C31278297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/MainInterface.strings; sourceTree = ""; }; C1C31279297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Interface.strings; sourceTree = ""; }; C1C3127A297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Main.strings; sourceTree = ""; }; C1C3127C297E4BFE00296DA4 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; @@ -1576,7 +1472,6 @@ C1E3862428247B7100F561A4 /* StoredLoopNotRunningNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoredLoopNotRunningNotification.swift; sourceTree = ""; }; C1E5A6DE29C7870100703C90 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; C1E693CA29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - C1E693CB29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; C1E693CC29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; C1E693CD29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; C1E693CE29C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; @@ -1597,7 +1492,6 @@ C1F48FF62995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; C1F48FF72995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; C1F48FF82995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; - C1F48FF92995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; C1F48FFA2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; C1F48FFB2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; C1F48FFC2995821600C8BD69 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1625,7 +1519,6 @@ C1FDCC0229C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/InfoPlist.strings; sourceTree = ""; }; C1FDCC0329C786F90056E652 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Interface.strings; sourceTree = ""; }; C1FF3D4929C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; - C1FF3D4A29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; C1FF3D4B29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; C1FF3D4C29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; C1FF3D4D29C786A900BDC1EC /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1681,13 +1574,11 @@ E9C58A7B24DB529A00487A17 /* insulin_effect.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = insulin_effect.json; sourceTree = ""; }; F5D9C01727DABBE0002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Intents.strings; sourceTree = ""; }; F5D9C01927DABBE0002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; - F5D9C01A27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/MainInterface.strings; sourceTree = ""; }; F5D9C01B27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Interface.strings; sourceTree = ""; }; F5D9C01C27DABBE1002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Main.strings; sourceTree = ""; }; F5D9C01E27DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5D9C01F27DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5D9C02027DABBE2002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; - F5D9C02127DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5D9C02227DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5D9C02327DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; F5D9C02427DABBE3002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1695,13 +1586,11 @@ F5D9C02727DABBE4002E48F6 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDD327E1D71C0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Intents.strings; sourceTree = ""; }; F5E0BDD527E1D71D0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; - F5E0BDD627E1D71D0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/MainInterface.strings; sourceTree = ""; }; F5E0BDD727E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Interface.strings; sourceTree = ""; }; F5E0BDD827E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; F5E0BDDA27E1D71F0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDDB27E1D7200033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDDC27E1D7200033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; - F5E0BDDD27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDDE27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDDF27E1D7210033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; F5E0BDE027E1D7220033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -1786,18 +1675,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4F70C1D91DE8DCA7006380B7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C159C825286785E000A86EC0 /* LoopUI.framework in Frameworks */, - C1CCF1172858FBAD0035389C /* SwiftCharts in Frameworks */, - C159C828286785E100A86EC0 /* LoopKitUI.framework in Frameworks */, - C159C82A286785E300A86EC0 /* MockKitUI.framework in Frameworks */, - C159C82D2867876500A86EC0 /* NotificationCenter.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4F7528871DFE1DC600C322D6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1991,7 +1868,6 @@ C18A491122FCC20B00FDA733 /* Scripts */, 4FF4D0FA1E1834BD00846527 /* Common */, 43776F8E1B8022E90074EA36 /* Loop */, - 4F70C1DF1DE8DCA7006380B7 /* Loop Status Extension */, 43D9FFD021EAE05D00AF44BF /* LoopCore */, 4F75288C1DFE1DC600C322D6 /* LoopUI */, 43A943731B926B7B0051FA24 /* WatchApp */, @@ -2015,7 +1891,6 @@ 43A943721B926B7B0051FA24 /* WatchApp.app */, 43A9437E1B926B7B0051FA24 /* WatchApp Extension.appex */, 43E2D90B1D20C581004DA55F /* LoopTests.xctest */, - 4F70C1DC1DE8DCA7006380B7 /* Loop Status Extension.appex */, 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */, 43D9FFCF21EAE05D00AF44BF /* LoopCore.framework */, 43D9002A21EB209400AF44BF /* LoopCore.framework */, @@ -2361,21 +2236,6 @@ path = LoopTests; sourceTree = ""; }; - 4F70C1DF1DE8DCA7006380B7 /* Loop Status Extension */ = { - isa = PBXGroup; - children = ( - 7D7076371FE06EDE004AC8EA /* Localizable.strings */, - 4F70C1FD1DE8E662006380B7 /* Loop Status Extension.entitlements */, - 4F70C1E51DE8DCA7006380B7 /* Info.plist */, - C1004DF62981F5B700B8CF94 /* InfoPlist.strings */, - 43BFF0CC1E466C8400FF19A9 /* StateColorPalette.swift */, - 43FCEEB0221A863E0013DD30 /* StatusChartsManager.swift */, - 4F70C1E01DE8DCA7006380B7 /* StatusViewController.swift */, - 4F70C1E21DE8DCA7006380B7 /* MainInterface.storyboard */, - ); - path = "Loop Status Extension"; - sourceTree = ""; - }; 4F75288C1DFE1DC600C322D6 /* LoopUI */ = { isa = PBXGroup; children = ( @@ -2962,7 +2822,6 @@ dependencies = ( 4F7528971DFE1ED400C322D6 /* PBXTargetDependency */, 43A943931B926B7B0051FA24 /* PBXTargetDependency */, - 4F70C1E71DE8DCA7006380B7 /* PBXTargetDependency */, 43D9FFD521EAE05D00AF44BF /* PBXTargetDependency */, E9B07F93253BBA6500BAD8F8 /* PBXTargetDependency */, 14B1736828AED9EE006CCD7C /* PBXTargetDependency */, @@ -3073,27 +2932,6 @@ productReference = 43E2D90B1D20C581004DA55F /* LoopTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 4F70C1DB1DE8DCA7006380B7 /* Loop Status Extension */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4F70C1EB1DE8DCA8006380B7 /* Build configuration list for PBXNativeTarget "Loop Status Extension" */; - buildPhases = ( - 4F70C1D81DE8DCA7006380B7 /* Sources */, - 4F70C1D91DE8DCA7006380B7 /* Frameworks */, - 4F70C1DA1DE8DCA7006380B7 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C11B9D592867781E00500CF8 /* PBXTargetDependency */, - ); - name = "Loop Status Extension"; - packageProductDependencies = ( - C1CCF1162858FBAD0035389C /* SwiftCharts */, - ); - productName = "Loop Status Extension"; - productReference = 4F70C1DC1DE8DCA7006380B7 /* Loop Status Extension.appex */; - productType = "com.apple.product-type.app-extension"; - }; 4F75288A1DFE1DC600C322D6 /* LoopUI */ = { isa = PBXNativeTarget; buildConfigurationList = 4F7528921DFE1DC600C322D6 /* Build configuration list for PBXNativeTarget "LoopUI" */; @@ -3218,16 +3056,6 @@ ProvisioningStyle = Automatic; TestTargetID = 43776F8B1B8022E90074EA36; }; - 4F70C1DB1DE8DCA7006380B7 = { - CreatedOnToolsVersion = 8.1; - LastSwiftMigration = 1020; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.ApplicationGroups.iOS = { - enabled = 1; - }; - }; - }; 4F75288A1DFE1DC600C322D6 = { CreatedOnToolsVersion = 8.1; LastSwiftMigration = 1020; @@ -3279,7 +3107,6 @@ projectRoot = ""; targets = ( 43776F8B1B8022E90074EA36 /* Loop */, - 4F70C1DB1DE8DCA7006380B7 /* Loop Status Extension */, 43A943711B926B7B0051FA24 /* WatchApp */, 43A9437D1B926B7B0051FA24 /* WatchApp Extension */, 14B1735B28AED9EC006CCD7C /* Loop Widget Extension */, @@ -3383,18 +3210,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4F70C1DA1DE8DCA7006380B7 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B491B09E24D0B600004CBE8F /* DerivedAssets.xcassets in Resources */, - 4F70C1E41DE8DCA7006380B7 /* MainInterface.storyboard in Resources */, - B405E35B24D2E05600DD058D /* HUDAssets.xcassets in Resources */, - 7D7076351FE06EDE004AC8EA /* Localizable.strings in Resources */, - C1004DF82981F5B700B8CF94 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4F7528891DFE1DC600C322D6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -3969,29 +3784,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4F70C1D81DE8DCA7006380B7 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43FCEEB1221A863E0013DD30 /* StatusChartsManager.swift in Sources */, - 43C05CAC21EB2B8B006FB252 /* NSBundle.swift in Sources */, - 4FAC02541E22F6B20087A773 /* NSTimeInterval.swift in Sources */, - 4F2C15831E0757E600E160D4 /* HKUnit.swift in Sources */, - C1FB4290217922A100FAB378 /* PumpManagerUI.swift in Sources */, - 1D4990E824A25931005CC357 /* FeatureFlags.swift in Sources */, - A90EF53C25DEF06200F32D61 /* PluginManager.swift in Sources */, - C1FB428D21791D2500FAB378 /* PumpManager.swift in Sources */, - 43E93FB51E4675E800EAB8DB /* NumberFormatter.swift in Sources */, - 4345E3FB21F04911009E00E5 /* UIColor+HIG.swift in Sources */, - 43BFF0CD1E466C8400FF19A9 /* StateColorPalette.swift in Sources */, - 4FC8C8021DEB943800A1452E /* NSUserDefaults+StatusExtension.swift in Sources */, - 4F70C2121DE900EA006380B7 /* StatusExtensionContext.swift in Sources */, - 1D3F0F7626D59DCD004A5960 /* Debug.swift in Sources */, - 4F70C1E11DE8DCA7006380B7 /* StatusViewController.swift in Sources */, - A90EF54425DEF0A000F32D61 /* OSLog.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 4F7528861DFE1DC600C322D6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4083,11 +3875,6 @@ target = 43776F8B1B8022E90074EA36 /* Loop */; targetProxy = 43E2D9101D20C581004DA55F /* PBXContainerItemProxy */; }; - 4F70C1E71DE8DCA7006380B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4F70C1DB1DE8DCA7006380B7 /* Loop Status Extension */; - targetProxy = 4F70C1E61DE8DCA7006380B7 /* PBXContainerItemProxy */; - }; 4F7528971DFE1ED400C322D6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 4F75288A1DFE1DC600C322D6 /* LoopUI */; @@ -4098,11 +3885,6 @@ target = 43D9001A21EB209400AF44BF /* LoopCore-watchOS */; targetProxy = C117ED70232EDB3200DA57CD /* PBXContainerItemProxy */; }; - C11B9D592867781E00500CF8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 4F75288A1DFE1DC600C322D6 /* LoopUI */; - targetProxy = C11B9D582867781E00500CF8 /* PBXContainerItemProxy */; - }; C1CCF1152858FA900035389C /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 43D9FFCE21EAE05D00AF44BF /* LoopCore */; @@ -4298,35 +4080,6 @@ name = InfoPlist.strings; sourceTree = ""; }; - 4F70C1E21DE8DCA7006380B7 /* MainInterface.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 4F70C1E31DE8DCA7006380B7 /* Base */, - 7DD382781F8DBFC60071272B /* es */, - 7D68AAAB1FE2DB0A00522C49 /* ru */, - 7D23668621250D180028B67D /* fr */, - 7D23669621250D230028B67D /* de */, - 7D2366A621250D2C0028B67D /* zh-Hans */, - 7D2366B821250D360028B67D /* it */, - 7D2366C621250D3F0028B67D /* nl */, - 7D2366D621250D4A0028B67D /* nb */, - 7D199D94212A067600241026 /* pl */, - 7D9BEEDA2335A522005DCFD6 /* en */, - 7D9BEF162335EC4B005DCFD6 /* ja */, - 7D9BEF2C2335EC59005DCFD6 /* pt-BR */, - 7D9BEF422335EC62005DCFD6 /* vi */, - 7D9BEF582335EC6E005DCFD6 /* da */, - 7D9BEF6E2335EC7D005DCFD6 /* sv */, - 7D9BEF842335EC8B005DCFD6 /* fi */, - 7D9BF13C23370E8B005DCFD6 /* ro */, - F5D9C01A27DABBE1002E48F6 /* tr */, - F5E0BDD627E1D71D0033557E /* he */, - C1C31278297E4BFE00296DA4 /* ar */, - C1C2478E2995823200371B88 /* sk */, - ); - name = MainInterface.storyboard; - sourceTree = ""; - }; 63F5E17A297DDF3900A62D4B /* ckcomplication.strings */ = { isa = PBXVariantGroup; children = ( @@ -4347,35 +4100,6 @@ name = ckcomplication.strings; sourceTree = ""; }; - 7D7076371FE06EDE004AC8EA /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 7D7076361FE06EDE004AC8EA /* es */, - 7D68AAAD1FE2E8D400522C49 /* ru */, - 7D23667821250C2D0028B67D /* Base */, - 7D23668B21250D180028B67D /* fr */, - 7D23669B21250D230028B67D /* de */, - 7D2366AB21250D2D0028B67D /* zh-Hans */, - 7D2366BC21250D360028B67D /* it */, - 7D2366CB21250D400028B67D /* nl */, - 7D2366DB21250D4A0028B67D /* nb */, - 7D199D99212A067600241026 /* pl */, - 7D9BEED82335A4F7005DCFD6 /* en */, - 7D9BEF1E2335EC4D005DCFD6 /* ja */, - 7D9BEF342335EC59005DCFD6 /* pt-BR */, - 7D9BEF4A2335EC63005DCFD6 /* vi */, - 7D9BEF602335EC6F005DCFD6 /* da */, - 7D9BEF762335EC7D005DCFD6 /* sv */, - 7D9BEF8C2335EC8C005DCFD6 /* fi */, - 7D9BF14223370E8C005DCFD6 /* ro */, - F5D9C02127DABBE3002E48F6 /* tr */, - F5E0BDDD27E1D7210033557E /* he */, - C174571329830930009EFCF2 /* ar */, - C1C2478D2995823200371B88 /* sk */, - ); - name = Localizable.strings; - sourceTree = ""; - }; 7D7076471FE06EE0004AC8EA /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -4646,32 +4370,6 @@ name = Localizable.strings; sourceTree = ""; }; - C1004DF62981F5B700B8CF94 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - C1004DF72981F5B700B8CF94 /* da */, - C1004E002981F67A00B8CF94 /* sv */, - C1004E082981F6A100B8CF94 /* ro */, - C1004E102981F6E200B8CF94 /* nl */, - C1004E182981F6F500B8CF94 /* nb */, - C1004E202981F72D00B8CF94 /* fr */, - C1004E272981F74300B8CF94 /* fi */, - C1004E2D2981F75B00B8CF94 /* es */, - C1004E332981F77B00B8CF94 /* de */, - C1BCB5B2298309C4001C50FF /* it */, - C19E387E298638CE00851444 /* tr */, - C1F48FF92995821600C8BD69 /* pl */, - C14952152995822A0095AA84 /* ru */, - C1C2478F2995823200371B88 /* sk */, - C15A582029C7866600D3A5A1 /* ar */, - C1FF3D4A29C786A900BDC1EC /* he */, - C1B0CFD529C786BF0045B04D /* ja */, - C1E693CB29C786E200410918 /* pt-BR */, - C192C5FF29C78711001EFEA6 /* vi */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; C11613472983096D00777E7C /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -5355,58 +5053,6 @@ }; name = Release; }; - 4F70C1E91DE8DCA8006380B7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "Loop Status Extension/Loop Status Extension.entitlements"; - CODE_SIGN_IDENTITY = "$(LOOP_CODE_SIGN_IDENTITY_DEBUG)"; - CODE_SIGN_STYLE = "$(LOOP_CODE_SIGN_STYLE)"; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Loop Status Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "$(MAIN_APP_BUNDLE_IDENTIFIER).statuswidget"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "$(LOOP_PROVISIONING_PROFILE_SPECIFIER_STATUS_EXTENSION_DEBUG)"; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Debug; - }; - 4F70C1EA1DE8DCA8006380B7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "Loop Status Extension/Loop Status Extension.entitlements"; - CODE_SIGN_IDENTITY = "$(LOOP_CODE_SIGN_IDENTITY_RELEASE)"; - CODE_SIGN_STYLE = "$(LOOP_CODE_SIGN_STYLE)"; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Loop Status Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "$(MAIN_APP_BUNDLE_IDENTIFIER).statuswidget"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "$(LOOP_PROVISIONING_PROFILE_SPECIFIER_STATUS_EXTENSION_RELEASE)"; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Release; - }; 4F7528901DFE1DC600C322D6 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -5593,32 +5239,6 @@ }; name = Testflight; }; - B4E7CF932AD00A39009B4DF2 /* Testflight */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = "Loop Status Extension/Loop Status Extension.entitlements"; - CODE_SIGN_IDENTITY = "$(LOOP_CODE_SIGN_IDENTITY_RELEASE)"; - CODE_SIGN_STYLE = "$(LOOP_CODE_SIGN_STYLE)"; - DEVELOPMENT_TEAM = "$(LOOP_DEVELOPMENT_TEAM)"; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "Loop Status Extension/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = "$(MAIN_APP_BUNDLE_IDENTIFIER).statuswidget"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "$(LOOP_PROVISIONING_PROFILE_SPECIFIER_STATUS_EXTENSION_RELEASE)"; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SUPPORTS_MACCATALYST = NO; - SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; - SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Testflight; - }; B4E7CF942AD00A39009B4DF2 /* Testflight */ = { isa = XCBuildConfiguration; buildSettings = { @@ -5966,16 +5586,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 4F70C1EB1DE8DCA8006380B7 /* Build configuration list for PBXNativeTarget "Loop Status Extension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4F70C1E91DE8DCA8006380B7 /* Debug */, - B4E7CF932AD00A39009B4DF2 /* Testflight */, - 4F70C1EA1DE8DCA8006380B7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4F7528921DFE1DC600C322D6 /* Build configuration list for PBXNativeTarget "LoopUI" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -6036,11 +5646,6 @@ package = C1735B1C2A0809830082BB8A /* XCRemoteSwiftPackageReference "ZIPFoundation" */; productName = ZIPFoundation; }; - C1CCF1162858FBAD0035389C /* SwiftCharts */ = { - isa = XCSwiftPackageProductDependency; - package = C1CCF10B2858F4F70035389C /* XCRemoteSwiftPackageReference "SwiftCharts" */; - productName = SwiftCharts; - }; C1D6EE9F2A06C7270047DE5C /* MKRingProgressView */ = { isa = XCSwiftPackageProductDependency; package = C1D6EE9E2A06C7270047DE5C /* XCRemoteSwiftPackageReference "MKRingProgressView" */; diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index c95c4e8808..d504d18962 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -175,7 +175,7 @@ final class LoopDataManager: ObservableObject { self.analyticsServicesManager = analyticsServicesManager self.carbAbsorptionModel = carbAbsorptionModel self.usePositiveMomentumAndRCForManualBoluses = usePositiveMomentumAndRCForManualBoluses - + // Required for device settings in stored dosing decisions UIDevice.current.isBatteryMonitoringEnabled = true @@ -199,6 +199,7 @@ final class LoopDataManager: ObservableObject { ) { (note) in Task { @MainActor in self.logger.default("Received notification of glucose samples changing") + self.restartGlucoseValueStalenessTimer() await self.updateDisplayState() self.notify(forChange: .glucose) } @@ -235,8 +236,6 @@ final class LoopDataManager: ObservableObject { } } .store(in: &cancellables) - - } // MARK: - Calculation state @@ -643,9 +642,41 @@ final class LoopDataManager: ObservableObject { await self.dosingDecisionStore.storeDosingDecision(dosingDecision) } } + + // MARK: - Glucose Staleness + + private var glucoseValueStalenessTimer: Timer? + + private func restartGlucoseValueStalenessTimer() { + stopGlucoseValueStalenessTimer() + startGlucoseValueStalenessTimerIfNeeded() + } + + private func stopGlucoseValueStalenessTimer() { + glucoseValueStalenessTimer?.invalidate() + glucoseValueStalenessTimer = nil + } + + func startGlucoseValueStalenessTimerIfNeeded() { + guard let fireDate = glucoseValueStaleDate, + glucoseValueStalenessTimer == nil + else { return } + + glucoseValueStalenessTimer = Timer(fire: fireDate, interval: 0, repeats: false) { (_) in + Task { @MainActor in + self.notify(forChange: .glucose) + } + } + RunLoop.main.add(glucoseValueStalenessTimer!, forMode: .default) + } + + private var glucoseValueStaleDate: Date? { + guard let latestGlucoseDataDate = glucoseStore.latestGlucose?.startDate else { return nil } + return latestGlucoseDataDate.addingTimeInterval(LoopAlgorithm.inputDataRecencyInterval) + } } -// MARK: Background task management +// MARK: - Background task management extension LoopDataManager: PersistenceControllerDelegate { func persistenceControllerWillSave(_ controller: PersistenceController) { startBackgroundTask() diff --git a/Loop/Managers/Store Protocols/GlucoseStoreProtocol.swift b/Loop/Managers/Store Protocols/GlucoseStoreProtocol.swift index 8e15e5145f..0f15a19f56 100644 --- a/Loop/Managers/Store Protocols/GlucoseStoreProtocol.swift +++ b/Loop/Managers/Store Protocols/GlucoseStoreProtocol.swift @@ -8,8 +8,10 @@ import LoopKit import HealthKit +import LoopAlgorithm protocol GlucoseStoreProtocol: AnyObject { + var latestGlucose: GlucoseSampleValue? { get } func getGlucoseSamples(start: Date?, end: Date?) async throws -> [StoredGlucoseSample] func addGlucoseSamples(_ samples: [NewGlucoseSample]) async throws -> [StoredGlucoseSample] } diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index 8542ff1649..90a9dc95fa 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -268,6 +268,7 @@ final class StatusTableViewController: LoopChartsTableViewController { var onscreen: Bool = false { didSet { updateHUDActive() + loopManager.startGlucoseValueStalenessTimerIfNeeded() } } @@ -590,10 +591,10 @@ final class StatusTableViewController: LoopChartsTableViewController { hudView.cgmStatusHUD.setGlucoseQuantity(glucose.quantity.doubleValue(for: unit), at: glucose.startDate, unit: unit, - staleGlucoseAge: LoopAlgorithm.inputDataRecencyInterval, glucoseDisplay: self.deviceManager.glucoseDisplay(for: glucose), wasUserEntered: glucose.wasUserEntered, - isDisplayOnly: glucose.isDisplayOnly) + isDisplayOnly: glucose.isDisplayOnly, + isGlucoseValueStale: self.deviceManager.isGlucoseValueStale) } hudView.cgmStatusHUD.presentStatusHighlight(self.deviceManager.cgmStatusHighlight) hudView.cgmStatusHUD.presentStatusBadge(self.deviceManager.cgmStatusBadge) @@ -751,8 +752,9 @@ final class StatusTableViewController: LoopChartsTableViewController { let hudIsVisible = self.shouldShowHUD let statusIsVisible = self.shouldShowStatus - + hudView?.cgmStatusHUD?.isVisible = hudIsVisible + hudView?.cgmStatusHUD.isGlucoseValueStale = deviceManager.isGlucoseValueStale tableView.beginUpdates() @@ -1833,8 +1835,7 @@ final class StatusTableViewController: LoopChartsTableViewController { present(alert, animated: true, completion: nil) } } - - + // MARK: - Debug Scenarios and Simulated Core Data var lastOrientation: UIDeviceOrientation? diff --git a/LoopTests/ViewModels/CGMStatusHUDViewModelTests.swift b/LoopTests/ViewModels/CGMStatusHUDViewModelTests.swift index ea743eb008..9728578c0c 100644 --- a/LoopTests/ViewModels/CGMStatusHUDViewModelTests.swift +++ b/LoopTests/ViewModels/CGMStatusHUDViewModelTests.swift @@ -14,12 +14,9 @@ import LoopKit class CGMStatusHUDViewModelTests: XCTestCase { private var viewModel: CGMStatusHUDViewModel! - private var staleGlucoseValueHandlerWasCalled = false - private var testExpect: XCTestExpectation! override func setUpWithError() throws { - staleGlucoseValueHandlerWasCalled = false - viewModel = CGMStatusHUDViewModel(staleGlucoseValueHandler: staleGlucoseValueHandler) + viewModel = CGMStatusHUDViewModel() } override func tearDownWithError() throws { @@ -45,14 +42,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { isLocal: true, glucoseRangeCategory: .urgentLow) let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .minutes(15) viewModel.setGlucoseQuantity(90, at: glucoseStartDate, unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: false, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) XCTAssertNil(viewModel.manualGlucoseTrendIconOverride) XCTAssertNil(viewModel.statusHighlight) @@ -70,14 +66,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { isLocal: true, glucoseRangeCategory: .urgentLow) let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .minutes(-1) viewModel.setGlucoseQuantity(90, at: glucoseStartDate, unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: false, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: true) XCTAssertNil(viewModel.manualGlucoseTrendIconOverride) XCTAssertNil(viewModel.statusHighlight) @@ -90,35 +85,6 @@ class CGMStatusHUDViewModelTests: XCTestCase { XCTAssertEqual(viewModel.unitsString, HKUnit.milligramsPerDeciliter.localizedShortUnitString) } - func testSetGlucoseQuantityCGMStaleDelayed() { - testExpect = self.expectation(description: #function) - let glucoseDisplay = TestGlucoseDisplay(isStateValid: true, - trendType: .down, - trendRate: HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: -1.0), - isLocal: true, - glucoseRangeCategory: .urgentLow) - let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .seconds(0.01) - viewModel.setGlucoseQuantity(90, - at: glucoseStartDate, - unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, - glucoseDisplay: glucoseDisplay, - wasUserEntered: false, - isDisplayOnly: false) - wait(for: [testExpect], timeout: 1.0) - XCTAssertTrue(staleGlucoseValueHandlerWasCalled) - XCTAssertNil(viewModel.manualGlucoseTrendIconOverride) - XCTAssertNil(viewModel.statusHighlight) - XCTAssertEqual(viewModel.glucoseValueString, "– – –") - XCTAssertNil(viewModel.trend) - XCTAssertNotEqual(viewModel.glucoseTrendTintColor, glucoseDisplay.glucoseRangeCategory?.trendColor) - XCTAssertEqual(viewModel.glucoseTrendTintColor, .glucoseTintColor) - XCTAssertNotEqual(viewModel.glucoseValueTintColor, glucoseDisplay.glucoseRangeCategory?.glucoseColor) - XCTAssertEqual(viewModel.glucoseValueTintColor, .label) - XCTAssertEqual(viewModel.unitsString, HKUnit.milligramsPerDeciliter.localizedShortUnitString) - } - func testSetGlucoseQuantityManualGlucose() { let glucoseDisplay = TestGlucoseDisplay(isStateValid: true, trendType: .down, @@ -126,14 +92,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { isLocal: true, glucoseRangeCategory: .urgentLow) let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .minutes(15) viewModel.setGlucoseQuantity(90, at: glucoseStartDate, unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) XCTAssertNil(viewModel.manualGlucoseTrendIconOverride) XCTAssertNil(viewModel.statusHighlight) @@ -152,14 +117,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { isLocal: true, glucoseRangeCategory: .urgentLow) let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .minutes(15) viewModel.setGlucoseQuantity(90, at: glucoseStartDate, unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: true) + isDisplayOnly: true, + isGlucoseValueStale: false) XCTAssertNil(viewModel.manualGlucoseTrendIconOverride) XCTAssertEqual(viewModel.glucoseValueString, "90") @@ -191,14 +155,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { isLocal: true, glucoseRangeCategory: .urgentLow) let glucoseStartDate = Date() - let staleGlucoseAge: TimeInterval = .minutes(15) viewModel.setGlucoseQuantity(90, at: glucoseStartDate, unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) XCTAssertEqual(viewModel.glucoseValueString, "90") XCTAssertNil(viewModel.trend) @@ -222,14 +185,13 @@ class CGMStatusHUDViewModelTests: XCTestCase { trendRate: HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: -1.0), isLocal: true, glucoseRangeCategory: .urgentLow) - let staleGlucoseAge: TimeInterval = .minutes(15) viewModel.setGlucoseQuantity(90, at: Date(), unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) // check that manual glucose is displayed XCTAssertEqual(viewModel.glucoseValueString, "90") @@ -255,10 +217,10 @@ class CGMStatusHUDViewModelTests: XCTestCase { viewModel.setGlucoseQuantity(95, at: Date(), unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: false, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) // check that status highlight is displayed XCTAssertEqual(viewModel.glucoseValueString, "95") @@ -291,10 +253,10 @@ class CGMStatusHUDViewModelTests: XCTestCase { viewModel.setGlucoseQuantity(100, at: Date(), unit: .milligramsPerDeciliter, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: false) // check that manual glucose is still displayed (again with status highlight icon) XCTAssertEqual(viewModel.glucoseValueString, "100") @@ -307,10 +269,10 @@ class CGMStatusHUDViewModelTests: XCTestCase { viewModel.setGlucoseQuantity(100, at: Date(), unit: .milligramsPerDeciliter, - staleGlucoseAge: .minutes(-1), glucoseDisplay: glucoseDisplay, wasUserEntered: true, - isDisplayOnly: false) + isDisplayOnly: false, + isGlucoseValueStale: true) // check that the status highlight is displayed XCTAssertEqual(viewModel.statusHighlight as! TestStatusHighlight, statusHighlight2) @@ -319,11 +281,6 @@ class CGMStatusHUDViewModelTests: XCTestCase { } extension CGMStatusHUDViewModelTests { - func staleGlucoseValueHandler() { - self.staleGlucoseValueHandlerWasCalled = true - testExpect.fulfill() - } - struct TestStatusHighlight: DeviceStatusHighlight, Equatable { var localizedMessage: String diff --git a/LoopUI/ViewModel/CGMStatusHUDViewModel.swift b/LoopUI/ViewModel/CGMStatusHUDViewModel.swift index a26834e4b3..06dc1d456d 100644 --- a/LoopUI/ViewModel/CGMStatusHUDViewModel.swift +++ b/LoopUI/ViewModel/CGMStatusHUDViewModel.swift @@ -32,15 +32,12 @@ public class CGMStatusHUDViewModel { return manualGlucoseTrendIconOverride } - private var glucoseValueCurrent: Bool { - guard let isStaleAt = isStaleAt else { return true } - return Date() < isStaleAt - } + var isGlucoseValueStale: Bool = false private var isManualGlucose: Bool = false private var isManualGlucoseCurrent: Bool { - return isManualGlucose && glucoseValueCurrent + return isManualGlucose && !isGlucoseValueStale } var manualGlucoseTrendIconOverride: UIImage? @@ -70,58 +67,17 @@ public class CGMStatusHUDViewModel { } } - var isVisible: Bool = true { - didSet { - if oldValue != isVisible { - if !isVisible { - stalenessTimer?.invalidate() - stalenessTimer = nil - } else { - startStalenessTimerIfNeeded() - } - } - } - } - - private var stalenessTimer: Timer? - - private var isStaleAt: Date? { - didSet { - if oldValue != isStaleAt { - stalenessTimer?.invalidate() - stalenessTimer = nil - } - } - } + var isVisible: Bool = true - private func startStalenessTimerIfNeeded() { - if let fireDate = isStaleAt, - isVisible, - stalenessTimer == nil - { - stalenessTimer = Timer(fire: fireDate, interval: 0, repeats: false) { (_) in - self.displayStaleGlucoseValue() - self.staleGlucoseValueHandler() - } - RunLoop.main.add(stalenessTimer!, forMode: .default) - } - } - private lazy var timeFormatter = DateFormatter(timeStyle: .short) - - var staleGlucoseValueHandler: () -> Void - - init(staleGlucoseValueHandler: @escaping () -> Void) { - self.staleGlucoseValueHandler = staleGlucoseValueHandler - } func setGlucoseQuantity(_ glucoseQuantity: Double, at glucoseStartDate: Date, unit: HKUnit, - staleGlucoseAge: TimeInterval, glucoseDisplay: GlucoseDisplayable?, wasUserEntered: Bool, - isDisplayOnly: Bool) + isDisplayOnly: Bool, + isGlucoseValueStale: Bool) { var accessibilityStrings = [String]() @@ -131,14 +87,12 @@ public class CGMStatusHUDViewModel { let time = timeFormatter.string(from: glucoseStartDate) - isStaleAt = glucoseStartDate.addingTimeInterval(staleGlucoseAge) - glucoseValueTintColor = glucoseDisplay?.glucoseRangeCategory?.glucoseColor ?? .label + self.isGlucoseValueStale = isGlucoseValueStale let numberFormatter = NumberFormatter.glucoseFormatter(for: unit) if let valueString = numberFormatter.string(from: glucoseQuantity) { - if glucoseValueCurrent { - startStalenessTimerIfNeeded() + if !isGlucoseValueStale { switch glucoseDisplay?.glucoseRangeCategory { case .some(.belowRange): glucoseValueString = LocalizedString("LOW", comment: "String displayed instead of a glucose value below the CGM range") @@ -158,7 +112,7 @@ public class CGMStatusHUDViewModel { if isManualGlucoseCurrent { // a manual glucose value presents any status highlight icon instead of a trend icon setManualGlucoseTrendIconOverride() - } else if let trend = glucoseDisplay?.trendType, glucoseValueCurrent { + } else if let trend = glucoseDisplay?.trendType, !isGlucoseValueStale { self.trend = trend glucoseTrendTintColor = glucoseDisplay?.glucoseRangeCategory?.trendColor ?? .glucoseTintColor accessibilityStrings.append(trend.localizedDescription) diff --git a/LoopUI/Views/CGMStatusHUDView.swift b/LoopUI/Views/CGMStatusHUDView.swift index ad659445fd..5a40459c3c 100644 --- a/LoopUI/Views/CGMStatusHUDView.swift +++ b/LoopUI/Views/CGMStatusHUDView.swift @@ -23,6 +23,15 @@ public final class CGMStatusHUDView: DeviceStatusHUDView, NibLoadable { return 1 } + public var isGlucoseValueStale: Bool { + get { + viewModel.isGlucoseValueStale + } + set { + viewModel.isGlucoseValueStale = newValue + } + } + public var isVisible: Bool { get { viewModel.isVisible @@ -47,9 +56,7 @@ public final class CGMStatusHUDView: DeviceStatusHUDView, NibLoadable { override func setup() { super.setup() statusHighlightView.setIconPosition(.right) - viewModel = CGMStatusHUDViewModel(staleGlucoseValueHandler: { [weak self] in - self?.updateDisplay() - }) + viewModel = CGMStatusHUDViewModel() } override public func tintColorDidChange() { @@ -110,18 +117,18 @@ public final class CGMStatusHUDView: DeviceStatusHUDView, NibLoadable { public func setGlucoseQuantity(_ glucoseQuantity: Double, at glucoseStartDate: Date, unit: HKUnit, - staleGlucoseAge: TimeInterval, glucoseDisplay: GlucoseDisplayable?, wasUserEntered: Bool, - isDisplayOnly: Bool) + isDisplayOnly: Bool, + isGlucoseValueStale: Bool) { viewModel.setGlucoseQuantity(glucoseQuantity, at: glucoseStartDate, unit: unit, - staleGlucoseAge: staleGlucoseAge, glucoseDisplay: glucoseDisplay, wasUserEntered: wasUserEntered, - isDisplayOnly: isDisplayOnly) + isDisplayOnly: isDisplayOnly, + isGlucoseValueStale: isGlucoseValueStale) updateDisplay() }