diff --git a/Loop Status Extension/HKUnit.swift b/Common/Extensions/HKUnit.swift similarity index 93% rename from Loop Status Extension/HKUnit.swift rename to Common/Extensions/HKUnit.swift index ffa2e62951..a4b7df21f6 100644 --- a/Loop Status Extension/HKUnit.swift +++ b/Common/Extensions/HKUnit.swift @@ -11,9 +11,9 @@ import HealthKit // Code in this extension is duplicated from: // https://github.com/LoopKit/LoopKit/blob/master/LoopKit/HKUnit.swift // to avoid pulling in the LoopKit extension since it's not extension-API safe. -public extension HKUnit { +extension HKUnit { // A formatting helper for determining the preferred decimal style for a given unit - var preferredMinimumFractionDigits: Int { + var preferredFractionDigits: Int { if self.unitString == "mg/dL" { return 0 } else { diff --git a/Loop/Extensions/IdentifiableClass.swift b/Common/Extensions/IdentifiableClass.swift similarity index 100% rename from Loop/Extensions/IdentifiableClass.swift rename to Common/Extensions/IdentifiableClass.swift diff --git a/Loop/Extensions/NSBundle.swift b/Common/Extensions/NSBundle.swift similarity index 69% rename from Loop/Extensions/NSBundle.swift rename to Common/Extensions/NSBundle.swift index 3cb84759e2..e9202624d6 100644 --- a/Loop/Extensions/NSBundle.swift +++ b/Common/Extensions/NSBundle.swift @@ -22,7 +22,19 @@ extension Bundle { return String(format: NSLocalizedString("%1$@ v%2$@", comment: "The format string for the app name and version number. (1: bundle name)(2: bundle version)"), bundleDisplayName, shortVersionString) } + private var mainAppBundleIdentifier: String? { + return object(forInfoDictionaryKey: "MainAppBundleIdentifier") as? String + } + var appGroupSuiteName: String { return object(forInfoDictionaryKey: "AppGroupIdentifier") as! String } + + var mainAppUrl: URL? { + if let mainAppBundleIdentifier = mainAppBundleIdentifier { + return URL(string: "\(mainAppBundleIdentifier)://") + } else { + return nil + } + } } diff --git a/Loop/Extensions/NSTimeInterval.swift b/Common/Extensions/NSTimeInterval.swift similarity index 100% rename from Loop/Extensions/NSTimeInterval.swift rename to Common/Extensions/NSTimeInterval.swift diff --git a/Loop/Extensions/NSUserDefaults+StatusExtension.swift b/Common/Extensions/NSUserDefaults+StatusExtension.swift similarity index 86% rename from Loop/Extensions/NSUserDefaults+StatusExtension.swift rename to Common/Extensions/NSUserDefaults+StatusExtension.swift index 76a01b454e..02c9a3b69d 100644 --- a/Loop/Extensions/NSUserDefaults+StatusExtension.swift +++ b/Common/Extensions/NSUserDefaults+StatusExtension.swift @@ -14,6 +14,10 @@ extension UserDefaults { case StatusExtensionContext = "com.loopkit.Loop.StatusExtensionContext" } + var statusExtensionContextObservableKey: String { + return Key.StatusExtensionContext.rawValue + } + var statusExtensionContext: StatusExtensionContext? { get { if let rawValue = dictionary(forKey: Key.StatusExtensionContext.rawValue) { diff --git a/Loop/Extensions/NibLoadable.swift b/Common/Extensions/NibLoadable.swift similarity index 100% rename from Loop/Extensions/NibLoadable.swift rename to Common/Extensions/NibLoadable.swift diff --git a/WatchApp Extension/Models/BolusSuggestionUserInfo.swift b/Common/Models/BolusSuggestionUserInfo.swift similarity index 100% rename from WatchApp Extension/Models/BolusSuggestionUserInfo.swift rename to Common/Models/BolusSuggestionUserInfo.swift diff --git a/WatchApp Extension/Models/CarbEntryUserInfo.swift b/Common/Models/CarbEntryUserInfo.swift similarity index 100% rename from WatchApp Extension/Models/CarbEntryUserInfo.swift rename to Common/Models/CarbEntryUserInfo.swift diff --git a/Loop/Models/GlucoseTrend.swift b/Common/Models/GlucoseTrend.swift similarity index 98% rename from Loop/Models/GlucoseTrend.swift rename to Common/Models/GlucoseTrend.swift index a79e75afa7..99b2999708 100644 --- a/Loop/Models/GlucoseTrend.swift +++ b/Common/Models/GlucoseTrend.swift @@ -9,7 +9,7 @@ import Foundation -enum GlucoseTrend: Int { +public enum GlucoseTrend: Int { case upUpUp = 1 case upUp = 2 case up = 3 diff --git a/WatchApp Extension/Models/SetBolusUserInfo.swift b/Common/Models/SetBolusUserInfo.swift similarity index 100% rename from WatchApp Extension/Models/SetBolusUserInfo.swift rename to Common/Models/SetBolusUserInfo.swift diff --git a/Loop Status Extension/StatusExtensionContext.swift b/Common/Models/StatusExtensionContext.swift similarity index 99% rename from Loop Status Extension/StatusExtensionContext.swift rename to Common/Models/StatusExtensionContext.swift index d733fae7f8..be37aa25d4 100644 --- a/Loop Status Extension/StatusExtensionContext.swift +++ b/Common/Models/StatusExtensionContext.swift @@ -9,6 +9,7 @@ import Foundation import HealthKit +import LoopUI struct ReservoirContext { let startDate: Date diff --git a/WatchApp Extension/Models/WatchContext.swift b/Common/Models/WatchContext.swift similarity index 93% rename from WatchApp Extension/Models/WatchContext.swift rename to Common/Models/WatchContext.swift index f5cbe7176e..e5e7af322f 100644 --- a/WatchApp Extension/Models/WatchContext.swift +++ b/Common/Models/WatchContext.swift @@ -9,7 +9,6 @@ import Foundation import HealthKit - final class WatchContext: NSObject, RawRepresentable { typealias RawValue = [String: Any] @@ -19,7 +18,7 @@ final class WatchContext: NSObject, RawRepresentable { var maxBolus: Double? var glucose: HKQuantity? - var glucoseTrend: GlucoseTrend? + var glucoseTrendRawValue: Int? var eventualGlucose: HKQuantity? var glucoseDate: Date? @@ -64,9 +63,7 @@ final class WatchContext: NSObject, RawRepresentable { } } - if let rawTrend = rawValue["gt"] as? Int { - glucoseTrend = GlucoseTrend(rawValue: rawTrend) - } + glucoseTrendRawValue = rawValue["gt"] as? Int glucoseDate = rawValue["gd"] as? Date IOB = rawValue["iob"] as? Double @@ -98,7 +95,7 @@ final class WatchContext: NSObject, RawRepresentable { raw["gv"] = glucose?.doubleValue(for: unit) } - raw["gt"] = glucoseTrend?.rawValue + raw["gt"] = glucoseTrendRawValue raw["gd"] = glucoseDate raw["iob"] = IOB raw["ld"] = loopLastRunDate diff --git a/Loop Status Extension/Base.lproj/MainInterface.storyboard b/Loop Status Extension/Base.lproj/MainInterface.storyboard index 71370e45c5..05b95fa8dd 100644 --- a/Loop Status Extension/Base.lproj/MainInterface.storyboard +++ b/Loop Status Extension/Base.lproj/MainInterface.storyboard @@ -1,12 +1,11 @@ - - + + - @@ -23,267 +22,8 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -312,11 +52,7 @@ - - - - - + @@ -325,10 +61,4 @@ - - - - - - diff --git a/Loop Status Extension/Info.plist b/Loop Status Extension/Info.plist index 66633dc7e3..9b2b100320 100644 --- a/Loop Status Extension/Info.plist +++ b/Loop Status Extension/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion en + MainAppBundleIdentifier + $(MAIN_APP_BUNDLE_IDENTIFIER) CFBundleDisplayName Loop CFBundleExecutable diff --git a/Loop Status Extension/StatusViewController.swift b/Loop Status Extension/StatusViewController.swift index 0de511aa87..f7123e6c15 100644 --- a/Loop Status Extension/StatusViewController.swift +++ b/Loop Status Extension/StatusViewController.swift @@ -6,38 +6,107 @@ // Copyright © 2016 LoopKit Authors. All rights reserved. // -import UIKit -import NotificationCenter -import HealthKit import CoreData +import HealthKit +import LoopUI +import NotificationCenter +import UIKit class StatusViewController: UIViewController, NCWidgetProviding { - - @IBOutlet weak var loopCompletionHUD: LoopCompletionHUDView! - @IBOutlet weak var glucoseHUD: GlucoseHUDView! - @IBOutlet weak var basalRateHUD: BasalRateHUDView! - @IBOutlet weak var reservoirVolumeHUD: ReservoirVolumeHUDView! - @IBOutlet weak var batteryHUD: BatteryLevelHUDView! + + @IBOutlet weak var hudView: HUDView! @IBOutlet weak var subtitleLabel: UILabel! - + + var statusExtensionContext: StatusExtensionContext? + var defaults: UserDefaults? + final var observationContext = 1 + + var loopCompletionHUD: LoopCompletionHUDView! { + get { + return hudView.loopCompletionHUD + } + } + + var glucoseHUD: GlucoseHUDView! { + get { + return hudView.glucoseHUD + } + } + + var basalRateHUD: BasalRateHUDView! { + get { + return hudView.basalRateHUD + } + } + + var reservoirVolumeHUD: ReservoirVolumeHUDView! { + get { + return hudView.reservoirVolumeHUD + } + } + + var batteryHUD: BatteryLevelHUDView! { + get { + return hudView.batteryHUD + } + } + override func viewDidLoad() { super.viewDidLoad() subtitleLabel.alpha = 0 subtitleLabel.textColor = UIColor.secondaryLabelColor + + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(openLoopApp(_:))) + view.addGestureRecognizer(tapGestureRecognizer) + + defaults = UserDefaults(suiteName: Bundle.main.appGroupSuiteName) + if let defaults = defaults { + defaults.addObserver( + self, + forKeyPath: defaults.statusExtensionContextObservableKey, + options: [], + context: &observationContext) + } + } + + deinit { + if let defaults = defaults { + defaults.removeObserver(self, forKeyPath: defaults.statusExtensionContextObservableKey, context: &observationContext) + } + } + + override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + guard context == &observationContext else { + super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) + return + } + + update() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } - + + @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 { guard - let context = UserDefaults(suiteName: Bundle.main.appGroupSuiteName)?.statusExtensionContext + let context = defaults?.statusExtensionContext else { - completionHandler(NCUpdateResult.failed) - return + return NCUpdateResult.failed } - + // We should never have the case where there's glucose values but no preferred // unit. However, if that case were to happen we might show quantities against // the wrong units and that could be very harmful. So unless there's a preferred @@ -45,8 +114,7 @@ class StatusViewController: UIViewController, NCWidgetProviding { guard let preferredUnitString = context.preferredUnitString else { - completionHandler(NCUpdateResult.failed) - return + return NCUpdateResult.failed } if let glucose = context.latestGlucose { @@ -88,10 +156,9 @@ class StatusViewController: UIViewController, NCWidgetProviding { } else { subtitleLabel.alpha = 0 } - + // Right now we always act as if there's new data. // TODO: keep track of data changes and return .noData if necessary - completionHandler(NCUpdateResult.newData) + return NCUpdateResult.newData } - } diff --git a/Loop.xcconfig b/Loop.xcconfig index d092e89a38..e505022849 100644 --- a/Loop.xcconfig +++ b/Loop.xcconfig @@ -8,4 +8,4 @@ // Change this on first setup to your own unique organization identifier in // reverse-domain name syntax. -MAIN_APP_BUNDLE_IDENTIFIER = com.loopkit +MAIN_APP_BUNDLE_IDENTIFIER = com.jslev9 diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 71b1498b67..8dfcf16ffb 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -27,13 +27,11 @@ 4328E02A1CFBE2C500E199AA /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4328E0241CFBE2C500E199AA /* UIColor.swift */; }; 4328E02B1CFBE2C500E199AA /* WKAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4328E0251CFBE2C500E199AA /* WKAlertAction.swift */; }; 4328E02F1CFBF81800E199AA /* WKInterfaceImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4328E02E1CFBF81800E199AA /* WKInterfaceImage.swift */; }; - 4328E0301CFBFAEB00E199AA /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; 4328E0331CFC091100E199AA /* WatchContext+LoopKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */; }; 4328E0351CFC0AE100E199AA /* WatchDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4328E0341CFC0AE100E199AA /* WatchDataManager.swift */; }; 432E73CB1D24B3D6009AD15D /* RemoteDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432E73CA1D24B3D6009AD15D /* RemoteDataManager.swift */; }; 4331E0781C85302200FBE832 /* CGPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4331E0771C85302200FBE832 /* CGPoint.swift */; }; 4331E07A1C85650D00FBE832 /* ChartAxisValueDoubleLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4331E0791C85650D00FBE832 /* ChartAxisValueDoubleLog.swift */; }; - 4337615F1D52F487004A3647 /* GlucoseHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */; }; 433EA4C21D9F39C900CD78FB /* PumpIDTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 433EA4C11D9F39C900CD78FB /* PumpIDTableViewController.swift */; }; 433EA4C41D9F71C800CD78FB /* CommandResponseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 433EA4C31D9F71C800CD78FB /* CommandResponseViewController.swift */; }; 4346D1E71C77F5FE00ABAFE3 /* ChartTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4346D1E61C77F5FE00ABAFE3 /* ChartTableViewCell.swift */; }; @@ -53,10 +51,8 @@ 435400321C9F745500D5819C /* BolusSuggestionUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435400301C9F744E00D5819C /* BolusSuggestionUserInfo.swift */; }; 435400341C9F878D00D5819C /* SetBolusUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435400331C9F878D00D5819C /* SetBolusUserInfo.swift */; }; 435400351C9F878D00D5819C /* SetBolusUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435400331C9F878D00D5819C /* SetBolusUserInfo.swift */; }; - 4354003A1C9FB81100D5819C /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92501C541832001FFDE1 /* UIColor.swift */; }; 43649A631C7A347F00523D7F /* CollectionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43649A621C7A347F00523D7F /* CollectionType.swift */; }; 436A0DA51D236A2A00104B24 /* LoopError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0DA41D236A2A00104B24 /* LoopError.swift */; }; - 436A0E7B1D7DE13400D6475D /* NSNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */; }; 436FACEE1D0BA636004E2427 /* InsulinDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436FACED1D0BA636004E2427 /* InsulinDataSource.swift */; }; 43776F901B8022E90074EA36 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43776F8F1B8022E90074EA36 /* AppDelegate.swift */; }; 43776F971B8022E90074EA36 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 43776F951B8022E90074EA36 /* Main.storyboard */; }; @@ -65,11 +61,6 @@ 437CCADC1D284B830075D2C3 /* ButtonTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CCADB1D284B830075D2C3 /* ButtonTableViewCell.swift */; }; 437CCADE1D2858FD0075D2C3 /* AuthenticationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CCADD1D2858FD0075D2C3 /* AuthenticationViewController.swift */; }; 437CCAE01D285C7B0075D2C3 /* ServiceAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CCADF1D285C7B0075D2C3 /* ServiceAuthentication.swift */; }; - 437CEEBC1CD6DE6A003C8C80 /* HUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBB1CD6DE6A003C8C80 /* HUDView.swift */; }; - 437CEEBE1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */; }; - 437CEEC01CD6FCD8003C8C80 /* BasalRateHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */; }; - 437CEEC81CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */; }; - 437CEECA1CD84DB7003C8C80 /* BatteryLevelHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC91CD84DB7003C8C80 /* BatteryLevelHUDView.swift */; }; 437CEEE41CDE5C0A003C8C80 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEE31CDE5C0A003C8C80 /* UIImage.swift */; }; 437D9BA31D7BC977007245E8 /* PredictionTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437D9BA21D7BC977007245E8 /* PredictionTableViewController.swift */; }; 43846AD51D8FA67800799272 /* Base.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 43846AD41D8FA67800799272 /* Base.lproj */; }; @@ -82,8 +73,6 @@ 438A95A81D8B9B24009D12E1 /* xDripG5.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 438A95A71D8B9B24009D12E1 /* xDripG5.framework */; }; 438D42F91D7C88BC003244B0 /* PredictionInputEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438D42F81D7C88BC003244B0 /* PredictionInputEffect.swift */; }; 438D42FB1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438D42FA1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift */; }; - 438DADC81CDE8F8B007697A5 /* LoopStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */; }; - 439897351CD2F7DE00223065 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; 439897371CD2F80600223065 /* AnalyticsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897361CD2F80600223065 /* AnalyticsManager.swift */; }; 4398973B1CD2FC2000223065 /* NSDateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4398973A1CD2FC2000223065 /* NSDateFormatter.swift */; }; 43A567691C94880B00334FAC /* LoopDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A567681C94880B00334FAC /* LoopDataManager.swift */; }; @@ -96,7 +85,6 @@ 43A9438E1B926B7B0051FA24 /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A9438D1B926B7B0051FA24 /* ComplicationController.swift */; }; 43A943901B926B7B0051FA24 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 43A9438F1B926B7B0051FA24 /* Assets.xcassets */; }; 43A943941B926B7B0051FA24 /* WatchApp.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 43A943721B926B7B0051FA24 /* WatchApp.app */; }; - 43B371861CE583890013C5A6 /* BasalStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43B371851CE583890013C5A6 /* BasalStateView.swift */; }; 43B371881CE597D10013C5A6 /* ShareClient.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43B371871CE597D10013C5A6 /* ShareClient.framework */; }; 43C0944A1CACCC73001F6403 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C094491CACCC73001F6403 /* NotificationManager.swift */; }; 43C246A81D89990F0031F8D1 /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43C246A71D89990F0031F8D1 /* Crypto.framework */; }; @@ -110,8 +98,6 @@ 43DBF0591C93F73800B3C386 /* CarbEntryTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DBF0581C93F73800B3C386 /* CarbEntryTableViewController.swift */; }; 43DE92591C5479E4001FFDE1 /* CarbEntryUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92581C5479E4001FFDE1 /* CarbEntryUserInfo.swift */; }; 43DE925A1C5479E4001FFDE1 /* CarbEntryUserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92581C5479E4001FFDE1 /* CarbEntryUserInfo.swift */; }; - 43DE925C1C547A20001FFDE1 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE925B1C547A20001FFDE1 /* WatchContext.swift */; }; - 43DE925D1C547A20001FFDE1 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE925B1C547A20001FFDE1 /* WatchContext.swift */; }; 43DE92611C555C26001FFDE1 /* AbsorptionTimeType+CarbKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92601C555C26001FFDE1 /* AbsorptionTimeType+CarbKit.swift */; }; 43E2D8C61D204678004DA55F /* KeychainManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E2D8C51D204678004DA55F /* KeychainManager.swift */; }; 43E2D8C81D208D5B004DA55F /* KeychainManager+Loop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E2D8C71D208D5B004DA55F /* KeychainManager+Loop.swift */; }; @@ -135,9 +121,6 @@ 43E3449F1B9D68E900C85C07 /* StatusTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3449E1B9D68E900C85C07 /* StatusTableViewController.swift */; }; 43E344A41B9E1B1C00C85C07 /* NSUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E344A31B9E1B1C00C85C07 /* NSUserDefaults.swift */; }; 43E397A31D56B9E40028E321 /* Glucose.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E397A21D56B9E40028E321 /* Glucose.swift */; }; - 43EA285F1D50ED3D001BC233 /* GlucoseTrend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */; }; - 43EA28601D50ED4D001BC233 /* GlucoseTrend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */; }; - 43EA28621D517E42001BC233 /* SensorDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA28611D517E42001BC233 /* SensorDisplayable.swift */; }; 43EB40861C82646A00472A8C /* StatusChartManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EB40851C82646A00472A8C /* StatusChartManager.swift */; }; 43F41C331D3A17AA00C11ED6 /* ChartAxisValueDoubleUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F41C321D3A17AA00C11ED6 /* ChartAxisValueDoubleUnit.swift */; }; 43F41C351D3B623800C11ED6 /* ChartPointsTouchHighlightLayerViewCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F41C341D3B623800C11ED6 /* ChartPointsTouchHighlightLayerViewCache.swift */; }; @@ -151,37 +134,52 @@ 43F78D4C1C914197002152D1 /* CarbKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D481C914197002152D1 /* CarbKit.framework */; }; 43F78D4D1C914197002152D1 /* GlucoseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D491C914197002152D1 /* GlucoseKit.framework */; }; 43F78D4F1C914197002152D1 /* LoopKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D4B1C914197002152D1 /* LoopKit.framework */; }; - 43FBEDD81D73843700B21F22 /* LevelMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */; }; 4D3B40041D4A9E1A00BC6334 /* G4ShareSpy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */; }; 4D5B7A4B1D457CCA00796CA9 /* GlucoseG4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5B7A4A1D457CCA00796CA9 /* GlucoseG4.swift */; }; + 4F2C15741E0209F500E160D4 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; + 4F2C15751E0209FA00E160D4 /* GlucoseTrend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA285E1D50ED3D001BC233 /* GlucoseTrend.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 */; }; + 4F2C15971E09E94E00E160D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15961E09E94E00E160D4 /* Assets.xcassets */; }; + 4F2C159A1E0C9E5600E160D4 /* LoopUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4F526D5D1DF0FD6500A04910 /* InsulinKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 43C6407B1DA051850093E25D /* InsulinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 4F526D5F1DF2459000A04910 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.swift */; }; 4F526D611DF8D9A900A04910 /* NetBasal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D601DF8D9A900A04910 /* NetBasal.swift */; }; 4F526D621DF9D95200A04910 /* NSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430DA58D1D4AEC230097D1CA /* NSBundle.swift */; }; 4F70C1DE1DE8DCA7006380B7 /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F70C1DD1DE8DCA7006380B7 /* NotificationCenter.framework */; }; 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, ); }; }; - 4F70C1ED1DE8DEDA006380B7 /* GlucoseHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */; }; - 4F70C1EF1DE8DF15006380B7 /* HUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBB1CD6DE6A003C8C80 /* HUDView.swift */; }; - 4F70C1F01DE8DF22006380B7 /* SensorDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA28611D517E42001BC233 /* SensorDisplayable.swift */; }; - 4F70C1F21DE8DF3A006380B7 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92501C541832001FFDE1 /* UIColor.swift */; }; - 4F70C1F31DE8DF47006380B7 /* NSNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */; }; - 4F70C1F41DE8E3E1006380B7 /* BasalRateHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */; }; - 4F70C1F51DE8E3E9006380B7 /* BasalStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43B371851CE583890013C5A6 /* BasalStateView.swift */; }; - 4F70C1F61DE8E3F1006380B7 /* BatteryLevelHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC91CD84DB7003C8C80 /* BatteryLevelHUDView.swift */; }; - 4F70C1F71DE8E3FD006380B7 /* LevelMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */; }; - 4F70C1F81DE8E403006380B7 /* LoopCompletionHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */; }; - 4F70C1F91DE8E409006380B7 /* LoopStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */; }; - 4F70C1FA1DE8E42D006380B7 /* ReservoirVolumeHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */; }; - 4F70C1FB1DE8E45E006380B7 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; 4F70C1FC1DE8E5FB006380B7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 43776F981B8022E90074EA36 /* Assets.xcassets */; }; - 4F70C20B1DE8E9F4006380B7 /* GlucoseTrend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */; }; 4F70C2101DE8FAC5006380B7 /* StatusExtensionDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F70C20F1DE8FAC5006380B7 /* StatusExtensionDataManager.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 */; }; + 4F7528951DFE1E9B00C322D6 /* LoopUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; }; + 4F75289A1DFE1F6000C322D6 /* BasalRateHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */; }; + 4F75289B1DFE1F6000C322D6 /* BatteryLevelHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC91CD84DB7003C8C80 /* BatteryLevelHUDView.swift */; }; + 4F75289C1DFE1F6000C322D6 /* GlucoseHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */; }; + 4F75289D1DFE1F6000C322D6 /* BaseHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBB1CD6DE6A003C8C80 /* BaseHUDView.swift */; }; + 4F75289E1DFE1F6000C322D6 /* LoopCompletionHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */; }; + 4F75289F1DFE1F6000C322D6 /* ReservoirVolumeHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */; }; + 4F7528A01DFE1F9D00C322D6 /* LoopStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */; }; + 4F7528A11DFE200B00C322D6 /* BasalStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43B371851CE583890013C5A6 /* BasalStateView.swift */; }; + 4F7528A21DFE200B00C322D6 /* LevelMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */; }; + 4F7528A41DFE204900C322D6 /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43DE92501C541832001FFDE1 /* UIColor.swift */; }; + 4F7528A51DFE208C00C322D6 /* NSTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439897341CD2F7DE00223065 /* NSTimeInterval.swift */; }; + 4F7528A71DFE20CE00C322D6 /* SensorDisplayable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA28611D517E42001BC233 /* SensorDisplayable.swift */; }; + 4F7528A81DFE20CE00C322D6 /* NSNumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */; }; + 4F7528A91DFE212600C322D6 /* GlucoseTrend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */; }; + 4F7528AA1DFE215100C322D6 /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F526D5E1DF2459000A04910 /* HKUnit.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 */; }; + 4FF4D0F81E1725B000846527 /* NibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 434F54561D287FDB002A9274 /* NibLoadable.swift */; }; + 4FF4D0F91E17268800846527 /* IdentifiableClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 434FF1E91CF26C29000DB779 /* IdentifiableClass.swift */; }; + 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; + 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF4D0FF1E18374700846527 /* WatchContext.swift */; }; C10428971D17BAD400DD539A /* NightscoutUploadKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */; }; C12F21A71DFA79CB00748193 /* recommend_tamp_basal_very_low_end_in_range.json in Resources */ = {isa = PBXBuildFile; fileRef = C12F21A61DFA79CB00748193 /* recommend_tamp_basal_very_low_end_in_range.json */; }; C15713821DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15713811DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift */; }; @@ -221,6 +219,20 @@ remoteGlobalIDString = 4F70C1DB1DE8DCA7006380B7; remoteInfo = "Loop Status Extension"; }; + 4F7528961DFE1ED400C322D6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 43776F841B8022E90074EA36 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4F75288A1DFE1DC600C322D6; + remoteInfo = LoopUI; + }; + 4F7528981DFE1ED800C322D6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 43776F841B8022E90074EA36 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4F75288A1DFE1DC600C322D6; + remoteInfo = LoopUI; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -252,6 +264,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 4F2C159A1E0C9E5600E160D4 /* LoopUI.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -294,8 +307,12 @@ 4302F4E01D4E9C8900F0FCAF /* TextFieldTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TextFieldTableViewController.swift; sourceTree = ""; }; 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsulinDeliveryTableViewController.swift; sourceTree = ""; }; 4302F4E41D4EA75100F0FCAF /* DoseStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoseStore.swift; sourceTree = ""; }; +<<<<<<< HEAD 43076BF21DFDBC4B0012A723 /* it.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = it.lproj; sourceTree = ""; }; 430DA58D1D4AEC230097D1CA /* NSBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSBundle.swift; sourceTree = ""; }; +======= + 430DA58D1D4AEC230097D1CA /* NSBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NSBundle.swift; path = Common/Extensions/NSBundle.swift; sourceTree = ""; }; +>>>>>>> LoopKit/dev 430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MySentryPumpStatusMessageBody.swift; sourceTree = ""; }; 4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartContentView.swift; sourceTree = ""; }; 4315D2861CA5CC3B00589052 /* CarbEntryEditTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CarbEntryEditTableViewController.swift; sourceTree = ""; }; @@ -321,14 +338,14 @@ 4346D1EF1C781BEA00ABAFE3 /* SwiftCharts.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftCharts.framework; path = Carthage/Build/iOS/SwiftCharts.framework; sourceTree = ""; }; 4346D1F51C78501000ABAFE3 /* ChartPoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartPoint.swift; sourceTree = ""; }; 434AB0B11CBB4C3300422F4A /* RileyLinkBLEKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RileyLinkBLEKit.framework; path = Carthage/Build/iOS/RileyLinkBLEKit.framework; sourceTree = ""; }; - 434F54561D287FDB002A9274 /* NibLoadable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NibLoadable.swift; sourceTree = ""; }; + 434F54561D287FDB002A9274 /* NibLoadable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NibLoadable.swift; path = Common/Extensions/NibLoadable.swift; sourceTree = ""; }; 434F54581D28805E002A9274 /* ButtonTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ButtonTableViewCell.xib; sourceTree = ""; }; 434F545A1D2880D4002A9274 /* AuthenticationTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AuthenticationTableViewCell.xib; sourceTree = ""; }; 434F545E1D288345002A9274 /* ShareService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareService.swift; sourceTree = ""; }; 434F54601D28859B002A9274 /* ServiceCredential.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceCredential.swift; sourceTree = ""; }; 434F54621D28DD80002A9274 /* ValidatingIndicatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidatingIndicatorView.swift; sourceTree = ""; }; 434FB6451D68F1CD007B9C70 /* Amplitude.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Amplitude.framework; path = Carthage/Build/iOS/Amplitude.framework; sourceTree = ""; }; - 434FF1E91CF26C29000DB779 /* IdentifiableClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiableClass.swift; sourceTree = ""; }; + 434FF1E91CF26C29000DB779 /* IdentifiableClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = IdentifiableClass.swift; path = Common/Extensions/IdentifiableClass.swift; sourceTree = ""; }; 434FF1ED1CF27EEF000DB779 /* UITableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = ""; }; 43523EDA1CC35083001850F1 /* RileyLinkKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RileyLinkKit.framework; path = Carthage/Build/iOS/RileyLinkKit.framework; sourceTree = ""; }; 435400301C9F744E00D5819C /* BolusSuggestionUserInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BolusSuggestionUserInfo.swift; sourceTree = ""; }; @@ -346,7 +363,7 @@ 437CCADB1D284B830075D2C3 /* ButtonTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonTableViewCell.swift; sourceTree = ""; }; 437CCADD1D2858FD0075D2C3 /* AuthenticationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationViewController.swift; sourceTree = ""; }; 437CCADF1D285C7B0075D2C3 /* ServiceAuthentication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceAuthentication.swift; sourceTree = ""; }; - 437CEEBB1CD6DE6A003C8C80 /* HUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDView.swift; sourceTree = ""; }; + 437CEEBB1CD6DE6A003C8C80 /* BaseHUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseHUDView.swift; sourceTree = ""; }; 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoopCompletionHUDView.swift; sourceTree = ""; }; 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasalRateHUDView.swift; sourceTree = ""; }; 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReservoirVolumeHUDView.swift; sourceTree = ""; }; @@ -365,7 +382,7 @@ 438D42F81D7C88BC003244B0 /* PredictionInputEffect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PredictionInputEffect.swift; sourceTree = ""; }; 438D42FA1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PredictionInputEffectTableViewCell.swift; sourceTree = ""; }; 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoopStateView.swift; sourceTree = ""; }; - 439897341CD2F7DE00223065 /* NSTimeInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSTimeInterval.swift; sourceTree = ""; }; + 439897341CD2F7DE00223065 /* NSTimeInterval.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NSTimeInterval.swift; path = Common/Extensions/NSTimeInterval.swift; sourceTree = ""; }; 439897361CD2F80600223065 /* AnalyticsManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = AnalyticsManager.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 4398973A1CD2FC2000223065 /* NSDateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSDateFormatter.swift; sourceTree = ""; }; 43A567681C94880B00334FAC /* LoopDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = LoopDataManager.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -395,7 +412,6 @@ 43DBF0581C93F73800B3C386 /* CarbEntryTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CarbEntryTableViewController.swift; sourceTree = ""; }; 43DE92501C541832001FFDE1 /* UIColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; 43DE92581C5479E4001FFDE1 /* CarbEntryUserInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CarbEntryUserInfo.swift; sourceTree = ""; }; - 43DE925B1C547A20001FFDE1 /* WatchContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchContext.swift; sourceTree = ""; }; 43DE92601C555C26001FFDE1 /* AbsorptionTimeType+CarbKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AbsorptionTimeType+CarbKit.swift"; sourceTree = ""; }; 43E2D8C51D204678004DA55F /* KeychainManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeychainManager.swift; sourceTree = ""; }; 43E2D8C71D208D5B004DA55F /* KeychainManager+Loop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "KeychainManager+Loop.swift"; sourceTree = ""; }; @@ -440,7 +456,11 @@ 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LevelMaskView.swift; sourceTree = ""; }; 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = G4ShareSpy.framework; path = Carthage/Build/iOS/G4ShareSpy.framework; sourceTree = ""; }; 4D5B7A4A1D457CCA00796CA9 /* GlucoseG4.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GlucoseG4.swift; path = Loop/Models/GlucoseG4.swift; sourceTree = SOURCE_ROOT; }; - 4F526D5E1DF2459000A04910 /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKUnit.swift; sourceTree = ""; }; + 4F2C15801E0495B200E160D4 /* WatchContext+WatchApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WatchContext+WatchApp.swift"; sourceTree = ""; }; + 4F2C15921E09BF2C00E160D4 /* HUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDView.swift; sourceTree = ""; }; + 4F2C15941E09BF3C00E160D4 /* HUDView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HUDView.xib; sourceTree = ""; }; + 4F2C15961E09E94E00E160D4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4F526D5E1DF2459000A04910 /* HKUnit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HKUnit.swift; path = Common/Extensions/HKUnit.swift; sourceTree = ""; }; 4F526D601DF8D9A900A04910 /* NetBasal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetBasal.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; }; @@ -450,7 +470,11 @@ 4F70C1FD1DE8E662006380B7 /* Loop Status Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Loop Status Extension.entitlements"; sourceTree = ""; }; 4F70C20F1DE8FAC5006380B7 /* StatusExtensionDataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusExtensionDataManager.swift; sourceTree = ""; }; 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StatusExtensionContext.swift; sourceTree = ""; }; - 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSUserDefaults+StatusExtension.swift"; sourceTree = ""; }; + 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LoopUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4F75288D1DFE1DC600C322D6 /* LoopUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoopUI.h; sourceTree = ""; }; + 4F75288E1DFE1DC600C322D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "NSUserDefaults+StatusExtension.swift"; path = "Common/Extensions/NSUserDefaults+StatusExtension.swift"; sourceTree = ""; }; + 4FF4D0FF1E18374700846527 /* WatchContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WatchContext.swift; sourceTree = ""; }; C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NightscoutUploadKit.framework; path = Carthage/Build/iOS/NightscoutUploadKit.framework; sourceTree = ""; }; C12F21A61DFA79CB00748193 /* recommend_tamp_basal_very_low_end_in_range.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = recommend_tamp_basal_very_low_end_in_range.json; sourceTree = ""; }; C15713811DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MealBolusNightscoutTreatment.swift; sourceTree = ""; }; @@ -473,6 +497,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4F7528941DFE1E9500C322D6 /* LoopUI.framework in Frameworks */, 43C6407C1DA051850093E25D /* InsulinKit.framework in Frameworks */, 438A95A81D8B9B24009D12E1 /* xDripG5.framework in Frameworks */, 43C246A81D89990F0031F8D1 /* Crypto.framework in Frameworks */, @@ -516,10 +541,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4F7528951DFE1E9B00C322D6 /* LoopUI.framework in Frameworks */, 4F70C1DE1DE8DCA7006380B7 /* NotificationCenter.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; + 4F7528871DFE1DC600C322D6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -542,6 +575,7 @@ 4328E0201CFBE2C500E199AA /* IdentifiableClass.swift */, 4328E0231CFBE2C500E199AA /* NSUserDefaults.swift */, 4328E0241CFBE2C500E199AA /* UIColor.swift */, + 4F2C15801E0495B200E160D4 /* WatchContext+WatchApp.swift */, 43CB2B2A1D924D450079823D /* WCSession.swift */, 4328E0251CFBE2C500E199AA /* WKAlertAction.swift */, 4328E02E1CFBF81800E199AA /* WKInterfaceImage.swift */, @@ -558,13 +592,11 @@ 43F41C321D3A17AA00C11ED6 /* ChartAxisValueDoubleUnit.swift */, 43E397A21D56B9E40028E321 /* Glucose.swift */, 4D5B7A4A1D457CCA00796CA9 /* GlucoseG4.swift */, - 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */, 436FACED1D0BA636004E2427 /* InsulinDataSource.swift */, 436A0DA41D236A2A00104B24 /* LoopError.swift */, 430DA58F1D4B0E4C0097D1CA /* MySentryPumpStatusMessageBody.swift */, 4F526D601DF8D9A900A04910 /* NetBasal.swift */, 438D42F81D7C88BC003244B0 /* PredictionInputEffect.swift */, - 43EA28611D517E42001BC233 /* SensorDisplayable.swift */, 43C418B41CE0575200405B6A /* ShareGlucose+GlucoseKit.swift */, 4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */, ); @@ -574,12 +606,14 @@ 43776F831B8022E90074EA36 = { isa = PBXGroup; children = ( + 4FF4D0FA1E1834BD00846527 /* Common */, 43776F8E1B8022E90074EA36 /* Loop */, 4F70C1DF1DE8DCA7006380B7 /* Loop Status Extension */, 43A943731B926B7B0051FA24 /* WatchApp */, 43A943821B926B7B0051FA24 /* WatchApp Extension */, 43F78D2C1C8FC58F002152D1 /* LoopTests */, 43E2D8D21D20BF42004DA55F /* DoseMathTests */, + 4F75288C1DFE1DC600C322D6 /* LoopUI */, 968DCD53F724DE56FFE51920 /* Frameworks */, 43776F8D1B8022E90074EA36 /* Products */, 437D9BA11D7B5203007245E8 /* Loop.xcconfig */, @@ -595,6 +629,7 @@ 43E2D8D11D20BF42004DA55F /* DoseMathTests.xctest */, 43E2D90B1D20C581004DA55F /* LoopTests.xctest */, 4F70C1DC1DE8DCA7006380B7 /* Loop Status Extension.appex */, + 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */, ); name = Products; sourceTree = ""; @@ -656,7 +691,6 @@ 43A9438F1B926B7B0051FA24 /* Assets.xcassets */, 4328E0121CFBE1B700E199AA /* Controllers */, 4328E01F1CFBE2B100E199AA /* Extensions */, - 43DE92571C5479C3001FFDE1 /* Models */, 43A943831B926B7B0051FA24 /* Supporting Files */, ); path = "WatchApp Extension"; @@ -670,17 +704,6 @@ name = "Supporting Files"; sourceTree = ""; }; - 43DE92571C5479C3001FFDE1 /* Models */ = { - isa = PBXGroup; - children = ( - 435400301C9F744E00D5819C /* BolusSuggestionUserInfo.swift */, - 43DE92581C5479E4001FFDE1 /* CarbEntryUserInfo.swift */, - 435400331C9F878D00D5819C /* SetBolusUserInfo.swift */, - 43DE925B1C547A20001FFDE1 /* WatchContext.swift */, - ); - path = Models; - sourceTree = ""; - }; 43E2D8D21D20BF42004DA55F /* DoseMathTests */ = { isa = PBXGroup; children = ( @@ -719,17 +742,10 @@ 4346D1F51C78501000ABAFE3 /* ChartPoint.swift */, 43649A621C7A347F00523D7F /* CollectionType.swift */, 4302F4E41D4EA75100F0FCAF /* DoseStore.swift */, - 434FF1E91CF26C29000DB779 /* IdentifiableClass.swift */, - 434F54561D287FDB002A9274 /* NibLoadable.swift */, - 430DA58D1D4AEC230097D1CA /* NSBundle.swift */, 43CE7CDD1CA8B63E003CC1B0 /* Data.swift */, 4398973A1CD2FC2000223065 /* NSDateFormatter.swift */, - 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */, - 439897341CD2F7DE00223065 /* NSTimeInterval.swift */, 43E344A31B9E1B1C00C85C07 /* NSUserDefaults.swift */, - 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */, 43F41C361D3BF32400C11ED6 /* UIAlertController.swift */, - 43DE92501C541832001FFDE1 /* UIColor.swift */, 437CEEE31CDE5C0A003C8C80 /* UIImage.swift */, 434FF1ED1CF27EEF000DB779 /* UITableViewCell.swift */, ); @@ -760,22 +776,13 @@ children = ( 437CCAD91D284ADF0075D2C3 /* AuthenticationTableViewCell.swift */, 434F545A1D2880D4002A9274 /* AuthenticationTableViewCell.xib */, - 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */, - 43B371851CE583890013C5A6 /* BasalStateView.swift */, - 437CEEC91CD84DB7003C8C80 /* BatteryLevelHUDView.swift */, 437CCADB1D284B830075D2C3 /* ButtonTableViewCell.swift */, 434F54581D28805E002A9274 /* ButtonTableViewCell.xib */, 4313EDDF1D8A6BF90060FA79 /* ChartContentView.swift */, 43880F941D9CD54A009061A8 /* ChartPointsScatterDownTrianglesLayer.swift */, 43F41C341D3B623800C11ED6 /* ChartPointsTouchHighlightLayerViewCache.swift */, 4346D1E61C77F5FE00ABAFE3 /* ChartTableViewCell.swift */, - 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */, - 437CEEBB1CD6DE6A003C8C80 /* HUDView.swift */, - 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */, - 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */, - 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */, 438D42FA1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift */, - 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */, 43A5676A1C96155700334FAC /* SwitchTableViewCell.swift */, 43F64DD81D9C92C900D24DC6 /* TitleSubtitleTableViewCell.swift */, 434F54621D28DD80002A9274 /* ValidatingIndicatorView.swift */, @@ -820,12 +827,94 @@ 4F70C1E01DE8DCA7006380B7 /* StatusViewController.swift */, 4F70C1E21DE8DCA7006380B7 /* MainInterface.storyboard */, 4F70C1E51DE8DCA7006380B7 /* Info.plist */, - 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */, - 4F526D5E1DF2459000A04910 /* HKUnit.swift */, ); path = "Loop Status Extension"; sourceTree = SOURCE_ROOT; }; + 4F75288C1DFE1DC600C322D6 /* LoopUI */ = { + isa = PBXGroup; + children = ( + 4F7528A61DFE20AE00C322D6 /* Models */, + 4F7528A31DFE202B00C322D6 /* Extensions */, + 4F7528931DFE1E1600C322D6 /* Views */, + 4F75288D1DFE1DC600C322D6 /* LoopUI.h */, + 4F75288E1DFE1DC600C322D6 /* Info.plist */, + 4F2C15941E09BF3C00E160D4 /* HUDView.xib */, + 4F2C15961E09E94E00E160D4 /* Assets.xcassets */, + ); + path = LoopUI; + sourceTree = ""; + }; + 4F7528931DFE1E1600C322D6 /* Views */ = { + isa = PBXGroup; + children = ( + 437CEEBF1CD6FCD8003C8C80 /* BasalRateHUDView.swift */, + 43B371851CE583890013C5A6 /* BasalStateView.swift */, + 437CEEC91CD84DB7003C8C80 /* BatteryLevelHUDView.swift */, + 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */, + 437CEEBB1CD6DE6A003C8C80 /* BaseHUDView.swift */, + 43FBEDD71D73843700B21F22 /* LevelMaskView.swift */, + 437CEEBD1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift */, + 438DADC71CDE8F8B007697A5 /* LoopStateView.swift */, + 437CEEC71CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift */, + 4F2C15921E09BF2C00E160D4 /* HUDView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 4F7528A31DFE202B00C322D6 /* Extensions */ = { + isa = PBXGroup; + children = ( + 43DE92501C541832001FFDE1 /* UIColor.swift */, + 436A0E7A1D7DE13400D6475D /* NSNumberFormatter.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + 4F7528A61DFE20AE00C322D6 /* Models */ = { + isa = PBXGroup; + children = ( + 43EA28611D517E42001BC233 /* SensorDisplayable.swift */, + ); + path = Models; + sourceTree = ""; + }; + 4FF4D0FA1E1834BD00846527 /* Common */ = { + isa = PBXGroup; + children = ( + 4FF4D0FC1E1834CC00846527 /* Extensions */, + 4FF4D0FB1E1834C400846527 /* Models */, + ); + name = Common; + sourceTree = ""; + }; + 4FF4D0FB1E1834C400846527 /* Models */ = { + isa = PBXGroup; + children = ( + 435400301C9F744E00D5819C /* BolusSuggestionUserInfo.swift */, + 43DE92581C5479E4001FFDE1 /* CarbEntryUserInfo.swift */, + 43EA285E1D50ED3D001BC233 /* GlucoseTrend.swift */, + 435400331C9F878D00D5819C /* SetBolusUserInfo.swift */, + 4F70C2111DE900EA006380B7 /* StatusExtensionContext.swift */, + 4FF4D0FF1E18374700846527 /* WatchContext.swift */, + ); + name = Models; + path = Common/Models; + sourceTree = ""; + }; + 4FF4D0FC1E1834CC00846527 /* Extensions */ = { + isa = PBXGroup; + children = ( + 4F526D5E1DF2459000A04910 /* HKUnit.swift */, + 434FF1E91CF26C29000DB779 /* IdentifiableClass.swift */, + 434F54561D287FDB002A9274 /* NibLoadable.swift */, + 430DA58D1D4AEC230097D1CA /* NSBundle.swift */, + 439897341CD2F7DE00223065 /* NSTimeInterval.swift */, + 4FC8C8001DEB93E400A1452E /* NSUserDefaults+StatusExtension.swift */, + ); + name = Extensions; + sourceTree = ""; + }; 968DCD53F724DE56FFE51920 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -851,6 +940,17 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 4F7528881DFE1DC600C322D6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F2C15851E075B8700E160D4 /* LoopUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ 43776F8B1B8022E90074EA36 /* Loop */ = { isa = PBXNativeTarget; @@ -867,6 +967,7 @@ buildRules = ( ); dependencies = ( + 4F7528971DFE1ED400C322D6 /* PBXTargetDependency */, 43A943931B926B7B0051FA24 /* PBXTargetDependency */, 4F70C1E71DE8DCA7006380B7 /* PBXTargetDependency */, ); @@ -958,12 +1059,31 @@ buildRules = ( ); dependencies = ( + 4F7528991DFE1ED800C322D6 /* PBXTargetDependency */, ); name = "Loop Status Extension"; 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" */; + buildPhases = ( + 4F7528861DFE1DC600C322D6 /* Sources */, + 4F7528871DFE1DC600C322D6 /* Frameworks */, + 4F7528881DFE1DC600C322D6 /* Headers */, + 4F7528891DFE1DC600C322D6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LoopUI; + productName = LoopUI; + productReference = 4F75288B1DFE1DC600C322D6 /* LoopUI.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1037,6 +1157,10 @@ }; }; }; + 4F75288A1DFE1DC600C322D6 = { + CreatedOnToolsVersion = 8.1; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 43776F871B8022E90074EA36 /* Build configuration list for PBXProject "Loop" */; @@ -1056,6 +1180,7 @@ 4F70C1DB1DE8DCA7006380B7 /* Loop Status Extension */, 43A943711B926B7B0051FA24 /* WatchApp */, 43A9437D1B926B7B0051FA24 /* WatchApp Extension */, + 4F75288A1DFE1DC600C322D6 /* LoopUI */, 43E2D8D01D20BF42004DA55F /* DoseMathTests */, 43E2D90A1D20C581004DA55F /* LoopTests */, ); @@ -1132,6 +1257,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4F7528891DFE1DC600C322D6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F2C15971E09E94E00E160D4 /* Assets.xcassets in Resources */, + 4F2C15951E09BF3C00E160D4 /* HUDView.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -1171,8 +1305,10 @@ files = ( 4F70C2131DE90339006380B7 /* StatusExtensionContext.swift in Sources */, 434F54571D287FDB002A9274 /* NibLoadable.swift in Sources */, + 4FF4D1001E18374700846527 /* WatchContext.swift in Sources */, 4315D28A1CA5F45E00589052 /* DiagnosticLogger+LoopKit.swift in Sources */, 43C418B51CE0575200405B6A /* ShareGlucose+GlucoseKit.swift in Sources */, + 4F2C15821E074FC600E160D4 /* NSTimeInterval.swift in Sources */, 430DA58E1D4AEC230097D1CA /* NSBundle.swift in Sources */, 43776F901B8022E90074EA36 /* AppDelegate.swift in Sources */, 437CCADA1D284ADF0075D2C3 /* AuthenticationTableViewCell.swift in Sources */, @@ -1180,7 +1316,6 @@ 43F41C331D3A17AA00C11ED6 /* ChartAxisValueDoubleUnit.swift in Sources */, 43F5C2DB1B92A5E1003EB13D /* SettingsTableViewController.swift in Sources */, 4313EDE01D8A6BF90060FA79 /* ChartContentView.swift in Sources */, - 43B371861CE583890013C5A6 /* BasalStateView.swift in Sources */, 434FF1EA1CF26C29000DB779 /* IdentifiableClass.swift in Sources */, 437CCADE1D2858FD0075D2C3 /* AuthenticationViewController.swift in Sources */, 43A5676B1C96155700334FAC /* SwitchTableViewCell.swift in Sources */, @@ -1189,10 +1324,8 @@ 4302F4E11D4E9C8900F0FCAF /* TextFieldTableViewController.swift in Sources */, 43E344A41B9E1B1C00C85C07 /* NSUserDefaults.swift in Sources */, 43649A631C7A347F00523D7F /* CollectionType.swift in Sources */, - 437CEEBE1CD6E0CB003C8C80 /* LoopCompletionHUDView.swift in Sources */, 43F64DD91D9C92C900D24DC6 /* TitleSubtitleTableViewCell.swift in Sources */, C15713821DAC6983005BC4D2 /* MealBolusNightscoutTreatment.swift in Sources */, - 43EA28621D517E42001BC233 /* SensorDisplayable.swift in Sources */, 435400321C9F745500D5819C /* BolusSuggestionUserInfo.swift in Sources */, 43E3449F1B9D68E900C85C07 /* StatusTableViewController.swift in Sources */, 43DBF0531C93EC8200B3C386 /* DeviceDataManager.swift in Sources */, @@ -1200,11 +1333,9 @@ 4346D1E71C77F5FE00ABAFE3 /* ChartTableViewCell.swift in Sources */, 437CEEE41CDE5C0A003C8C80 /* UIImage.swift in Sources */, 43DBF0591C93F73800B3C386 /* CarbEntryTableViewController.swift in Sources */, - 43DE925C1C547A20001FFDE1 /* WatchContext.swift in Sources */, 43F41C351D3B623800C11ED6 /* ChartPointsTouchHighlightLayerViewCache.swift in Sources */, 43EB40861C82646A00472A8C /* StatusChartManager.swift in Sources */, C17884631D51A7A400405663 /* BatteryIndicator.swift in Sources */, - 437CEEC81CD84CBB003C8C80 /* ReservoirVolumeHUDView.swift in Sources */, 43C0944A1CACCC73001F6403 /* NotificationManager.swift in Sources */, 434FF1EE1CF27EEF000DB779 /* UITableViewCell.swift in Sources */, C18C8C511D5A351900E043FB /* NightscoutDataManager.swift in Sources */, @@ -1225,19 +1356,13 @@ 435400341C9F878D00D5819C /* SetBolusUserInfo.swift in Sources */, 437D9BA31D7BC977007245E8 /* PredictionTableViewController.swift in Sources */, 43F41C371D3BF32400C11ED6 /* UIAlertController.swift in Sources */, - 437CEEBC1CD6DE6A003C8C80 /* HUDView.swift in Sources */, 433EA4C41D9F71C800CD78FB /* CommandResponseViewController.swift in Sources */, - 436A0E7B1D7DE13400D6475D /* NSNumberFormatter.swift in Sources */, 434F545F1D288345002A9274 /* ShareService.swift in Sources */, - 43FBEDD81D73843700B21F22 /* LevelMaskView.swift in Sources */, - 4354003A1C9FB81100D5819C /* UIColor.swift in Sources */, 4328E0331CFC091100E199AA /* WatchContext+LoopKit.swift in Sources */, 4F526D611DF8D9A900A04910 /* NetBasal.swift in Sources */, 4398973B1CD2FC2000223065 /* NSDateFormatter.swift in Sources */, 436A0DA51D236A2A00104B24 /* LoopError.swift in Sources */, - 437CEEC01CD6FCD8003C8C80 /* BasalRateHUDView.swift in Sources */, 43E2D8C61D204678004DA55F /* KeychainManager.swift in Sources */, - 437CEECA1CD84DB7003C8C80 /* BatteryLevelHUDView.swift in Sources */, 433EA4C21D9F39C900CD78FB /* PumpIDTableViewController.swift in Sources */, 43F78D261C8FC000002152D1 /* DoseMath.swift in Sources */, 438D42F91D7C88BC003244B0 /* PredictionInputEffect.swift in Sources */, @@ -1247,17 +1372,13 @@ 436FACEE1D0BA636004E2427 /* InsulinDataSource.swift in Sources */, 439897371CD2F80600223065 /* AnalyticsManager.swift in Sources */, 4346D1F61C78501000ABAFE3 /* ChartPoint.swift in Sources */, - 43EA28601D50ED4D001BC233 /* GlucoseTrend.swift in Sources */, - 4337615F1D52F487004A3647 /* GlucoseHUDView.swift in Sources */, 438849EE1D2A1EBB003B3F23 /* MLabService.swift in Sources */, 438D42FB1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift in Sources */, 43880F951D9CD54A009061A8 /* ChartPointsScatterDownTrianglesLayer.swift in Sources */, 43F4EF1D1BA2A57600526CE1 /* DiagnosticLogger.swift in Sources */, 432E73CB1D24B3D6009AD15D /* RemoteDataManager.swift in Sources */, - 438DADC81CDE8F8B007697A5 /* LoopStateView.swift in Sources */, 43DE92591C5479E4001FFDE1 /* CarbEntryUserInfo.swift in Sources */, 434F54631D28DD80002A9274 /* ValidatingIndicatorView.swift in Sources */, - 439897351CD2F7DE00223065 /* NSTimeInterval.swift in Sources */, 43DE92611C555C26001FFDE1 /* AbsorptionTimeType+CarbKit.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1266,27 +1387,28 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4F2C15751E0209FA00E160D4 /* GlucoseTrend.swift in Sources */, + 4F2C15741E0209F500E160D4 /* NSTimeInterval.swift in Sources */, + 4FF4D1011E18375000846527 /* WatchContext.swift in Sources */, 435400311C9F744E00D5819C /* BolusSuggestionUserInfo.swift in Sources */, 43A9438A1B926B7B0051FA24 /* NotificationController.swift in Sources */, 43A943881B926B7B0051FA24 /* ExtensionDelegate.swift in Sources */, 4328E0291CFBE2C500E199AA /* NSUserDefaults.swift in Sources */, 4328E02F1CFBF81800E199AA /* WKInterfaceImage.swift in Sources */, + 4F2C15811E0495B200E160D4 /* WatchContext+WatchApp.swift in Sources */, 4328E02A1CFBE2C500E199AA /* UIColor.swift in Sources */, 4328E01B1CFBE1DA00E199AA /* BolusInterfaceController.swift in Sources */, 4328E02B1CFBE2C500E199AA /* WKAlertAction.swift in Sources */, 4328E0281CFBE2C500E199AA /* CLKComplicationTemplate.swift in Sources */, 4328E01E1CFBE25F00E199AA /* AddCarbsInterfaceController.swift in Sources */, 43846ADB1D91057000799272 /* ContextUpdatable.swift in Sources */, - 43EA285F1D50ED3D001BC233 /* GlucoseTrend.swift in Sources */, 4328E0261CFBE2C500E199AA /* IdentifiableClass.swift in Sources */, 43027F0E1DFE0EC200C51989 /* NSNumberFormatter.swift in Sources */, 43027F0F1DFE0EC900C51989 /* HKUnit.swift in Sources */, 43CB2B2B1D924D450079823D /* WCSession.swift in Sources */, 43DE925A1C5479E4001FFDE1 /* CarbEntryUserInfo.swift in Sources */, - 4328E0301CFBFAEB00E199AA /* NSTimeInterval.swift in Sources */, 43A9438E1B926B7B0051FA24 /* ComplicationController.swift in Sources */, 4328E01A1CFBE1DA00E199AA /* StatusInterfaceController.swift in Sources */, - 43DE925D1C547A20001FFDE1 /* WatchContext.swift in Sources */, 435400351C9F878D00D5819C /* SetBolusUserInfo.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1313,28 +1435,39 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4F2C15831E0757E600E160D4 /* HKUnit.swift in Sources */, 4F526D621DF9D95200A04910 /* NSBundle.swift in Sources */, 4FC8C8021DEB943800A1452E /* NSUserDefaults+StatusExtension.swift in Sources */, - 4F70C20B1DE8E9F4006380B7 /* GlucoseTrend.swift in Sources */, - 4F526D5F1DF2459000A04910 /* HKUnit.swift in Sources */, - 4F70C1FB1DE8E45E006380B7 /* NSTimeInterval.swift in Sources */, - 4F70C1FA1DE8E42D006380B7 /* ReservoirVolumeHUDView.swift in Sources */, - 4F70C1F91DE8E409006380B7 /* LoopStateView.swift in Sources */, - 4F70C1F81DE8E403006380B7 /* LoopCompletionHUDView.swift in Sources */, - 4F70C1F71DE8E3FD006380B7 /* LevelMaskView.swift in Sources */, - 4F70C1F61DE8E3F1006380B7 /* BatteryLevelHUDView.swift in Sources */, - 4F70C1F51DE8E3E9006380B7 /* BasalStateView.swift in Sources */, - 4F70C1F41DE8E3E1006380B7 /* BasalRateHUDView.swift in Sources */, 4F70C2121DE900EA006380B7 /* StatusExtensionContext.swift in Sources */, - 4F70C1F31DE8DF47006380B7 /* NSNumberFormatter.swift in Sources */, - 4F70C1F21DE8DF3A006380B7 /* UIColor.swift in Sources */, - 4F70C1F01DE8DF22006380B7 /* SensorDisplayable.swift in Sources */, - 4F70C1EF1DE8DF15006380B7 /* HUDView.swift in Sources */, - 4F70C1ED1DE8DEDA006380B7 /* GlucoseHUDView.swift in Sources */, 4F70C1E11DE8DCA7006380B7 /* StatusViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; + 4F7528861DFE1DC600C322D6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4FF4D0F91E17268800846527 /* IdentifiableClass.swift in Sources */, + 4FF4D0F81E1725B000846527 /* NibLoadable.swift in Sources */, + 4F7528AA1DFE215100C322D6 /* HKUnit.swift in Sources */, + 4F7528A91DFE212600C322D6 /* GlucoseTrend.swift in Sources */, + 4F7528A71DFE20CE00C322D6 /* SensorDisplayable.swift in Sources */, + 4F7528A81DFE20CE00C322D6 /* NSNumberFormatter.swift in Sources */, + 4F2C15931E09BF2C00E160D4 /* HUDView.swift in Sources */, + 4F7528A51DFE208C00C322D6 /* NSTimeInterval.swift in Sources */, + 4F7528A41DFE204900C322D6 /* UIColor.swift in Sources */, + 4F7528A11DFE200B00C322D6 /* BasalStateView.swift in Sources */, + 4F7528A21DFE200B00C322D6 /* LevelMaskView.swift in Sources */, + 4F7528A01DFE1F9D00C322D6 /* LoopStateView.swift in Sources */, + 4F75289A1DFE1F6000C322D6 /* BasalRateHUDView.swift in Sources */, + 4F75289B1DFE1F6000C322D6 /* BatteryLevelHUDView.swift in Sources */, + 4F75289C1DFE1F6000C322D6 /* GlucoseHUDView.swift in Sources */, + 4F75289D1DFE1F6000C322D6 /* BaseHUDView.swift in Sources */, + 4F75289E1DFE1F6000C322D6 /* LoopCompletionHUDView.swift in Sources */, + 4F75289F1DFE1F6000C322D6 /* ReservoirVolumeHUDView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -1358,6 +1491,16 @@ target = 4F70C1DB1DE8DCA7006380B7 /* Loop Status Extension */; targetProxy = 4F70C1E61DE8DCA7006380B7 /* PBXContainerItemProxy */; }; + 4F7528971DFE1ED400C322D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4F75288A1DFE1DC600C322D6 /* LoopUI */; + targetProxy = 4F7528961DFE1ED400C322D6 /* PBXContainerItemProxy */; + }; + 4F7528991DFE1ED800C322D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4F75288A1DFE1DC600C322D6 /* LoopUI */; + targetProxy = 4F7528981DFE1ED800C322D6 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1529,7 +1672,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Loop/Loop.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 9BBUN8YXGG; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -1550,7 +1693,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = Loop/Loop.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 9BBUN8YXGG; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Carthage/Build/iOS", @@ -1748,6 +1891,59 @@ }; name = Release; }; + 4F7528901DFE1DC600C322D6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = LoopUI/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.Loop.LoopUI; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 3.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 4F7528911DFE1DC600C322D6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_SUSPICIOUS_MOVES = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = LoopUI/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.Loop.LoopUI; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1814,6 +2010,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 4F7528921DFE1DC600C322D6 /* Build configuration list for PBXNativeTarget "LoopUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4F7528901DFE1DC600C322D6 /* Debug */, + 4F7528911DFE1DC600C322D6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 43776F841B8022E90074EA36 /* Project object */; diff --git a/Loop/Base.lproj/Main.storyboard b/Loop/Base.lproj/Main.storyboard index 7389695acf..09ca7666af 100644 --- a/Loop/Base.lproj/Main.storyboard +++ b/Loop/Base.lproj/Main.storyboard @@ -1,9 +1,11 @@ - + + + + - - + @@ -13,23 +15,26 @@ - + - + - + - + + + @@ -46,21 +51,21 @@ - + - +