diff --git a/Cartfile b/Cartfile index 2e0dfc26eb..ba3c00991d 100644 --- a/Cartfile +++ b/Cartfile @@ -1,4 +1,4 @@ -github "LoopKit/LoopKit" ~> 0.8.0 +github "LoopKit/LoopKit" ~> 1.0 github "LoopKit/xDripG5" ~> 0.8.0 github "i-schuetz/SwiftCharts" ~> 0.5.0 github "mddub/dexcom-share-client-swift" ~> 0.2.0 diff --git a/Cartfile.resolved b/Cartfile.resolved index ac4a89602f..dbf215faa0 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,6 +1,6 @@ github "amplitude/Amplitude-iOS" "v3.8.5" github "mddub/G4ShareSpy" "v0.3.0" -github "loudnate/LoopKit" "v0.8.0" +github "LoopKit/LoopKit" "v1.0" github "i-schuetz/SwiftCharts" "0.5" github "mddub/dexcom-share-client-swift" "v0.2.0" github "ps2/rileylink_ios" "v0.12.3" diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit b/Carthage/Build/iOS/CarbKit.framework/CarbKit index ca00023a19..6d5f2b2403 100755 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit and b/Carthage/Build/iOS/CarbKit.framework/CarbKit differ diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/CarbEntryEditViewController.nib b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/CarbEntryEditViewController.nib index 4fa8ae02b3..36cd1f5419 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/CarbEntryEditViewController.nib and b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/CarbEntryEditViewController.nib differ diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/LyL-9U-twn-view-9Ci-XW-6nA.nib b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/LyL-9U-twn-view-9Ci-XW-6nA.nib index dc16914803..8339510294 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/LyL-9U-twn-view-9Ci-XW-6nA.nib and b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/LyL-9U-twn-view-9Ci-XW-6nA.nib differ diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UINavigationController-wgu-gT-TgV.nib b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UINavigationController-wgu-gT-TgV.nib index 8c32e4f60a..2d1359d292 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UINavigationController-wgu-gT-TgV.nib and b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UINavigationController-wgu-gT-TgV.nib differ diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UITableViewController-rUL-yg-cFX.nib b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UITableViewController-rUL-yg-cFX.nib index 180e336153..8921eea59a 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UITableViewController-rUL-yg-cFX.nib and b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/UITableViewController-rUL-yg-cFX.nib differ diff --git a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/rUL-yg-cFX-view-b1s-8o-0Wp.nib b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/rUL-yg-cFX-view-b1s-8o-0Wp.nib index 2c7ee61a4d..083a2d6c9b 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/rUL-yg-cFX-view-b1s-8o-0Wp.nib and b/Carthage/Build/iOS/CarbKit.framework/CarbKit.storyboardc/rUL-yg-cFX-view-b1s-8o-0Wp.nib differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Info.plist b/Carthage/Build/iOS/CarbKit.framework/Info.plist index 81b8599836..1844064a2c 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Info.plist and b/Carthage/Build/iOS/CarbKit.framework/Info.plist differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftdoc b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftdoc index cada112be5..3783ec7ed9 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftdoc and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftdoc differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftmodule b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftmodule index eb704c0afc..a3b38359ab 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftmodule and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm.swiftmodule differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftdoc b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftdoc index 93b7d551dc..4a350d7102 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftdoc and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftdoc differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftmodule b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftmodule index 3148d2b8d1..6ce7d414e1 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftmodule and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/arm64.swiftmodule differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftdoc b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftdoc index eaeccda461..fce6bf726c 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftdoc and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftdoc differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftmodule b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftmodule index 310816e569..13f40a903c 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftmodule and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/i386.swiftmodule differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftdoc b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftdoc index c5e8887818..c556676121 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftdoc and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftdoc differ diff --git a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftmodule b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftmodule index 2f26bb9b7c..df0462a56e 100644 Binary files a/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftmodule and b/Carthage/Build/iOS/CarbKit.framework/Modules/CarbKit.swiftmodule/x86_64.swiftmodule differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/GlucoseKit b/Carthage/Build/iOS/GlucoseKit.framework/GlucoseKit index eb75d87e9a..a90502a447 100755 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/GlucoseKit and b/Carthage/Build/iOS/GlucoseKit.framework/GlucoseKit differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Info.plist b/Carthage/Build/iOS/GlucoseKit.framework/Info.plist index 0af20707f0..671eb761a5 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Info.plist and b/Carthage/Build/iOS/GlucoseKit.framework/Info.plist differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftdoc b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftdoc index bfa6d4e1f4..aee5436928 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftdoc and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftdoc differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftmodule b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftmodule index 5befcf9d8a..ce34a37381 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftmodule and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm.swiftmodule differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftdoc b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftdoc index 3de0d7e03c..477e62dc62 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftdoc and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftdoc differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftmodule b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftmodule index d908f1c87d..24f9820a02 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftmodule and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/arm64.swiftmodule differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftdoc b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftdoc index 9fc1492ad2..79a164bf87 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftdoc and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftdoc differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftmodule b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftmodule index 3e5b89c37c..77425c8934 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftmodule and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/i386.swiftmodule differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftdoc b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftdoc index e06da3450b..9ba2351185 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftdoc and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftdoc differ diff --git a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftmodule b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftmodule index 073dd94693..0877df391d 100644 Binary files a/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftmodule and b/Carthage/Build/iOS/GlucoseKit.framework/Modules/GlucoseKit.swiftmodule/x86_64.swiftmodule differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/UITableViewController-jGX-GA-nlH.nib b/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/UITableViewController-jGX-GA-nlH.nib index 3a9ed1e85d..1f21b1f15e 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/UITableViewController-jGX-GA-nlH.nib and b/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/UITableViewController-jGX-GA-nlH.nib differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/jGX-GA-nlH-view-ccM-3y-LQM.nib b/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/jGX-GA-nlH-view-ccM-3y-LQM.nib index 7f0193f96f..e64f446cec 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/jGX-GA-nlH-view-ccM-3y-LQM.nib and b/Carthage/Build/iOS/InsulinKit.framework/Base.lproj/InsulinKit.storyboardc/jGX-GA-nlH-view-ccM-3y-LQM.nib differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Info.plist b/Carthage/Build/iOS/InsulinKit.framework/Info.plist index 36313c0887..9d011adb87 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Info.plist and b/Carthage/Build/iOS/InsulinKit.framework/Info.plist differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/InsulinKit b/Carthage/Build/iOS/InsulinKit.framework/InsulinKit index a2a7f0babc..93158889c1 100755 Binary files a/Carthage/Build/iOS/InsulinKit.framework/InsulinKit and b/Carthage/Build/iOS/InsulinKit.framework/InsulinKit differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftdoc b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftdoc index 73aa4d140b..44b1857f5c 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftdoc and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftdoc differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftmodule b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftmodule index 410dec66b0..92670f037e 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftmodule and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm.swiftmodule differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftdoc b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftdoc index 6a1c02bb3f..1610d1b463 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftdoc and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftdoc differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftmodule b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftmodule index 6935487b61..efb22bebc4 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftmodule and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/arm64.swiftmodule differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftdoc b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftdoc index b57998c820..edabedbff5 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftdoc and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftdoc differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftmodule b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftmodule index 0f381cff0d..64aab0ec7b 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftmodule and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/i386.swiftmodule differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftdoc b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftdoc index 7dea37d202..4cae4d12b1 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftdoc and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftdoc differ diff --git a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftmodule b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftmodule index 6b9425df28..4e14d47c98 100644 Binary files a/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftmodule and b/Carthage/Build/iOS/InsulinKit.framework/Modules/InsulinKit.swiftmodule/x86_64.swiftmodule differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Assets.car b/Carthage/Build/iOS/LoopKit.framework/Assets.car index 8e9717d107..fa60658660 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Assets.car and b/Carthage/Build/iOS/LoopKit.framework/Assets.car differ diff --git a/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeOverrideTableViewCell.nib b/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeOverrideTableViewCell.nib index 74f73984fa..e129d5aee3 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeOverrideTableViewCell.nib and b/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeOverrideTableViewCell.nib differ diff --git a/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeTableViewCell.nib b/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeTableViewCell.nib index 9842e0162b..4b74b36941 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeTableViewCell.nib and b/Carthage/Build/iOS/LoopKit.framework/GlucoseRangeTableViewCell.nib differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Info.plist b/Carthage/Build/iOS/LoopKit.framework/Info.plist index 7d2b1c3c86..b4a65224f0 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Info.plist and b/Carthage/Build/iOS/LoopKit.framework/Info.plist differ diff --git a/Carthage/Build/iOS/LoopKit.framework/LoopKit b/Carthage/Build/iOS/LoopKit.framework/LoopKit index ef7ad31ed3..ef92f1586d 100755 Binary files a/Carthage/Build/iOS/LoopKit.framework/LoopKit and b/Carthage/Build/iOS/LoopKit.framework/LoopKit differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm.swiftmodule b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm.swiftmodule index 4cbbedc3e5..4a4c21de17 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm.swiftmodule and b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm.swiftmodule differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm64.swiftmodule b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm64.swiftmodule index 90cbb81c8f..eddd242b3e 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm64.swiftmodule and b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/arm64.swiftmodule differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/i386.swiftmodule b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/i386.swiftmodule index 05646b748a..1515401b43 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/i386.swiftmodule and b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/i386.swiftmodule differ diff --git a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/x86_64.swiftmodule b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/x86_64.swiftmodule index 793642bbee..e1e04d798a 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/x86_64.swiftmodule and b/Carthage/Build/iOS/LoopKit.framework/Modules/LoopKit.swiftmodule/x86_64.swiftmodule differ diff --git a/Carthage/Build/iOS/LoopKit.framework/RepeatingScheduleValueTableViewCell.nib b/Carthage/Build/iOS/LoopKit.framework/RepeatingScheduleValueTableViewCell.nib index 7c1d79915a..07bbbd149b 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/RepeatingScheduleValueTableViewCell.nib and b/Carthage/Build/iOS/LoopKit.framework/RepeatingScheduleValueTableViewCell.nib differ diff --git a/Carthage/Build/iOS/LoopKit.framework/TextFieldTableViewCell.nib b/Carthage/Build/iOS/LoopKit.framework/TextFieldTableViewCell.nib index 83aef0b927..459ca6de54 100644 Binary files a/Carthage/Build/iOS/LoopKit.framework/TextFieldTableViewCell.nib and b/Carthage/Build/iOS/LoopKit.framework/TextFieldTableViewCell.nib differ diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 48d801fec2..a98efa4269 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -31,6 +31,8 @@ 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 */; }; 4346D1F01C781BEA00ABAFE3 /* SwiftCharts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4346D1EF1C781BEA00ABAFE3 /* SwiftCharts.framework */; }; 4346D1F61C78501000ABAFE3 /* ChartPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4346D1F51C78501000ABAFE3 /* ChartPoint.swift */; }; @@ -97,6 +99,7 @@ 43C0944A1CACCC73001F6403 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C094491CACCC73001F6403 /* NotificationManager.swift */; }; 43C246A81D89990F0031F8D1 /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43C246A71D89990F0031F8D1 /* Crypto.framework */; }; 43C418B51CE0575200405B6A /* ShareGlucose+GlucoseKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C418B41CE0575200405B6A /* ShareGlucose+GlucoseKit.swift */; }; + 43C6407C1DA051850093E25D /* InsulinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43C6407B1DA051850093E25D /* InsulinKit.framework */; }; 43CA93371CB98079000026B5 /* MinimedKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CA93361CB98079000026B5 /* MinimedKit.framework */; }; 43CB2B2B1D924D450079823D /* WCSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CB2B2A1D924D450079823D /* WCSession.swift */; }; 43CE7CDE1CA8B63E003CC1B0 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CE7CDD1CA8B63E003CC1B0 /* Data.swift */; }; @@ -125,9 +128,7 @@ 43E2D8F51D20C0DB004DA55F /* recommend_temp_basal_start_low_end_high.json in Resources */ = {isa = PBXBuildFile; fileRef = 43E2D8EA1D20C0DB004DA55F /* recommend_temp_basal_start_low_end_high.json */; }; 43E2D8F61D20C0DB004DA55F /* recommend_temp_basal_start_low_end_in_range.json in Resources */ = {isa = PBXBuildFile; fileRef = 43E2D8EB1D20C0DB004DA55F /* recommend_temp_basal_start_low_end_in_range.json */; }; 43E2D9151D20C5A2004DA55F /* KeychainManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E2D8C91D20B9E7004DA55F /* KeychainManagerTests.swift */; }; - 43E2D9161D222684004DA55F /* InsulinKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 43F78D4A1C914197002152D1 /* InsulinKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 43E2D9171D2226BD004DA55F /* LoopKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 43F78D4B1C914197002152D1 /* LoopKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 43E2D9181D222759004DA55F /* InsulinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D4A1C914197002152D1 /* InsulinKit.framework */; }; 43E2D9191D222759004DA55F /* LoopKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D4B1C914197002152D1 /* LoopKit.framework */; }; 43E3449F1B9D68E900C85C07 /* StatusTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E3449E1B9D68E900C85C07 /* StatusTableViewController.swift */; }; 43E344A41B9E1B1C00C85C07 /* NSUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E344A31B9E1B1C00C85C07 /* NSUserDefaults.swift */; }; @@ -147,7 +148,6 @@ 43F78D261C8FC000002152D1 /* DoseMath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F78D251C8FC000002152D1 /* DoseMath.swift */; }; 43F78D4C1C914197002152D1 /* CarbKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D481C914197002152D1 /* CarbKit.framework */; }; 43F78D4D1C914197002152D1 /* GlucoseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D491C914197002152D1 /* GlucoseKit.framework */; }; - 43F78D4E1C914197002152D1 /* InsulinKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43F78D4A1C914197002152D1 /* InsulinKit.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 */; }; @@ -231,7 +231,6 @@ dstSubfolderSpec = 10; files = ( 43E2D9171D2226BD004DA55F /* LoopKit.framework in CopyFiles */, - 43E2D9161D222684004DA55F /* InsulinKit.framework in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -261,6 +260,8 @@ 4331E0771C85302200FBE832 /* CGPoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGPoint.swift; sourceTree = ""; }; 4331E0791C85650D00FBE832 /* ChartAxisValueDoubleLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartAxisValueDoubleLog.swift; sourceTree = ""; }; 4337615E1D52F487004A3647 /* GlucoseHUDView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlucoseHUDView.swift; sourceTree = ""; }; + 433EA4C11D9F39C900CD78FB /* PumpIDTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PumpIDTableViewController.swift; sourceTree = ""; }; + 433EA4C31D9F71C800CD78FB /* CommandResponseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommandResponseViewController.swift; sourceTree = ""; }; 4346D1E61C77F5FE00ABAFE3 /* ChartTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartTableViewCell.swift; sourceTree = ""; }; 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 = ""; }; @@ -329,6 +330,7 @@ 43C094491CACCC73001F6403 /* NotificationManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = ""; }; 43C246A71D89990F0031F8D1 /* Crypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crypto.framework; path = Carthage/Build/iOS/Crypto.framework; sourceTree = ""; }; 43C418B41CE0575200405B6A /* ShareGlucose+GlucoseKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ShareGlucose+GlucoseKit.swift"; sourceTree = ""; }; + 43C6407B1DA051850093E25D /* InsulinKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InsulinKit.framework; path = Carthage/Build/iOS/InsulinKit.framework; sourceTree = ""; }; 43CA93361CB98079000026B5 /* MinimedKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MinimedKit.framework; path = Carthage/Build/iOS/MinimedKit.framework; sourceTree = ""; }; 43CB2B2A1D924D450079823D /* WCSession.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WCSession.swift; sourceTree = ""; }; 43CE7CDD1CA8B63E003CC1B0 /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = ""; }; @@ -379,7 +381,6 @@ 43F78D251C8FC000002152D1 /* DoseMath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DoseMath.swift; sourceTree = ""; }; 43F78D481C914197002152D1 /* CarbKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CarbKit.framework; path = Carthage/Build/iOS/CarbKit.framework; sourceTree = ""; }; 43F78D491C914197002152D1 /* GlucoseKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GlucoseKit.framework; path = Carthage/Build/iOS/GlucoseKit.framework; sourceTree = ""; }; - 43F78D4A1C914197002152D1 /* InsulinKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = InsulinKit.framework; path = Carthage/Build/iOS/InsulinKit.framework; sourceTree = ""; }; 43F78D4B1C914197002152D1 /* LoopKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LoopKit.framework; path = Carthage/Build/iOS/LoopKit.framework; sourceTree = ""; }; 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 = ""; }; @@ -401,6 +402,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 43C6407C1DA051850093E25D /* InsulinKit.framework in Frameworks */, 438A95A81D8B9B24009D12E1 /* xDripG5.framework in Frameworks */, 43C246A81D89990F0031F8D1 /* Crypto.framework in Frameworks */, 434FB6461D68F1CD007B9C70 /* Amplitude.framework in Frameworks */, @@ -409,7 +411,6 @@ 4D3B40041D4A9E1A00BC6334 /* G4ShareSpy.framework in Frameworks */, 43F78D4D1C914197002152D1 /* GlucoseKit.framework in Frameworks */, 43F5C2C91B929C09003EB13D /* HealthKit.framework in Frameworks */, - 43F78D4E1C914197002152D1 /* InsulinKit.framework in Frameworks */, 43F78D4F1C914197002152D1 /* LoopKit.framework in Frameworks */, 43CA93371CB98079000026B5 /* MinimedKit.framework in Frameworks */, 43523EDB1CC35083001850F1 /* RileyLinkKit.framework in Frameworks */, @@ -429,7 +430,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 43E2D9181D222759004DA55F /* InsulinKit.framework in Frameworks */, 43E2D9191D222759004DA55F /* LoopKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -654,8 +654,10 @@ 43DBF04B1C93B8D700B3C386 /* BolusViewController.swift */, 4315D2861CA5CC3B00589052 /* CarbEntryEditTableViewController.swift */, 43DBF0581C93F73800B3C386 /* CarbEntryTableViewController.swift */, + 433EA4C31D9F71C800CD78FB /* CommandResponseViewController.swift */, 4302F4E21D4EA54200F0FCAF /* InsulinDeliveryTableViewController.swift */, 437D9BA21D7BC977007245E8 /* PredictionTableViewController.swift */, + 433EA4C11D9F39C900CD78FB /* PumpIDTableViewController.swift */, 43F5173C1D713DB0000FA422 /* RadioSelectionTableViewController.swift */, 43F5C2DA1B92A5E1003EB13D /* SettingsTableViewController.swift */, 43E3449E1B9D68E900C85C07 /* StatusTableViewController.swift */, @@ -724,6 +726,7 @@ 968DCD53F724DE56FFE51920 /* Frameworks */ = { isa = PBXGroup; children = ( + 43C6407B1DA051850093E25D /* InsulinKit.framework */, 438A95A71D8B9B24009D12E1 /* xDripG5.framework */, 434FB6451D68F1CD007B9C70 /* Amplitude.framework */, 43F78D481C914197002152D1 /* CarbKit.framework */, @@ -731,7 +734,6 @@ 4D3B40021D4A9DFE00BC6334 /* G4ShareSpy.framework */, 43F78D491C914197002152D1 /* GlucoseKit.framework */, 43F5C2C81B929C09003EB13D /* HealthKit.framework */, - 43F78D4A1C914197002152D1 /* InsulinKit.framework */, 43F78D4B1C914197002152D1 /* LoopKit.framework */, 43CA93361CB98079000026B5 /* MinimedKit.framework */, C10428961D17BAD400DD539A /* NightscoutUploadKit.framework */, @@ -1075,6 +1077,7 @@ 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 */, @@ -1085,6 +1088,7 @@ 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 */, 4331E07A1C85650D00FBE832 /* ChartAxisValueDoubleLog.swift in Sources */, diff --git a/Loop/Extensions/NSUserDefaults.swift b/Loop/Extensions/NSUserDefaults.swift index 1b67795d96..5d924a630c 100644 --- a/Loop/Extensions/NSUserDefaults.swift +++ b/Loop/Extensions/NSUserDefaults.swift @@ -8,6 +8,7 @@ import Foundation import LoopKit +import MinimedKit extension UserDefaults { @@ -27,6 +28,7 @@ extension UserDefaults { case PreferredInsulinDataSource = "com.loudnate.Loop.PreferredInsulinDataSource" case PumpID = "com.loudnate.Naterade.PumpID" case PumpModelNumber = "com.loudnate.Naterade.PumpModelNumber" + case PumpRegion = "com.loopkit.Loop.PumpRegion" case PumpTimeZone = "com.loudnate.Naterade.PumpTimeZone" case RetrospectiveCorrectionEnabled = "com.loudnate.Loop.RetrospectiveCorrectionEnabled" } @@ -177,6 +179,16 @@ extension UserDefaults { } } + var pumpRegion: PumpRegion? { + get { + // Defaults to 0 / northAmerica + return PumpRegion(rawValue: integer(forKey: Key.PumpRegion.rawValue)) + } + set { + set(newValue?.rawValue, forKey: Key.PumpRegion.rawValue) + } + } + var pumpTimeZone: TimeZone? { get { if let offset = object(forKey: Key.PumpTimeZone.rawValue) as? NSNumber { diff --git a/Loop/Managers/DeviceDataManager.swift b/Loop/Managers/DeviceDataManager.swift index ddf0b38033..8c51876eef 100644 --- a/Loop/Managers/DeviceDataManager.swift +++ b/Loop/Managers/DeviceDataManager.swift @@ -492,9 +492,9 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter // MARK: G5 data - private var latestGlucoseG5: xDripG5.Glucose? + fileprivate var latestGlucoseG5: xDripG5.Glucose? - private var latestGlucoseFromShare: ShareGlucose? + fileprivate var latestGlucoseFromShare: ShareGlucose? /** Attempts to backfill glucose data from the share servers if a G5 connection hasn't been established. @@ -548,7 +548,7 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter // MARK: ReceiverDelegate - private var latestGlucoseG4: GlucoseG4? + fileprivate var latestGlucoseG4: GlucoseG4? func receiver(_ receiver: Receiver, didReadGlucoseHistory glucoseHistory: [GlucoseG4]) { assertCurrentPumpData() @@ -618,7 +618,7 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter var pumpID = newValue if let pumpID = pumpID, pumpID.characters.count == 6 { - let pumpState = PumpState(pumpID: pumpID, pumpRegion: .northAmerica) + let pumpState = PumpState(pumpID: pumpID, pumpRegion: self.pumpState?.pumpRegion ?? .northAmerica) if let timeZone = self.pumpState?.timeZone { pumpState.timeZone = timeZone @@ -679,6 +679,8 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter } UserDefaults.standard.pumpModelNumber = pumpState?.pumpModel?.rawValue + case "pumpRegion"?: + UserDefaults.standard.pumpRegion = pumpState?.pumpRegion case "lastHistoryDump"?, "awakeUntil"?: break default: @@ -897,7 +899,7 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter var idleListeningEnabled = true if let pumpID = pumpID { - let pumpState = PumpState(pumpID: pumpID, pumpRegion: .northAmerica) + let pumpState = PumpState(pumpID: pumpID, pumpRegion: UserDefaults.standard.pumpRegion ?? .northAmerica) if let timeZone = UserDefaults.standard.pumpTimeZone { pumpState.timeZone = timeZone @@ -950,6 +952,28 @@ final class DeviceDataManager: CarbStoreDelegate, DoseStoreDelegate, Transmitter } +extension DeviceDataManager: CustomDebugStringConvertible { + var debugDescription: String { + return [ + "## DeviceDataManager", + "receiverEnabled: \(receiverEnabled)", + "latestPumpStatusFromMySentry: \(latestPumpStatusFromMySentry)", + "latestGlucoseG5: \(latestGlucoseG5)", + "latestGlucoseFromShare: \(latestGlucoseFromShare)", + "latestGlucoseG4: \(latestGlucoseG4)", + "pumpState: \(String(reflecting: pumpState))", + "preferredInsulinDataSource: \(preferredInsulinDataSource)", + "transmitterID: \(transmitterID)", + "glucoseTargetRangeSchedule: \(glucoseTargetRangeSchedule?.debugDescription ?? "")", + "workoutModeEnabled: \(workoutModeEnabled)", + "maximumBasalRatePerHour: \(maximumBasalRatePerHour)", + "maximumBolus: \(maximumBolus)", +// rileyLinkManager.debugDescription + ].joined(separator: "\n") + } +} + + extension Notification.Name { /// Notification posted by the instance when new glucose data was processed static let GlucoseUpdated = Notification.Name(rawValue: "com.loudnate.Naterade.notification.GlucoseUpdated") diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index 56c2491ff5..f5edaaa111 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -666,6 +666,30 @@ final class LoopDataManager { } +extension LoopDataManager { + /// Generates a diagnostic report about the current state + /// + /// This operation is performed asynchronously and the completion will be executed on an arbitrary background queue. + /// + /// - parameter completionHandler: A closure called once the report has been generated. The closure takes a single argument of the report string. + func generateDiagnosticReport(_ completionHandler: @escaping (_ report: String) -> Void) { + getLoopStatus { (predictedGlucose, retrospectivePredictedGlucose, recommendedTempBasal, lastTempBasal, lastLoopCompleted, insulinOnBoard, error) in + let report = [ + "## LoopDataManager", + "predictedGlucose: \(predictedGlucose ?? [])", + "retrospectivePredictedGlucose: \(retrospectivePredictedGlucose ?? [])", + "recommendedTempBasal: \(recommendedTempBasal)", + "lastTempBasal: \(lastTempBasal)", + "lastLoopCompleted: \(lastLoopCompleted ?? .distantPast)", + "insulinOnBoard: \(insulinOnBoard)", + "error: \(error)" + ] + completionHandler(report.joined(separator: "\n")) + } + } +} + + extension Notification.Name { static let LoopDataUpdated = Notification.Name(rawValue: "com.loudnate.Naterade.notification.LoopDataUpdated") diff --git a/Loop/View Controllers/CommandResponseViewController.swift b/Loop/View Controllers/CommandResponseViewController.swift new file mode 100644 index 0000000000..7ad0fdedca --- /dev/null +++ b/Loop/View Controllers/CommandResponseViewController.swift @@ -0,0 +1,68 @@ +// +// CommandResponseViewController.swift +// Loop +// +// Created by Nate Racklyeft on 9/30/16. +// Copyright © 2016 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit + + +extension CommandResponseViewController { + static func generateDiagnosticReport(dataManager: DeviceDataManager) -> CommandResponseViewController { + let vc = CommandResponseViewController(command: { (completionHandler) in + let group = DispatchGroup() + + var doseStoreResponse = "" + group.enter() + dataManager.doseStore.generateDiagnosticReport { (report) in + doseStoreResponse = report + group.leave() + } + + var carbStoreResponse = "" + if let carbStore = dataManager.carbStore { + group.enter() + carbStore.generateDiagnosticReport { (report) in + carbStoreResponse = report + group.leave() + } + } + + var glucoseStoreResponse = "" + if let glucoseStore = dataManager.glucoseStore { + group.enter() + glucoseStore.generateDiagnosticReport { (report) in + glucoseStoreResponse = report + group.leave() + } + } + + // LoopStatus + var loopManagerResponse = "" + group.enter() + dataManager.loopManager.generateDiagnosticReport { (report) in + loopManagerResponse = report + group.leave() + } + + group.notify(queue: DispatchQueue.main) { + completionHandler([ + "Use the Share button above save this diagnostic report to aid investigating your problem. Issues can be filed at https://github.com/LoopKit/Loop/issues.", + "Generated: \(Date())", + String(reflecting: dataManager), + loopManagerResponse, + doseStoreResponse, + carbStoreResponse, + glucoseStoreResponse + ].joined(separator: "\n\n")) + } + + return NSLocalizedString("Loading...", comment: "The loading message for the diagnostic report screen") + }) + + return vc + } +} diff --git a/Loop/View Controllers/PumpIDTableViewController.swift b/Loop/View Controllers/PumpIDTableViewController.swift new file mode 100644 index 0000000000..8b5fd13851 --- /dev/null +++ b/Loop/View Controllers/PumpIDTableViewController.swift @@ -0,0 +1,113 @@ +// +// PumpIDTableViewController.swift +// Loop +// +// Created by Nate Racklyeft on 9/30/16. +// Copyright © 2016 LoopKit Authors. All rights reserved. +// + +import UIKit +import MinimedKit +import LoopKit + +protocol PumpIDTableViewControllerDelegate: TextFieldTableViewControllerDelegate { + func pumpIDTableViewControllerDidChangePumpRegion(_ controller: PumpIDTableViewController) +} + + +extension PumpRegion { + static let count = 2 +} + + +final class PumpIDTableViewController: TextFieldTableViewController { + + /// The selected pump region + var region: PumpRegion? { + didSet { + if let oldValue = oldValue, oldValue != region { + tableView.cellForRow(at: IndexPath(row: oldValue.rawValue, section: Section.region.rawValue))?.accessoryType = .none + } + + if let region = region, oldValue != region { + tableView.cellForRow(at: IndexPath(row: region.rawValue, section: Section.region.rawValue))?.accessoryType = .checkmark + } + + if let delegate = delegate as? PumpIDTableViewControllerDelegate { + delegate.pumpIDTableViewControllerDidChangePumpRegion(self) + } + } + } + + convenience init(pumpID: String?, region: PumpRegion?) { + self.init(style: .grouped) + + self.region = region + + placeholder = NSLocalizedString("Enter the 6-digit pump ID", comment: "The placeholder text instructing users how to enter a pump ID") + keyboardType = .numberPad + value = pumpID + contextHelp = NSLocalizedString("The pump ID can be found printed on the back, or near the bottom of the STATUS/Esc screen. It is the strictly numerical portion of the serial number (shown as SN or S/N).", comment: "Instructions on where to find the pump ID on a Minimed pump") + } + + override func viewDidLoad() { + super.viewDidLoad() + } + + // MARK: - Table view data source + + private enum Section: Int { + case id + case region + + static let count = 2 + } + + override func numberOfSections(in tableView: UITableView) -> Int { + return Section.count + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + switch Section(rawValue: section)! { + case .id: + return super.tableView(tableView, numberOfRowsInSection: section) + case .region: + return PumpRegion.count + } + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch Section(rawValue: indexPath.section)! { + case .id: + return super.tableView(tableView, cellForRowAt: indexPath) + case .region: + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") ?? UITableViewCell(style: .default, reuseIdentifier: "Cell") + + let region = PumpRegion(rawValue: indexPath.row)! + + cell.textLabel?.text = String(describing: region) + cell.accessoryType = self.region == region ? .checkmark : .none + + return cell + } + } + + override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { + switch Section(rawValue: section)! { + case .id: + return super.tableView(tableView, titleForFooterInSection: section) + case .region: + return NSLocalizedString("The pump regioncan be found printed on the back as part of the model number (REF), for example: MMT-551NAB, or MMT-515LWWS. If the model number contains \"NA\" or \"CA\", then the region is North America. If if contains \"WW\", then the region is World-Wide.", comment: "Instructions on selecting the pump region") + } + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + switch Section(rawValue: indexPath.section)! { + case .id: + break + case .region: + region = PumpRegion(rawValue: indexPath.row) + tableView.deselectRow(at: indexPath, animated: true) + } + } +} diff --git a/Loop/View Controllers/SettingsTableViewController.swift b/Loop/View Controllers/SettingsTableViewController.swift index 049b1dbdfc..db90f39cc2 100644 --- a/Loop/View Controllers/SettingsTableViewController.swift +++ b/Loop/View Controllers/SettingsTableViewController.swift @@ -16,7 +16,7 @@ private let ConfigCellIdentifier = "ConfigTableViewCell" private let TapToSetString = NSLocalizedString("Tap to set", comment: "The empty-state text for a configuration value") -final class SettingsTableViewController: UITableViewController, DailyValueScheduleTableViewControllerDelegate, TextFieldTableViewControllerDelegate { +final class SettingsTableViewController: UITableViewController, DailyValueScheduleTableViewControllerDelegate { @IBOutlet var devicesSectionTitleView: UIView! @@ -87,8 +87,9 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu fileprivate enum LoopRow: Int { case dosing = 0 case preferredInsulinDataSource + case diagnostic - static let count = 2 + static let count = 3 } fileprivate enum ConfigurationRow: Int { @@ -115,7 +116,7 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu static let count = 4 } - private lazy var valueNumberFormatter: NumberFormatter = { + fileprivate lazy var valueNumberFormatter: NumberFormatter = { let formatter = NumberFormatter() formatter.numberStyle = .decimal @@ -165,6 +166,13 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu cell.textLabel?.text = NSLocalizedString("Preferred Data Source", comment: "The title text for the preferred insulin data source config") cell.detailTextLabel?.text = String(describing: dataManager.preferredInsulinDataSource) + return cell + case .diagnostic: + let cell = tableView.dequeueReusableCell(withIdentifier: ConfigCellIdentifier, for: indexPath) + + cell.textLabel?.text = NSLocalizedString("Issue Report", comment: "The title text for the issue report cell") + cell.detailTextLabel?.text = nil + return cell } case .configuration: @@ -335,7 +343,7 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu switch row { case .pumpID: - vc = .pumpID(dataManager.pumpID) + vc = PumpIDTableViewController(pumpID: dataManager.pumpID, region: dataManager.pumpState?.pumpRegion) case .transmitterID: vc = .transmitterID(dataManager.transmitterID) case .insulinActionDuration: @@ -459,7 +467,12 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu vc.delegate = self show(vc, sender: sender) - default: + case .diagnostic: + let vc = CommandResponseViewController.generateDiagnosticReport(dataManager: dataManager) + vc.title = sender?.textLabel?.text + + show(vc, sender: sender) + case .dosing: break } case .services: @@ -542,45 +555,6 @@ final class SettingsTableViewController: UITableViewController, DailyValueSchedu dataManager.receiverEnabled = sender.isOn } - // MARK: - TextFieldTableViewControllerDelegate - - func textFieldTableViewControllerDidEndEditing(_ controller: TextFieldTableViewController) { - if let indexPath = controller.indexPath { - switch ConfigurationRow(rawValue: indexPath.row)! { - case .pumpID: - dataManager.pumpID = controller.value - case .transmitterID: - dataManager.transmitterID = controller.value - case .insulinActionDuration: - if let value = controller.value, let duration = valueNumberFormatter.number(from: value)?.doubleValue { - dataManager.insulinActionDuration = TimeInterval(hours: duration) - } else { - dataManager.insulinActionDuration = nil - } - case .maxBasal: - if let value = controller.value, let rate = valueNumberFormatter.number(from: value)?.doubleValue { - dataManager.maximumBasalRatePerHour = rate - } else { - dataManager.maximumBasalRatePerHour = nil - } - case .maxBolus: - if let value = controller.value, let units = valueNumberFormatter.number(from: value)?.doubleValue { - dataManager.maximumBolus = units - } else { - dataManager.maximumBolus = nil - } - default: - assertionFailure() - } - } - - tableView.reloadData() - } - - func textFieldTableViewControllerDidReturn(_ controller: TextFieldTableViewController) { - _ = navigationController?.popViewController(animated: true) - } - // MARK: - DailyValueScheduleTableViewControllerDelegate func dailyValueScheduleTableViewControllerWillFinishUpdating(_ controller: DailyValueScheduleTableViewController) { @@ -627,3 +601,58 @@ extension SettingsTableViewController: RadioSelectionTableViewControllerDelegate } } } + + +extension SettingsTableViewController: TextFieldTableViewControllerDelegate { + func textFieldTableViewControllerDidEndEditing(_ controller: TextFieldTableViewController) { + if let indexPath = controller.indexPath { + switch ConfigurationRow(rawValue: indexPath.row)! { + case .pumpID: + dataManager.pumpID = controller.value + + if let controller = controller as? PumpIDTableViewController, + let region = controller.region + { + dataManager.pumpState?.pumpRegion = region + } + case .transmitterID: + dataManager.transmitterID = controller.value + case .insulinActionDuration: + if let value = controller.value, let duration = valueNumberFormatter.number(from: value)?.doubleValue { + dataManager.insulinActionDuration = TimeInterval(hours: duration) + } else { + dataManager.insulinActionDuration = nil + } + case .maxBasal: + if let value = controller.value, let rate = valueNumberFormatter.number(from: value)?.doubleValue { + dataManager.maximumBasalRatePerHour = rate + } else { + dataManager.maximumBasalRatePerHour = nil + } + case .maxBolus: + if let value = controller.value, let units = valueNumberFormatter.number(from: value)?.doubleValue { + dataManager.maximumBolus = units + } else { + dataManager.maximumBolus = nil + } + default: + assertionFailure() + } + } + + tableView.reloadData() + } + + func textFieldTableViewControllerDidReturn(_ controller: TextFieldTableViewController) { + _ = navigationController?.popViewController(animated: true) + } +} + + +extension SettingsTableViewController: PumpIDTableViewControllerDelegate { + func pumpIDTableViewControllerDidChangePumpRegion(_ controller: PumpIDTableViewController) { + if let region = controller.region { + dataManager.pumpState?.pumpRegion = region + } + } +}