Explorar el Código

Release/0.2.6 (#186)

* Bump dev version to 0.2.6

* Fix Portuguese (#406) (#164)

* Crowdin updates and more info about Libre CGMs (#172)

* Crowdin

* German

* Additional Dutch

* fix insulin typo (#170)

* Fix RU typo

* Watch app fixes

* Reorder schemas

* Fix Pump setup view

* Cancel cuttent temp target if get a new active one

* Fix currrent temp target

* Fix calibrations for Libre2 sensors

* Crowdin updates (#175)

* Crowdin updates

Translations

* Localize "day(s)" (#428)

* crowdin updates

* Brazilian Portuguese

* Swedish

* Updated string

* Typo

* Typo (#180)

* Test calculation for TDD for the last 24 hours (#182)

Update TDD middleware. Now running without middleware errors.

Mind smaller possible pump dose and from comments

Adding Chris' formula

Format

Updates

Revert mw


Remove console log


Typo


Typo

Co-authored-by: Jon B Mårtensson <53905247+Jon-b-m@users.noreply.github.com>
Co-authored-by: Robert <comps@diprobe.com>
Ivan hace 4 años
padre
commit
44bd318fd2
Se han modificado 68 ficheros con 1388 adiciones y 1580 borrados
  1. 1 1
      Config.xcconfig
  2. 0 67
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/CGMBLEKit.xcscheme
  3. 2 2
      Dependencies/LibreTransmitter/Sources/LibreTransmitter/LibreSensor/SensorContents/SensorData.swift
  4. 13 5
      Dependencies/LibreTransmitter/Sources/LibreTransmitter/LibreTransmitterManager.swift
  5. 0 76
      Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/Shared-watchOS.xcscheme
  6. 0 161
      Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme
  7. 2 2
      Dependencies/LoopKit/LoopKit/fr.lproj/Localizable.strings
  8. 2 2
      Dependencies/LoopKit/LoopKit/nl.lproj/Localizable.strings
  9. 98 0
      Dependencies/LoopKit/LoopKit/pt-PT.lproj/Localizable.strings
  10. 1 1
      Dependencies/LoopKit/LoopKitUI/fr.lproj/Localizable.strings
  11. 1 1
      Dependencies/LoopKit/LoopKitUI/nl.lproj/Localizable.strings
  12. 252 0
      Dependencies/LoopKit/LoopKitUI/pt-PT.lproj/Localizable.strings
  13. 12 12
      Dependencies/rileylink_ios/OmniKitUI/de.lproj/OmnipodPumpManager.strings
  14. 11 11
      Dependencies/rileylink_ios/OmniKitUI/fr.lproj/Localizable.strings
  15. 1 1
      Dependencies/rileylink_ios/OmniKitUI/fr.lproj/OmnipodPumpManager.strings
  16. 1 1
      Dependencies/rileylink_ios/OmniKitUI/nl.lproj/Localizable.strings
  17. 1 1
      Dependencies/rileylink_ios/OmniKitUI/nl.lproj/OmnipodPumpManager.strings
  18. 261 0
      Dependencies/rileylink_ios/OmniKitUI/pt-PT.lproj/Localizable.strings
  19. 68 0
      Dependencies/rileylink_ios/OmniKitUI/pt-PT.lproj/OmnipodPumpManager.strings
  20. 6 6
      Dependencies/rileylink_ios/OmniKitUI/tr.lproj/Localizable.strings
  21. 0 93
      Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/OmniKitPacketParser.xcscheme
  22. 0 231
      Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/RileyLink.xcscheme
  23. 0 265
      Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme
  24. 26 26
      Dependencies/rileylink_ios/RileyLinkKitUI/fr.lproj/Localizable.strings
  25. 13 13
      Dependencies/rileylink_ios/RileyLinkKitUI/nl.lproj/Localizable.strings
  26. 104 0
      Dependencies/rileylink_ios/RileyLinkKitUI/pt-PT.lproj/Localizable.strings
  27. 2 2
      Dependencies/rileylink_ios/RileyLinkKitUI/tr.lproj/Localizable.strings
  28. 0 252
      FreeAPS.xcodeproj/xcshareddata/xcschemes/FreeAPS X.xcscheme
  29. 29 23
      Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/LoopKit Example.xcscheme
  30. 2 2
      FreeAPS/Resources/de.lproj/InfoPlist.strings
  31. 2 2
      FreeAPS/Resources/javascript/prepare/determine-basal.js
  32. 7 7
      FreeAPS/Resources/nl.lproj/InfoPlist.strings
  33. 9 2
      FreeAPS/Resources/pt.lproj/InfoPlist.strings
  34. 0 12
      FreeAPS/Resources/pt-PT.lproj/infoPlist.strings
  35. 10 4
      FreeAPS/Sources/APS/CGM/CGMType.swift
  36. 7 3
      FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift
  37. 17 9
      FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift
  38. 6 3
      FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings
  39. 6 3
      FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings
  40. 6 3
      FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings
  41. 56 53
      FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings
  42. 6 3
      FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings
  43. 6 3
      FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings
  44. 6 3
      FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings
  45. 31 31
      FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings
  46. 6 3
      FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings
  47. 6 3
      FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings
  48. 8 5
      FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings
  49. 31 28
      FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings
  50. 6 3
      FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings
  51. 57 54
      FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings
  52. 84 10
      FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings
  53. 7 4
      FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings
  54. 6 3
      FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings
  55. 7 4
      FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings
  56. 21 18
      FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings
  57. 7 4
      FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings
  58. 10 7
      FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings
  59. 12 0
      FreeAPS/Sources/Models/TempTarget.swift
  60. 1 11
      FreeAPS/Sources/Modules/AddTempTarget/AddTempTargetStateModel.swift
  61. 7 7
      FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift
  62. 4 4
      FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift
  63. 2 3
      FreeAPS/Sources/Modules/Home/HomeStateModel.swift
  64. 1 5
      FreeAPS/Sources/Modules/Main/View/MainRootView.swift
  65. 1 1
      FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorStateModel.swift
  66. 2 2
      FreeAPS/Sources/Services/WatchManager/WatchManager.swift
  67. 3 1
      FreeAPSWatch WatchKit Extension/Views/CarbsView.swift
  68. 15 2
      FreeAPSWatch WatchKit Extension/WatchStateModel.swift

+ 1 - 1
Config.xcconfig

@@ -1,5 +1,5 @@
 APP_DISPLAY_NAME = FreeAPS X
-BUILD_VERSION = 0.2.5
+BUILD_VERSION = 0.2.6
 DEVELOPER_TEAM = ##TEAM_ID##
 BUNDLE_IDENTIFIER = ru.artpancreas.$(DEVELOPMENT_TEAM).FreeAPS
 APP_GROUP_ID = group.com.$(DEVELOPMENT_TEAM).loopkit.LoopGroup

+ 0 - 67
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/CGMBLEKit.xcscheme

@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1300"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43CABDF21C3506F100005705"
-               BuildableName = "CGMBLEKit.framework"
-               BlueprintName = "CGMBLEKit"
-               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43CABDF21C3506F100005705"
-            BuildableName = "CGMBLEKit.framework"
-            BlueprintName = "CGMBLEKit"
-            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 2 - 2
Dependencies/LibreTransmitter/Sources/LibreTransmitter/LibreSensor/SensorContents/SensorData.swift

@@ -201,12 +201,12 @@ public struct SensorData: Codable {
 
     var humanReadableSensorAge: String {
         let days = TimeInterval(minutesSinceStart * 60) / aday
-        return String(format: "%.2f", days) + " day(s)"
+        return String(format: "%.2f", days) + NSLocalizedString(" day(s)", comment: "Sensor day(s)")
     }
 
     var humanReadableTimeLeft: String {
         let days = TimeInterval(minutesLeft * 60) / aday
-        return String(format: "%.2f", days) + " day(s)"
+        return String(format: "%.2f", days) + NSLocalizedString(" day(s)", comment: "Sensor day(s)")
     }
 
     var toJson: String {

+ 13 - 5
Dependencies/LibreTransmitter/Sources/LibreTransmitter/LibreTransmitterManager.swift

@@ -258,7 +258,7 @@ extension LibreTransmitterManager {
                 let aday = 86_400.0 //in seconds
                 var humanReadableSensorAge: String {
                     let days = TimeInterval(bleData.age * 60) / aday
-                    return String(format: "%.2f", days) + " day(s)"
+                    return String(format: "%.2f", days) + NSLocalizedString(" day(s)", comment: "Sensor day(s)")
                 }
 
 
@@ -273,7 +273,7 @@ extension LibreTransmitterManager {
 
                 var humanReadableTimeLeft: String {
                     let days = TimeInterval(minutesLeft * 60) / aday
-                    return String(format: "%.2f", days) + " day(s)"
+                    return String(format: "%.2f", days) + NSLocalizedString(" day(s)", comment: "Sensor day(s)")
                 }
 
                 //once the sensor has ended we don't know the exact date anymore
@@ -447,7 +447,7 @@ extension LibreTransmitterManager {
             glucose += LibreGlucose.fromHistoryMeasurements(sortedHistory, nativeCalibrationData: calibrationData)
         }*/
 
-        let newGlucose = glucosesToSamplesFilter(glucose, startDate: getStartDateForFilter())
+        var newGlucose = glucosesToSamplesFilter(glucose, startDate: getStartDateForFilter())
 
         if newGlucose.isEmpty {
             self.countTimesWithoutData &+= 1
@@ -459,6 +459,10 @@ extension LibreTransmitterManager {
 
         //todo: predictions also for libre2 bluetooth data
         //self.latestPrediction = prediction?.first
+        var predictions: [LibreGlucose] = []
+
+        overcalibrate(entries: &newGlucose, prediction: &predictions)
+
         self.setObservables(sensorData: nil, bleData: bleData, metaData: device)
 
         self.logger.debug("dabear:: handleGoodReading returned with \(newGlucose.count) entries")
@@ -638,6 +642,12 @@ extension LibreTransmitterManager {
             entries += LibreGlucose.fromHistoryMeasurements(history, nativeCalibrationData: calibration)
         }
 
+        overcalibrate(entries: &entries, prediction: &prediction)
+
+        return (glucose: entries, prediction: prediction)
+    }
+
+    private func overcalibrate(entries: inout [LibreGlucose], prediction: inout [LibreGlucose]) {
         // overcalibrate
         var overcalibration: ((Double) -> (Double))? = nil
         delegateQueue.sync { overcalibration = cgmManagerDelegate?.overcalibration(for: self) }
@@ -654,8 +664,6 @@ extension LibreTransmitterManager {
             entries = overcalibrate(entries: entries)
             prediction = overcalibrate(entries: prediction)
         }
-
-        return (glucose: entries, prediction: prediction)
     }
 
     public func handleGoodReading(data: SensorData?, _ callback: @escaping (LibreError?, GlucoseArrayWithPrediction?) -> Void) {

+ 0 - 76
Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/Shared-watchOS.xcscheme

@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1240"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "NO">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "A9E6758022713F4700E25293"
-               BuildableName = "LoopKit.framework"
-               BlueprintName = "LoopKit-watchOS"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "A9E6758022713F4700E25293"
-            BuildableName = "LoopKit.framework"
-            BlueprintName = "LoopKit-watchOS"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "A9E6758022713F4700E25293"
-            BuildableName = "LoopKit.framework"
-            BlueprintName = "LoopKit-watchOS"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 161
Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme

@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1240"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "NO">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43D8FDCA1C728FDF0073BE78"
-               BuildableName = "LoopKit.framework"
-               BlueprintName = "LoopKit"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43BA7153201E484D0058961E"
-               BuildableName = "LoopKitUI.framework"
-               BlueprintName = "LoopKitUI"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "892A5D33222F03CB008961AB"
-               BuildableName = "LoopTestingKit.framework"
-               BlueprintName = "LoopTestingKit"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "89D2047121CC7BD7001238CC"
-               BuildableName = "MockKit.framework"
-               BlueprintName = "MockKit"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "89D2048E21CC7C12001238CC"
-               BuildableName = "MockKitUI.framework"
-               BlueprintName = "MockKitUI"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43D8FDCA1C728FDF0073BE78"
-            BuildableName = "LoopKit.framework"
-            BlueprintName = "LoopKit"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43D8FDD41C728FDF0073BE78"
-               BuildableName = "LoopKitTests.xctest"
-               BlueprintName = "LoopKitTests"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "1DEE226824A676A300693C32"
-               BuildableName = "LoopKitHostedTests.xctest"
-               BlueprintName = "LoopKitHostedTests"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43D8FDCA1C728FDF0073BE78"
-            BuildableName = "LoopKit.framework"
-            BlueprintName = "LoopKit"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43D8FDCA1C728FDF0073BE78"
-            BuildableName = "LoopKit.framework"
-            BlueprintName = "LoopKit"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 2 - 2
Dependencies/LoopKit/LoopKit/fr.lproj/Localizable.strings

@@ -1,8 +1,8 @@
 /* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "Échec de bolus de %1$@ U";
+"%1$@ U bolus failed" = "Échec du bolus de %1$@ U";
 
 /* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "Le bolus de %1$@ U a peut-être échou";
+"%1$@ U bolus may not have succeeded" = "Le bolus de %1$@ U a peut-être échoué";
 
 /* The error description describing when Health sharing was denied */
 "Authorization Denied" = "Autorisation refusée";

+ 2 - 2
Dependencies/LoopKit/LoopKit/nl.lproj/Localizable.strings

@@ -41,7 +41,7 @@
 "Flat" = "Gelijk";
 
 /* The short unit display string for grams per U */
-"g/U" = "g/U";
+"g/U" = "g/E";
 
 /* Generic pump error description */
 "Invalid Configuration" = "Ongeldige configuratie";
@@ -53,7 +53,7 @@
 "mg/dL/U" = "mg/dL/E";
 
 /* The short unit display string for millimoles per liter */
-"mmol/L" = "mmol/L";
+"mmol/L" = "mmol/l";
 
 /* The short unit display string for millimoles per liter per U */
 "mmol/L/U" = "mmol/L/E";

+ 98 - 0
Dependencies/LoopKit/LoopKit/pt-PT.lproj/Localizable.strings

@@ -0,0 +1,98 @@
+/* Describes a certain bolus failure (1: size of the bolus in units) */
+"%1$@ U bolus failed" = "%1$@ U bolus failed";
+
+/* Describes an uncertain bolus failure (1: size of the bolus in units) */
+"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
+
+/* The error description describing when Health sharing was denied */
+"Authorization Denied" = "Authorization Denied";
+
+/* Recovery instruction for an uncertain bolus failure */
+"Check your pump before retrying" = "Check your pump before retrying";
+
+/* The description of an error returned when attempting to delete a sample not shared by the current app */
+"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
+
+/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
+"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
+
+/* Generic pump error description */
+"Communication Failure" = "Communication Failure";
+
+/* Generic pump error description */
+"Connection Failure" = "Connection Failure";
+
+/* Generic pump error description */
+"Device Refused" = "Device Refused";
+
+/* Recovery suggestion for a no data error */
+"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
+
+/* Glucose trend down */
+"Falling" = "Falling";
+
+/* Glucose trend down-down */
+"Falling fast" = "Falling fast";
+
+/* Glucose trend down-down-down */
+"Falling very fast" = "Falling very fast";
+
+/* Glucose trend flat */
+"Flat" = "Flat";
+
+/* The short unit display string for grams per U */
+"g/U" = "g/U";
+
+/* Generic pump error description */
+"Invalid Configuration" = "Invalid Configuration";
+
+/* Recovery instruction for a certain bolus failure */
+"It is safe to retry" = "It is safe to retry";
+
+/* The short unit display string for milligrams per deciliter per U */
+"mg/dL/U" = "mg/dL/U";
+
+/* The short unit display string for millimoles per liter */
+"mmol/L" = "mmol/L";
+
+/* The short unit display string for millimoles per liter per U */
+"mmol/L/U" = "mmol/L/U";
+
+/* Sensor state description for the non-valid state */
+"Needs Attention" = "Needs Attention";
+
+/* Describes an error for no data found in a CarbStore request */
+"No values found" = "No values found";
+
+/* Sensor state description for the valid state */
+"OK" = "OK";
+
+/* The error recovery suggestion when Health sharing was denied */
+"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
+
+/* Glucose trend up */
+"Rising" = "Rising";
+
+/* Glucose trend up-up */
+"Rising fast" = "Rising fast";
+
+/* Glucose trend up-up-up */
+"Rising very fast" = "Rising very fast";
+
+/* The short unit display string for international units of insulin */
+"U" = "U";
+
+/* The short unit display string for international units of insulin per hour */
+"U/hr" = "U/hr";
+
+/* The long unit display string for a singular international unit of insulin */
+"Unit" = "Unit";
+
+/* The long unit display string for a singular international unit of insulin per hour */
+"Unit/hour" = "Unit/hour";
+
+/* The long unit display string for international units of insulin */
+"Units" = "Units";
+
+/* The long unit display string for international units of insulin per hour */
+"Units/hour" = "Units/hour";

+ 1 - 1
Dependencies/LoopKit/LoopKitUI/fr.lproj/Localizable.strings

@@ -81,7 +81,7 @@
 "com.loudnate.LoopKit.errorAlertActionTitle" = "OK";
 
 /* The title for the override emoji condition section */
-"Condition" = "Condition";
+"Condition" = "Conditions";
 
 /* Title of the setup button to continue */
 "Continue" = "Continuer";

+ 1 - 1
Dependencies/LoopKit/LoopKitUI/nl.lproj/Localizable.strings

@@ -15,7 +15,7 @@
 "%@." = "%@.";
 
 /* Format string for reservoir volume. (1: The localized volume) */
-"%@U" = "%@U";
+"%@U" = "%@E";
 
 /* Title of the carb entry absorption time cell */
 "Absorption Time" = "Absorptie tijd";

+ 252 - 0
Dependencies/LoopKit/LoopKitUI/pt-PT.lproj/Localizable.strings

@@ -0,0 +1,252 @@
+/* The format for an override preset cell. (1: symbol)(2: name)
+   The format for an override symbol and name (1: symbol)(2: name) */
+"%1$@ %2$@" = "%1$@ %2$@";
+
+/* Accessibility format string for (1: localized volume)(2: time) */
+"%1$@ units remaining at %2$@" = "%1$@ units remaining at %2$@";
+
+/* The format for a glucose target range. (1: min target)(2: max target)(3: glucose unit) */
+"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@";
+
+/* The format for an insulin needs percentage. */
+"%@%% of normal insulin" = "%@%% of normal insulin";
+
+/* Appends a full-stop to a statement */
+"%@." = "%@.";
+
+/* Format string for reservoir volume. (1: The localized volume) */
+"%@U" = "%@U";
+
+/* Title of the carb entry absorption time cell */
+"Absorption Time" = "Absorption Time";
+
+/* The title for the override emoji activity section */
+"Activity" = "Activity";
+
+/* Action sheet confirmation message for pump history deletion */
+"Are you sure you want to delete all history entries?" = "Are you sure you want to delete all history entries?";
+
+/* Action sheet confirmation message for reservoir deletion */
+"Are you sure you want to delete all reservoir values?" = "Are you sure you want to delete all reservoir values?";
+
+/* The title of the button to add the credentials for a service */
+"Add Account" = "Add Account";
+
+/* The title of the button to remove the credentials for a service */
+"Delete Account" = "Delete Account";
+
+/* Describes a percentage decrease in overall insulin needs */
+"Basal, bolus, and correction insulin dose amounts are decreased by %@%%." = "Basal, bolus, and correction insulin dose amounts are decreased by %@%%.";
+
+/* Describes a percentage increase in overall insulin needs */
+"Basal, bolus, and correction insulin dose amounts are increased by %@%%." = "Basal, bolus, and correction insulin dose amounts are increased by %@%%.";
+
+/* Describes a lack of change in overall insulin needs */
+"Basal, bolus, and correction insulin dose amounts are unaffected." = "Basal, bolus, and correction insulin dose amounts are unaffected.";
+
+/* The title of the cancel action in an action sheet */
+"Cancel" = "Cancel";
+
+/* The text for the override cancellation button */
+"Cancel Override" = "Cancel Override";
+
+/* Title text for suspend resume button when temp basal canceling */
+"Canceling Temp Basal" = "Canceling Temp Basal";
+
+/* The title of the view controller to create a new carb entry */
+"Add Carb Entry" = "Add Carb Entry";
+
+/* The title of the view controller to edit an existing carb entry */
+"Edit Carb Entry" = "Edit Carb Entry";
+
+/* Footer text for customizing an override from a preset (1: preset name) */
+"Changes will only apply this time you enable the override. The default settings of %@ will not be affected." = "Changes will only apply this time you enable the override. The default settings of %@ will not be affected.";
+
+/* Carb entry section footer text explaining absorption time */
+"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact.";
+
+/* The format string describing the date of a COB value. The first format argument is the localized date. */
+"com.loudnate.CarbKit.COBDateLabel" = "at %1$@";
+
+/* The format string describing the starting date of a total value. The first format argument is the localized date. */
+"com.loudnate.CarbKit.totalDateLabel" = "since %1$@";
+
+/* The format string describing the date of an IOB value. The first format argument is the localized date. */
+"com.loudnate.InsulinKit.IOBDateLabel" = "at %1$@";
+
+/* The format string describing the starting date of a total value. The first format argument is the localized date. */
+"com.loudnate.InsulinKit.totalDateLabel" = "since %1$@";
+
+/* The title of the action used to dismiss an error alert */
+"com.loudnate.LoopKit.errorAlertActionTitle" = "OK";
+
+/* The title for the override emoji condition section */
+"Condition" = "Condition";
+
+/* Title of the setup button to continue */
+"Continue" = "Continue";
+
+/* The section footer of correction range schedule */
+"Correction range is the blood glucose range that you would like Loop to correct to." = "Correction range is the blood glucose range that you would like Loop to correct to.";
+
+/* The text for a custom override */
+"Custom" = "Custom";
+
+/* The title for the custom override entry screen */
+"Custom Override" = "Custom Override";
+
+/* Title of the carb entry date picker cell */
+"Date" = "Date";
+
+/* Button title to delete all objects */
+"Delete All" = "Delete All";
+
+/* The text for the override duration setting */
+"Duration" = "Duration";
+
+/* The title for the override editing screen */
+"Edit Override" = "Edit Override";
+
+/* Footer text for editing an active override (1: preset name) */
+"Editing affects only the active override. The default settings of %@ will not be affected." = "Editing affects only the active override. The default settings of %@ will not be affected.";
+
+/* The text for the indefinite override duration setting */
+"Enable Indefinitely" = "Enable Indefinitely";
+
+/* The detail text describing an enabled setting */
+"Enabled" = "Enabled";
+
+/* The placeholder text instructing users how to enter a maximum bolus */
+"Enter a number of units" = "Enter a number of units";
+
+/* The placeholder text instructing users how to enter a maximum basal rate */
+"Enter a rate in units per hour" = "Enter a rate in units per hour";
+
+/* Section title for fast absorbing food */
+"Fast" = "Fast";
+
+/* The description shown on the insulin sensitivity schedule interface. */
+"Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose." = "Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose.";
+
+/* Placeholder for maximum value in glucose range */
+"max" = "max";
+
+/* The title text for the maximum basal rate value */
+"Maximum Basal Rate" = "Maximum Basal Rate";
+
+/* The title text for the maximum bolus value */
+"Maximum Bolus" = "Maximum Bolus";
+
+/* Section title for medium absorbing food */
+"Medium" = "Medium";
+
+/* Placeholder for minimum value in glucose range */
+"min" = "min";
+
+/* Alert action title to open error help */
+"More Info" = "More Info";
+
+/* The text for the override preset name setting */
+"Name" = "Name";
+
+/* The title for the new override preset entry screen */
+"New Preset" = "New Preset";
+
+/* Section title for no-carb food
+   The title for override emoji miscellaneous section */
+"Other" = "Other";
+
+/* The title text for the insulin sensitivity scaling setting */
+"Overall Insulin Needs" = "Overall Insulin Needs";
+
+/* The title text for the override presets screen */
+"Override Presets" = "Override Presets";
+
+/* Text directing the user to configure override presets */
+"Override presets can be set up under the 'Configuration' section of the settings screen." = "Override presets can be set up under the 'Configuration' section of the settings screen.";
+
+/* The section title of glucose overrides */
+"Overrides" = "Overrides";
+
+/* Title for the pre-meal override range */
+"Pre-Meal" = "Pre-Meal";
+
+/* The section header text override presets */
+"PRESETS" = "PRESETS";
+
+/* The title of the screen displaying a pump event */
+"Pump Event" = "Pump Event";
+
+/* Title text for button to resume insulin delivery */
+"Resume Delivery" = "Resume Delivery";
+
+/* Title text for button when insulin delivery is in the process of being resumed */
+"Resuming" = "Resuming";
+
+/* The text for the override preset name field placeholder */
+"Running" = "Running";
+
+/* Button text for saving glucose correction range schedule
+   Button text for saving insulin sensitivity schedule */
+"Save" = "Save";
+
+/* The section header text for a scheduled override */
+"SCHEDULED OVERRIDE" = "SCHEDULED OVERRIDE";
+
+/* Section title for slow absorbing food */
+"Slow" = "Slow";
+
+/* The text for the override start time */
+"Start Time" = "Start Time";
+
+/* Title text for suspend resume button when temp basal starting */
+"Starting Temp Basal" = "Starting Temp Basal";
+
+/* Title text for button to suspend insulin delivery */
+"Suspend Delivery" = "Suspend Delivery";
+
+/* Title text for button when insulin delivery is in the process of being stopped */
+"Suspending" = "Suspending";
+
+/* The text for the override preset symbol setting */
+"Symbol" = "Symbol";
+
+/* The empty-state text for a configuration value */
+"Tap to set" = "Tap to set";
+
+/* The text for the override target range setting */
+"Target Range" = "Target Range";
+
+/* The title for the override selection screen */
+"Temporary Override" = "Temporary Override";
+
+/* The default placeholder string for a credential */
+"Required" = "Required";
+
+/* Alert body displayed absorption time greater than max (1: maximum absorption time) */
+"The maximum absorption time is %@" = "The maximum absorption time is %@";
+
+/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */
+"The maximum allowed amount is %@ grams" = "The maximum allowed amount is %@ grams";
+
+/* The schedule table view header describing the configured time zone difference from the default time zone. The substitution parameters are: (1: time zone name)(2: +/-)(3: time interval) */
+"Times in %1$@%2$@%3$@" = "Times in %1$@%2$@%3$@";
+
+/* The unit string for units per hour */
+"U/hour" = "U/hour";
+
+/* The unit string for units */
+"Units" = "Units";
+
+/* Accessibility value for an unknown value
+   The default title to use when an entry has none */
+"Unknown" = "Unknown";
+
+/* Label indicating validation is occurring */
+"Verifying" = "Verifying";
+
+/* Title of an alert containing a validation warning */
+"Warning" = "Warning";
+
+/* Title for the workout override range */
+"Workout" = "Workout";

+ 12 - 12
Dependencies/rileylink_ios/OmniKitUI/de.lproj/OmnipodPumpManager.strings

@@ -1,5 +1,5 @@
 /* Class = "UITableViewSection"; headerTitle = "Remove POD"; ObjectID = "1LF-te-Bdd"; */
-"1LF-te-Bdd.headerTitle" = "Pod entfernen";
+"1LF-te-Bdd.headerTitle" = "POD entfernen";
 
 /* Class = "UINavigationItem"; title = "RileyLink Setup"; ObjectID = "3HH-eJ-lRh"; */
 "3HH-eJ-lRh.title" = "RileyLink-Setup";
@@ -8,13 +8,13 @@
 "6vo-Ov-UpE.title" = "Pod-Einstellungen";
 
 /* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "91O-Un-vKc"; */
-"91O-Un-vKc.title" = "Pumpen-Setup";
+"91O-Un-vKc.title" = "Pumpen-Installation";
 
 /* Class = "UITableViewSection"; footerTitle = "NOTE: Do not remove the pod's needle cap at this time."; ObjectID = "EUt-xk-Rmp"; */
-"EUt-xk-Rmp.footerTitle" = "HINWEIS: Bitte entfernen Sie die Schutzkappe der Nadel noch nicht.";
+"EUt-xk-Rmp.footerTitle" = "HINWEIS: Bitte entfernen Sie die Schutzkappe der Nadel noch nicht vom POD.";
 
 /* Class = "UITableViewSection"; headerTitle = "Prepare Pod"; ObjectID = "EUt-xk-Rmp"; */
-"EUt-xk-Rmp.headerTitle" = "Pod vorbereiten";
+"EUt-xk-Rmp.headerTitle" = "POD vorbereiten";
 
 /* Class = "UILabel"; text = "Loop will remind you to change your pod before it expires. You can change this to a time convenient for you."; ObjectID = "Eng-IY-fQ7"; */
 "Eng-IY-fQ7.text" = "Loop sendet Ihnen eine Benachrichtigung, bevor die Nutzungsdauer des Pods abläuft. Sie können die Zeit entsprechend Ihren Bedürfnissen anpassen.";
@@ -23,16 +23,16 @@
 "GK7-jb-tyY.text" = "Bitte deaktivieren Sie den Pod. Sobald der Pod vollständig deaktiviert ist, können Sie ihn vom Körper entfernen.";
 
 /* Class = "UINavigationItem"; title = "Insert Cannula"; ObjectID = "HwT-30-f0y"; */
-"HwT-30-f0y.title" = "Kanüle einsetzen";
+"HwT-30-f0y.title" = "Kanüle setzen";
 
 /* Class = "UILabel"; text = "Prepare site. Remove the pod's needle cap and adhesive backing. If pod is OK, apply to site."; ObjectID = "Iuv-5M-bDH"; */
 "Iuv-5M-bDH.text" = "Bereiten Sie die Einsetzstelle für den neuen Pod vor. Entfernen Sie die Schutzkappe der Nadel und die Folie. Sofern der Pod in Ordnung ist, bringen Sie diesen auf der Einsetzstelle an.";
 
 /* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "aNg-mm-Uuy"; */
-"aNg-mm-Uuy.title" = "Pumpen-Setup";
+"aNg-mm-Uuy.title" = "Pumpen-Installation";
 
 /* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "ack-ra-XH6"; */
-"ack-ra-XH6.title" = "Pumpen-Setup";
+"ack-ra-XH6.title" = "Pumpen-Installation";
 
 /* Class = "UILabel"; text = "Your Pod is ready for use."; ObjectID = "bJ5-iH-fnF"; */
 "bJ5-iH-fnF.text" = "Ihr Pod kann nun verwendet werden.";
@@ -44,25 +44,25 @@
 "jVO-Ut-MhL.title" = "Kopplung des Pods";
 
 /* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "k1Y-x4-m0a"; */
-"k1Y-x4-m0a.title" = "Pumpen-Setup";
+"k1Y-x4-m0a.title" = "Pumpen-Installation";
 
 /* Class = "UILabel"; text = "Review your settings below. They will be programmed into the pod during pairing. You can change these settings at any time in Loopʼs Settings screen."; ObjectID = "kLL-SQ-K0a"; */
 "kLL-SQ-K0a.text" = "Überprüfen Sie Ihre Einstellungen. Diese werden während der Kopplung vom Pod übernommen. Sie können Ihre Einstellungen jederzeit bei den Loop-Einstellungen anpassen.";
 
 /* Class = "UINavigationItem"; title = "Setup Complete"; ObjectID = "nDb-R5-e02"; */
-"nDb-R5-e02.title" = "Setup erfolgreich";
+"nDb-R5-e02.title" = "Installation erfolgreich";
 
 /* Class = "UITableViewSection"; footerTitle = "NOTE: If cannula sticks out, press cancel."; ObjectID = "rcC-ke-lUP"; */
 "rcC-ke-lUP.footerTitle" = "HINWEIS: Sollte die Kanüle hervorstehen, wählen Sie abbrechen.";
 
 /* Class = "UITableViewSection"; headerTitle = "Apply POD"; ObjectID = "rcC-ke-lUP"; */
-"rcC-ke-lUP.headerTitle" = "Pod anbringen";
+"rcC-ke-lUP.headerTitle" = "POD anbringen";
 
 /* Class = "UILabel"; text = "Label"; ObjectID = "vEc-Km-ewe"; */
-"vEc-Km-ewe.text" = "Label";
+"vEc-Km-ewe.text" = "Beschriftung";
 
 /* Class = "UILabel"; text = "Fill a new pod with insulin. Listen for 2 beeps from the pod during filling. Keep RileyLink adjacent to the pod during pairing."; ObjectID = "vmF-Dc-3DS"; */
-"vmF-Dc-3DS.text" = "Befüllen Sie den neuen Pod mit Insulin. Achten Sie auf die 2 Piepstöne während des Füllvorgangs. Behalten Sie während der Kopplung den RileyLink in der Nähe des Pods.";
+"vmF-Dc-3DS.text" = "Befüllen Sie den neuen Pod mit Insulin. Achten Sie auf die 2 Piepstöne während des Füllvorgangs. Behalten Sie während der Kopplung Ihr RileyLink, OrangeLink, EmaLink oder sonstige in der Nähe des Pods.";
 
 /* Class = "UINavigationItem"; title = "Replace Pod"; ObjectID = "yy1-xf-HdR"; */
 "yy1-xf-HdR.title" = "Pod ersetzen";

+ 11 - 11
Dependencies/rileylink_ios/OmniKitUI/fr.lproj/Localizable.strings

@@ -15,7 +15,7 @@
 "%@ U (Finished)" = "%@ U (Terminé)";
 
 /* Format string for bolus progress. (1: The delivered amount) (2: The programmed amount) (3: the percent progress) */
-"%@ U of %@ U (%@)" = "%1$@ U of %2$@ U (%3$@)";
+"%@ U of %@ U (%@)" = "%1$@ U sur %2$@ U (%3$@)";
 
 /* Format string for temp basal rate. (1: The localized amount) */
 "%@ U/hour" = "%@ U/heure";
@@ -36,7 +36,7 @@
 "Active Time" = "Heure d’activation";
 
 /* The title of the cell showing the Pod Active Clock */
-"Pod Active Clock" = "Pod Active Clock";
+"Pod Active Clock" = "Horloge active Pod";
 
 /* The title of the cell showing alarm status */
 "Alarms" = "Alarmes";
@@ -72,7 +72,7 @@
 "Configuration" = "Configuration";
 
 /* The title of the Insulin Type */
-"Insulin Type" = "Insulin Type";
+"Insulin Type" = "Type d'Insuline";
 
 /* The title of the continue action in an action sheet */
 "Continue" = "Continuer";
@@ -106,16 +106,16 @@
 "Error enabling bolus beeps" = "Erreur lors de l’activation des bips de bolus";
 
 /* The alert title for enable Confirmation Beeps */
-"Enable Confirmation Beeps" = "Enable Confirmation Beeps";
+"Enable Confirmation Beeps" = "Activer les bips de confirmation";
 
 /* The alert title for Disable Confirmation Beep */
-"Disable Confirmation Beeps" = "Disable Confirmation Beeps";
+"Disable Confirmation Beeps" = "Désactiver les bips de confirmation";
 
 /* The alert title for enable Automatic Bolus Beeps */
-"Enable Automatic Bolus Beeps" = "Enable Automatic Bolus Beeps";
+"Enable Automatic Bolus Beeps" = "Activer les bips de Bolus automatiques";
 
 /* The alert title for Disable Automatic Bolus Beeps */
-"Disable Automatic Bolus Beeps" = "Disable Automatic Bolus Beeps";
+"Disable Automatic Bolus Beeps" = "Désactiver les bips de bolus automatiques";
 
 /* The alert title for a resume error */
 "Error Resuming" = "Erreur lors de la reprise";
@@ -249,13 +249,13 @@
 "Unknown" = "Inconnu";
 
 /* The title of the diagnostics section in settings */
-"Diagnostics" = "Diagnostics";
+"Diagnostics" = "Diagnostic";
 
 /* The diagnostic command Read Pod Status */
-"Read Pod Status" = "Read Pod Status";
+"Read Pod Status" = "Lire l’état de la pompe";
 
 /* The diagnostic command Read Pulse Log */
-"Read Pulse Log" = "Read Pulse Log";
+"Read Pulse Log" = "Lecture journal d'impulsion";
 
 /* The title of the pod details section in settings */
-"Pod Details" = "Pod Details";
+"Pod Details" = "Détails du Pod";

+ 1 - 1
Dependencies/rileylink_ios/OmniKitUI/fr.lproj/OmnipodPumpManager.strings

@@ -59,7 +59,7 @@
 "rcC-ke-lUP.headerTitle" = "Appliquez le POD";
 
 /* Class = "UILabel"; text = "Label"; ObjectID = "vEc-Km-ewe"; */
-"vEc-Km-ewe.text" = "Label";
+"vEc-Km-ewe.text" = "Étiquette";
 
 /* Class = "UILabel"; text = "Fill a new pod with insulin. Listen for 2 beeps from the pod during filling. Keep RileyLink adjacent to the pod during pairing."; ObjectID = "vmF-Dc-3DS"; */
 "vmF-Dc-3DS.text" = "Remplissez un nouveau pod avec de l’insuline. Vérifiez de bien entendre les 2 beeps du pod pendant le remplissage. Gardez le RileyLink à proximité du pod pendant l’appairage.";

+ 1 - 1
Dependencies/rileylink_ios/OmniKitUI/nl.lproj/Localizable.strings

@@ -36,7 +36,7 @@
 "Active Time" = "Activatie tijd";
 
 /* The title of the cell showing the Pod Active Clock */
-"Pod Active Clock" = "Pod Active Clock";
+"Pod Active Clock" = "Pod actieve klok";
 
 /* The title of the cell showing alarm status */
 "Alarms" = "Alarmen";

+ 1 - 1
Dependencies/rileylink_ios/OmniKitUI/nl.lproj/OmnipodPumpManager.strings

@@ -2,7 +2,7 @@
 "1LF-te-Bdd.headerTitle" = "Verwijder POD";
 
 /* Class = "UINavigationItem"; title = "RileyLink Setup"; ObjectID = "3HH-eJ-lRh"; */
-"3HH-eJ-lRh.title" = "RileyLink Setup";
+"3HH-eJ-lRh.title" = "RileyLink instellingen";
 
 /* Class = "UITableViewController"; title = "Pod Settings"; ObjectID = "6vo-Ov-UpE"; */
 "6vo-Ov-UpE.title" = "Pod Instellingen";

+ 261 - 0
Dependencies/rileylink_ios/OmniKitUI/pt-PT.lproj/Localizable.strings

@@ -0,0 +1,261 @@
+/* Accessibility format string for (1: localized volume)(2: time) */
+"%1$@ units remaining at %2$@" = "%1$@ units remaining at %2$@";
+
+/* The format string for displaying an offset from a time zone: (1: GMT)(2: -)(3: 4:00) */
+"%1$@%2$@%3$@" = "%1$@%2$@%3$@";
+
+/* Format string providing instructions for replacing pod due to a fault. (1: The fault description) */
+"%1$@. Insulin delivery has stopped. Please deactivate and remove pod." = "%1$@. Insulin delivery has stopped. Please deactivate and remove pod.";
+
+/* Format string for delivered insulin. (1: The localized amount)
+   Format string for insulin remaining in reservoir. (1: The localized amount) */
+"%@ U" = "%@ U";
+
+/* Format string for bolus progress when finished. (1: The localized amount) */
+"%@ U (Finished)" = "%@ U (Finished)";
+
+/* Format string for bolus progress. (1: The delivered amount) (2: The programmed amount) (3: the percent progress) */
+"%@ U of %@ U (%@)" = "%1$@ U of %2$@ U (%3$@)";
+
+/* Format string for temp basal rate. (1: The localized amount) */
+"%@ U/hour" = "%@ U/hour";
+
+/* Format string for bolus percent progress. (1: Percent progress) */
+"%@%%" = "%@%%";
+
+/* Format string for reservoir reading when above or equal to maximum reading. (1: The localized amount) */
+"%@+ U" = "%@+ U";
+
+/* Appends a full-stop to a statement */
+"%@." = "%@.";
+
+/* Format string for reservoir volume. (1: The localized volume) */
+"%@U" = "%@U";
+
+/* The title of the cell showing the pod activated at time */
+"Active Time" = "Active Time";
+
+/* The title of the cell showing the Pod Active Clock */
+"Pod Active Clock" = "Pod Active Clock";
+
+/* The title of the cell showing alarm status */
+"Alarms" = "Alarms";
+
+/* Confirmation message for shutting down a pod */
+"Are you sure you want to shutdown this pod?" = "Are you sure you want to shutdown this pod?";
+
+/* Confirmation message for removing Omnipod PumpManager */
+"Are you sure you want to stop using Omnipod?" = "Are you sure you want to stop using Omnipod?";
+
+/* The title text for the address assigned to the pod */
+"Assigned Address" = "Assigned Address";
+
+/* The title of the cell showing pod basal status */
+"Basal Delivery" = "Basal Delivery";
+
+/* The title text for the basal rate schedule */
+"Basal Rates" = "Basal Rates";
+
+/* The title of the cell showing pod bolus status */
+"Bolus Delivery" = "Bolus Delivery";
+
+/* The title of the cancel action in an action sheet */
+"Cancel" = "Cancel";
+
+/* The title of the command to change pump time zone */
+"Change Time Zone" = "Change Time Zone";
+
+/* Progress message for changing pod time. */
+"Changing time…" = "Changing time…";
+
+/* The title of the configuration section in settings */
+"Configuration" = "Configuration";
+
+/* The title of the Insulin Type */
+"Insulin Type" = "Insulin Type";
+
+/* The title of the continue action in an action sheet */
+"Continue" = "Continue";
+
+/* Button title to deactivate pod because of fault during setup */
+"Deactivate" = "Deactivate";
+
+/* Button title for pod deactivation
+   Button title to deactivate pod */
+"Deactivate Pod" = "Deactivate Pod";
+
+/* Button title to delete Omnipod PumpManager */
+"Delete Omnipod" = "Delete Omnipod";
+
+/* Title text for delivery limits */
+"Delivery Limits" = "Delivery Limits";
+
+/* The title of the device information section in settings */
+"Device Information" = "Device Information";
+
+/* Title text for button to disable bolus beeps */
+"Disable Bolus Beeps" = "Disable Bolus Beeps";
+
+/* Title text for button to enable bolus beeps */
+"Enable Bolus Beeps" = "Enable Bolus Beeps";
+
+/* The alert title for disable bolus beeps error */
+"Error disabling bolus beeps" = "Error disabling bolus beeps";
+
+/* The alert title for enable bolus beeps error */
+"Error enabling bolus beeps" = "Error enabling bolus beeps";
+
+/* The alert title for enable Confirmation Beeps */
+"Enable Confirmation Beeps" = "Enable Confirmation Beeps";
+
+/* The alert title for Disable Confirmation Beep */
+"Disable Confirmation Beeps" = "Disable Confirmation Beeps";
+
+/* The alert title for enable Automatic Bolus Beeps */
+"Enable Automatic Bolus Beeps" = "Enable Automatic Bolus Beeps";
+
+/* The alert title for Disable Automatic Bolus Beeps */
+"Disable Automatic Bolus Beeps" = "Disable Automatic Bolus Beeps";
+
+/* The alert title for a resume error */
+"Error Resuming" = "Error Resuming";
+
+/* The alert title for a suspend error */
+"Error Suspending" = "Error Suspending";
+
+/* The title of the cell showing the pod expiration reminder date */
+"Expiration Reminder" = "Expiration Reminder";
+
+/* The title of the cell showing the pod expiration after expiry */
+"Expired" = "Expired";
+
+/* The title of the cell showing the pod expiration */
+"Expires" = "Expires";
+
+/* Pod life HUD view label */
+"Fault" = "Fault";
+
+/* The title of the command to finish pod setup */
+"Finish pod setup" = "Finish pod setup";
+
+/* Accessibility format string for (1: localized volume)(2: time) */
+"Greater than %1$@ units remaining at %2$@" = "Greater than %1$@ units remaining at %2$@";
+
+/* Instructions when deactivating pod that has been paired, but not attached. */
+"Incompletely set up pod must be deactivated before pairing with a new one. Please deactivate and discard pod." = "Incompletely set up pod must be deactivated before pairing with a new one. Please deactivate and discard pod.";
+
+/* Instructions when deactivating pod that has been paired and possibly attached. */
+"Incompletely set up pod must be deactivated before pairing with a new one. Please deactivate and remove pod." = "Incompletely set up pod must be deactivated before pairing with a new one. Please deactivate and remove pod.";
+
+/* Button title to insert cannula during setup */
+"Insert Cannula" = "Insert Cannula";
+
+/* The title of the cell showing delivered insulin */
+"Insulin Delivered" = "Insulin Delivered";
+
+/* The error message shown when Loop's basal schedule has an unsupported rate */
+"Invalid entry" = "Invalid entry";
+
+/* The title of the cell showing the pod lot id */
+"Lot" = "Lot";
+
+/* The detail text for bolus delivery when no bolus is being delivered */
+"None" = "None";
+
+/* Button title to pair with pod during setup */
+"Pair" = "Pair";
+
+/* The title of the command to pair new pod */
+"Pair New Pod" = "Pair New Pod";
+
+/* The text of the loading label when pairing */
+"Pairing…" = "Pairing…";
+
+/* The title of the cell showing the pod pi version */
+"PI Version" = "PI Version";
+
+/* The title of the command to play test beeps */
+"Play Test Beeps" = "Play Test Beeps";
+
+/* Progress message for play test beeps. */
+"Play Test Beeps…" = "Play Test Beeps…";
+
+/* The title of the cell showing the pod pm version */
+"PM Version" = "PM Version";
+
+/* Label describing pod age view */
+"Pod Age" = "Pod Age";
+
+/* Title of the pod settings view controller */
+"Pod Settings" = "Pod Settings";
+
+/* The text of the loading label when pod is primed */
+"Primed" = "Primed";
+
+/* The text of the loading label when priming */
+"Priming…" = "Priming…";
+
+/* Label describing time remaining view */
+"Remaining" = "Remaining";
+
+/* Label indicating pod replacement necessary
+   The title of the command to replace pod */
+"Replace Pod" = "Replace Pod";
+
+/* The title of the command to replace pod when there is a pod fault */
+"Replace Pod Now" = "Replace Pod Now";
+
+/* The title of the cell showing reservoir status */
+"Reservoir" = "Reservoir";
+
+/* Button title for retrying pod deactivation */
+"Retry Pod Deactivation" = "Retry Pod Deactivation";
+
+/* Title of button to save delivery limit settings
+   Title of button to sync basal profile when no pod paired */
+"Save" = "Save";
+
+/* The detail text of the basal row when pod is running scheduled basal */
+"Schedule" = "Schedule";
+
+/* The title of the status section in settings */
+"Status" = "Status";
+
+/* A message indicating a command succeeded */
+"Succeeded" = "Succeeded";
+
+/* The detail text of the basal row when pod is suspended */
+"Suspended" = "Suspended";
+
+/* Title text for the button to delete Omnipod PumpManager */
+"Switch from Omnipod Pumps" = "Switch from Omnipod Pumps";
+
+/* Title of button to sync basal profile from pod */
+"Sync With Pod" = "Sync With Pod";
+
+/* The title of the command to run the test command */
+"Test Command" = "Test Command";
+
+/* Progress message for testing commands. */
+"Testing Commands…" = "Testing Commands…";
+
+/* The error message shown when Loop's basal schedule has more entries than the pod can support */
+"Too many entries" = "Too many entries";
+
+/* Instructions when pod cannot be deactivated */
+"Unable to deactivate pod. Please continue and pair a new one." = "Unable to deactivate pod. Please continue and pair a new one.";
+
+/* The detail text for delivered insulin when no measurement is available */
+"Unknown" = "Unknown";
+
+/* The title of the diagnostics section in settings */
+"Diagnostics" = "Diagnostics";
+
+/* The diagnostic command Read Pod Status */
+"Read Pod Status" = "Read Pod Status";
+
+/* The diagnostic command Read Pulse Log */
+"Read Pulse Log" = "Read Pulse Log";
+
+/* The title of the pod details section in settings */
+"Pod Details" = "Pod Details";

+ 68 - 0
Dependencies/rileylink_ios/OmniKitUI/pt-PT.lproj/OmnipodPumpManager.strings

@@ -0,0 +1,68 @@
+/* Class = "UITableViewSection"; headerTitle = "Remove POD"; ObjectID = "1LF-te-Bdd"; */
+"1LF-te-Bdd.headerTitle" = "Remove POD";
+
+/* Class = "UINavigationItem"; title = "RileyLink Setup"; ObjectID = "3HH-eJ-lRh"; */
+"3HH-eJ-lRh.title" = "RileyLink Setup";
+
+/* Class = "UITableViewController"; title = "Pod Settings"; ObjectID = "6vo-Ov-UpE"; */
+"6vo-Ov-UpE.title" = "Pod Settings";
+
+/* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "91O-Un-vKc"; */
+"91O-Un-vKc.title" = "Pump Setup";
+
+/* Class = "UITableViewSection"; footerTitle = "NOTE: Do not remove the pod's needle cap at this time."; ObjectID = "EUt-xk-Rmp"; */
+"EUt-xk-Rmp.footerTitle" = "NOTE: Do not remove the pod's needle cap at this time.";
+
+/* Class = "UITableViewSection"; headerTitle = "Prepare Pod"; ObjectID = "EUt-xk-Rmp"; */
+"EUt-xk-Rmp.headerTitle" = "Prepare Pod";
+
+/* Class = "UILabel"; text = "Loop will remind you to change your pod before it expires. You can change this to a time convenient for you."; ObjectID = "Eng-IY-fQ7"; */
+"Eng-IY-fQ7.text" = "Loop will remind you to change your pod before it expires. You can change this to a time convenient for you.";
+
+/* Class = "UILabel"; text = "Please deactivate the pod. When deactivation is complete, remove pod from body."; ObjectID = "GK7-jb-tyY"; */
+"GK7-jb-tyY.text" = "Please deactivate the pod. When deactivation is complete, remove pod from body.";
+
+/* Class = "UINavigationItem"; title = "Insert Cannula"; ObjectID = "HwT-30-f0y"; */
+"HwT-30-f0y.title" = "Insert Cannula";
+
+/* Class = "UILabel"; text = "Prepare site. Remove the pod's needle cap and adhesive backing. If pod is OK, apply to site."; ObjectID = "Iuv-5M-bDH"; */
+"Iuv-5M-bDH.text" = "Prepare site. Remove the pod's needle cap and adhesive backing. If pod is OK, apply to site.";
+
+/* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "aNg-mm-Uuy"; */
+"aNg-mm-Uuy.title" = "Pump Setup";
+
+/* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "ack-ra-XH6"; */
+"ack-ra-XH6.title" = "Pump Setup";
+
+/* Class = "UILabel"; text = "Your Pod is ready for use."; ObjectID = "bJ5-iH-fnF"; */
+"bJ5-iH-fnF.text" = "Your Pod is ready for use.";
+
+/* Class = "UILabel"; text = "Reminder"; ObjectID = "ePA-6p-q8C"; */
+"ePA-6p-q8C.text" = "Reminder";
+
+/* Class = "UINavigationItem"; title = "Pod Pairing"; ObjectID = "jVO-Ut-MhL"; */
+"jVO-Ut-MhL.title" = "Pod Pairing";
+
+/* Class = "UITableViewController"; title = "Pump Setup"; ObjectID = "k1Y-x4-m0a"; */
+"k1Y-x4-m0a.title" = "Pump Setup";
+
+/* Class = "UILabel"; text = "Review your settings below. They will be programmed into the pod during pairing. You can change these settings at any time in Loopʼs Settings screen."; ObjectID = "kLL-SQ-K0a"; */
+"kLL-SQ-K0a.text" = "Review your settings below. They will be programmed into the pod during pairing. You can change these settings at any time in Loopʼs Settings screen.";
+
+/* Class = "UINavigationItem"; title = "Setup Complete"; ObjectID = "nDb-R5-e02"; */
+"nDb-R5-e02.title" = "Setup Complete";
+
+/* Class = "UITableViewSection"; footerTitle = "NOTE: If cannula sticks out, press cancel."; ObjectID = "rcC-ke-lUP"; */
+"rcC-ke-lUP.footerTitle" = "NOTE: If cannula sticks out, press cancel.";
+
+/* Class = "UITableViewSection"; headerTitle = "Apply POD"; ObjectID = "rcC-ke-lUP"; */
+"rcC-ke-lUP.headerTitle" = "Apply POD";
+
+/* Class = "UILabel"; text = "Label"; ObjectID = "vEc-Km-ewe"; */
+"vEc-Km-ewe.text" = "Label";
+
+/* Class = "UILabel"; text = "Fill a new pod with insulin. Listen for 2 beeps from the pod during filling. Keep RileyLink adjacent to the pod during pairing."; ObjectID = "vmF-Dc-3DS"; */
+"vmF-Dc-3DS.text" = "Fill a new pod with insulin. Listen for 2 beeps from the pod during filling. Keep the RileyLink about 6 inches from the pod during pairing.";
+
+/* Class = "UINavigationItem"; title = "Replace Pod"; ObjectID = "yy1-xf-HdR"; */
+"yy1-xf-HdR.title" = "Replace Pod";

+ 6 - 6
Dependencies/rileylink_ios/OmniKitUI/tr.lproj/Localizable.strings

@@ -48,7 +48,7 @@
 "Are you sure you want to stop using Omnipod?" = "Omnipod'u kullanmayı bırakmak istediğinizden emin misiniz?";
 
 /* The title text for the address assigned to the pod */
-"Assigned Address" = "Adress Atandı";
+"Assigned Address" = "Adres Atandı";
 
 /* The title of the cell showing pod basal status */
 "Basal Delivery" = "Bazal İletimi";
@@ -66,7 +66,7 @@
 "Change Time Zone" = "Zaman dilimini Değiştir";
 
 /* Progress message for changing pod time. */
-"Changing time…" = "Zaman değiştir…";
+"Changing time…" = "Zaman değiştiriliyor…";
 
 /* The title of the configuration section in settings */
 "Configuration" = "Yapılandırma";
@@ -100,7 +100,7 @@
 "Enable Bolus Beeps" = "Bolus Uyarılarını Etkinleştir";
 
 /* The alert title for disable bolus beeps error */
-"Error disabling bolus beeps" = "Bolus uyarılarını devre dışı bırakırken hata oluştu";
+"Error disabling bolus beeps" = "Bolus uyarılarını devre dışı bırakırken hata oluştu";
 
 /* The alert title for enable bolus beeps error */
 "Error enabling bolus beeps" = "Bolus uyarılarını etkinleştirirken hata oluştu";
@@ -121,7 +121,7 @@
 "Error Resuming" = "Devam ederken hata oluştu";
 
 /* The alert title for a suspend error */
-"Error Suspending" = "İptal Ederken Hata Oluştu";
+"Error Suspending" = "Askıya alırken Hata";
 
 /* The title of the cell showing the pod expiration reminder date */
 "Expiration Reminder" = "Süre Sonu Hatırlatıcısı";
@@ -166,7 +166,7 @@
 "Pair" = "Eşleştir";
 
 /* The title of the command to pair new pod */
-"Pair New Pod" = "Yeni Pod Eşle";
+"Pair New Pod" = "Yeni Pod Eşleştir";
 
 /* The text of the loading label when pairing */
 "Pairing…" = "Eşlestiriliyor…";
@@ -225,7 +225,7 @@
 "Succeeded" = "Başarılı oldu";
 
 /* The detail text of the basal row when pod is suspended */
-"Suspended" = "İptal edildi";
+"Suspended" = "Askıya Alındı";
 
 /* Title text for the button to delete Omnipod PumpManager */
 "Switch from Omnipod Pumps" = "Omnipod'u kullanmayı bırak";

+ 0 - 93
Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/OmniKitPacketParser.xcscheme

@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1240"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1BB128421CB5603009A29B5"
-               BuildableName = "OmniKitPacketParser"
-               BlueprintName = "OmniKitPacketParser"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C1BB128421CB5603009A29B5"
-            BuildableName = "OmniKitPacketParser"
-            BlueprintName = "OmniKitPacketParser"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <Testables>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C1BB128421CB5603009A29B5"
-            BuildableName = "OmniKitPacketParser"
-            BlueprintName = "OmniKitPacketParser"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-      <CommandLineArguments>
-         <CommandLineArgument
-            argument = "/Users/pete/Downloads/XcodeLog.txt"
-            isEnabled = "YES">
-         </CommandLineArgument>
-      </CommandLineArguments>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C1BB128421CB5603009A29B5"
-            BuildableName = "OmniKitPacketParser"
-            BlueprintName = "OmniKitPacketParser"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 231
Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/RileyLink.xcscheme

@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1240"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "YES"
-      buildImplicitDependencies = "YES">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C12EA236198B436800309FA4"
-               BuildableName = "RileyLink.app"
-               BlueprintName = "RileyLink"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C10D9BC91C8269D500378342"
-               BuildableName = "MinimedKitTests.xctest"
-               BlueprintName = "MinimedKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1B383131CD0665D00CE7782"
-               BuildableName = "NightscoutUploadKitTests.xctest"
-               BlueprintName = "NightscoutUploadKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAF7F213323CC00C50C1D"
-               BuildableName = "OmniKitTests.xctest"
-               BlueprintName = "OmniKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "431CE7761F98564200255374"
-               BuildableName = "RileyLinkBLEKitTests.xctest"
-               BlueprintName = "RileyLinkBLEKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43722FB61CB9F7640038B7F2"
-               BuildableName = "RileyLinkKitTests.xctest"
-               BlueprintName = "RileyLinkKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C12EA251198B436800309FA4"
-               BuildableName = "RileyLinkTests.xctest"
-               BlueprintName = "RileyLinkTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C12EA236198B436800309FA4"
-            BuildableName = "RileyLink.app"
-            BlueprintName = "RileyLink"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C10D9BC91C8269D500378342"
-               BuildableName = "MinimedKitTests.xctest"
-               BlueprintName = "MinimedKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1B383131CD0665D00CE7782"
-               BuildableName = "NightscoutUploadKitTests.xctest"
-               BlueprintName = "NightscoutUploadKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAF7F213323CC00C50C1D"
-               BuildableName = "OmniKitTests.xctest"
-               BlueprintName = "OmniKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "431CE7761F98564200255374"
-               BuildableName = "RileyLinkBLEKitTests.xctest"
-               BlueprintName = "RileyLinkBLEKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43722FB61CB9F7640038B7F2"
-               BuildableName = "RileyLinkKitTests.xctest"
-               BlueprintName = "RileyLinkKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C12EA251198B436800309FA4"
-               BuildableName = "RileyLinkTests.xctest"
-               BlueprintName = "RileyLinkTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C12EA236198B436800309FA4"
-            BuildableName = "RileyLink.app"
-            BlueprintName = "RileyLink"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <BuildableProductRunnable
-         runnableDebuggingMode = "0">
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "C12EA236198B436800309FA4"
-            BuildableName = "RileyLink.app"
-            BlueprintName = "RileyLink"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </BuildableProductRunnable>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 0 - 265
Dependencies/rileylink_ios/RileyLink.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme

@@ -1,265 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
-   LastUpgradeVersion = "1240"
-   version = "1.3">
-   <BuildAction
-      parallelizeBuildables = "NO"
-      buildImplicitDependencies = "NO">
-      <BuildActionEntries>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43C246921D8918AE0031F8D1"
-               BuildableName = "Crypto.framework"
-               BlueprintName = "Crypto"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "431CE76E1F98564100255374"
-               BuildableName = "RileyLinkBLEKit.framework"
-               BlueprintName = "RileyLinkBLEKit"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43722FAD1CB9F7630038B7F2"
-               BuildableName = "RileyLinkKit.framework"
-               BlueprintName = "RileyLinkKit"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43D5E78D1FAF7BFB004ACDB7"
-               BuildableName = "RileyLinkKitUI.framework"
-               BlueprintName = "RileyLinkKitUI"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C10D9BC01C8269D500378342"
-               BuildableName = "MinimedKit.framework"
-               BlueprintName = "MinimedKit"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "4352A72420DEC9B700CAC200"
-               BuildableName = "MinimedKitUI.framework"
-               BlueprintName = "MinimedKitUI"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAF77213323CC00C50C1D"
-               BuildableName = "OmniKit.framework"
-               BlueprintName = "OmniKit"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAFD8213323F900C50C1D"
-               BuildableName = "OmniKitUI.framework"
-               BlueprintName = "OmniKitUI"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1B3830A1CD0665D00CE7782"
-               BuildableName = "NightscoutUploadKit.framework"
-               BlueprintName = "NightscoutUploadKit"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C136AA2923116E32008A320D"
-               BuildableName = "OmniKitPlugin.loopplugin"
-               BlueprintName = "OmniKitPlugin"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C136AA5D231187B0008A320D"
-               BuildableName = "MinimedKitPlugin.loopplugin"
-               BlueprintName = "MinimedKitPlugin"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-      </BuildActionEntries>
-   </BuildAction>
-   <TestAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43C246921D8918AE0031F8D1"
-            BuildableName = "Crypto.framework"
-            BlueprintName = "Crypto"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-      <Testables>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "431CE7761F98564200255374"
-               BuildableName = "RileyLinkBLEKitTests.xctest"
-               BlueprintName = "RileyLinkBLEKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C10D9BC91C8269D500378342"
-               BuildableName = "MinimedKitTests.xctest"
-               BlueprintName = "MinimedKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1B383131CD0665D00CE7782"
-               BuildableName = "NightscoutUploadKitTests.xctest"
-               BlueprintName = "NightscoutUploadKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-         <TestableReference
-            skipped = "NO">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAF7F213323CC00C50C1D"
-               BuildableName = "OmniKitTests.xctest"
-               BlueprintName = "OmniKitTests"
-               ReferencedContainer = "container:RileyLink.xcodeproj">
-            </BuildableReference>
-         </TestableReference>
-      </Testables>
-   </TestAction>
-   <LaunchAction
-      buildConfiguration = "Debug"
-      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
-      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
-      launchStyle = "0"
-      useCustomWorkingDirectory = "NO"
-      ignoresPersistentStateOnLaunch = "NO"
-      debugDocumentVersioning = "YES"
-      debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43C246921D8918AE0031F8D1"
-            BuildableName = "Crypto.framework"
-            BlueprintName = "Crypto"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </LaunchAction>
-   <ProfileAction
-      buildConfiguration = "Release"
-      shouldUseLaunchSchemeArgsEnv = "YES"
-      savedToolIdentifier = ""
-      useCustomWorkingDirectory = "NO"
-      debugDocumentVersioning = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "43C246921D8918AE0031F8D1"
-            BuildableName = "Crypto.framework"
-            BlueprintName = "Crypto"
-            ReferencedContainer = "container:RileyLink.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
-   </ProfileAction>
-   <AnalyzeAction
-      buildConfiguration = "Debug">
-   </AnalyzeAction>
-   <ArchiveAction
-      buildConfiguration = "Release"
-      revealArchiveInOrganizer = "YES">
-   </ArchiveAction>
-</Scheme>

+ 26 - 26
Dependencies/rileylink_ios/RileyLinkKitUI/fr.lproj/Localizable.strings

@@ -5,28 +5,28 @@
 "Connected" = "Connecté";
 
 /* The in-progress connecting state */
-"Connecting" = "Connexion en cours";
+"Connecting" = "De liaison";
 
 /* The title of the cell showing BLE connection state */
-"Connection State" = "État de la connexion";
+"Connection State" = "Etat de connexion";
 
 /* The title of the section describing the device */
-"Device" = "Appareil";
+"Device" = "Dispositif";
 
 /* The title of the devices table section in RileyLink settings */
-"Devices" = "Appareils";
+"Devices" = "Dispositifs";
 
 /* The disconnected state */
-"Disconnected" = "Déconnecté";
+"Disconnected" = "Débranché";
 
 /* The in-progress disconnecting state */
-"Disconnecting" = "Déconnexion en cours";
+"Disconnecting" = "Se déconnecter";
 
 /* The title of the cell showing firmware version */
-"Firmware" = "Firmware";
+"Firmware" = "Microprogramme";
 
 /* The title of the cell showing current rileylink frequency */
-"Frequency" = "Frequency";
+"Frequency" = "Fréquence";
 
 /* The title of the cell showing device name */
 "Name" = "Nom";
@@ -38,58 +38,58 @@
 "Signal Strength" = "Force du signal";
 
 /* The header of the cells showing connection monitoring */
-"Connection Monitoring" = "Connection Monitoring";
+"Connection Monitoring" = "Supervision";
 
 /* The title of the cell showing uptime */
-"Uptime" = "Uptime";
+"Uptime" = "Temps de fonctionnement";
 
 /* The title of the cell showing battery level */
-"Battery level" = "Battery level";
+"Battery level" = "Niveau de batterie";
 
 /* The title of the cell showing Voltage */
-"Voltage" = "Voltage";
+"Voltage" = "Voltage (Tension)";
 
 /* "The title of the section for alerts" */
-"Alert" = "Alert";
+"Alert" = "Alerte";
 
 /* The title of the cell showing Low Battery Alert */
-"Low Battery Alert" = "Low Battery Alert";
+"Low Battery Alert" = "Alerte de batterie faible";
 
 /* Header of list showing battery level alert options */
-"Battery level Alert" = "Battery level Alert";
+"Battery level Alert" = "Alerte de niveau batterie";
 
 /* Battery level alert OFF in list of options */
-"OFF" = "OFF";
+"OFF" = "Désactivé";
 
 /* The title of the command to update diagnostic LEDs */
-"Diagnostic LEDs" = "Diagnostic LEDs";
+"Diagnostic LEDs" = "Diagnostic";
 
 /* The title of the command to fetch RileyLink statistics */
-"Get RileyLink Statistics" = "Get RileyLink Statistics";
+"Get RileyLink Statistics" = "Obtenir les statistiques de RileyLink";
 
 /* The title of the command to invert BLE connection LED logic */
-"Invert LED Logic" = "Invert LED Logic";
+"Invert LED Logic" = "Inverser la logique des LED";
 
 /* The header of the cells showing test commands */
-"Test Commands" = "Test Commands";
+"Test Commands" = "Commande de test";
 
 /* The title of the cell showing Lighten Yellow LED */
-"Lighten Yellow LED" = "Lighten Yellow LED";
+"Lighten Yellow LED" = "Éclaircir la LED jaune";
 
 /* The title of the cell showing Lighten Yellow LED */
-"Lighten Red LED" = "Lighten Red LED";
+"Lighten Red LED" = "Éclaircir la LED rouge";
 
 /* The title of the cell showing Test Vibration */
-"Test Vibration" = "Test Vibration";
+"Test Vibration" = "Test de la vibration";
 
 /* The title of the cell for sounding device finding piezo */
-"Find Device" = "Find Device";
+"Find Device" = "Localiser l'appareil";
 
 /* The title of the cell for connection LED */
-"Connection LED" = "Connection LED";
+"Connection LED" = "Connectez les LED";
 
 /* The title of the cell for connection vibration */
-"Connection Vibration" = "Connection Vibration";
+"Connection Vibration" = "Vibreur de connexion";
 
 /* Detail text when battery alert disabled. */
 "Off" = "Off";

+ 13 - 13
Dependencies/rileylink_ios/RileyLinkKitUI/nl.lproj/Localizable.strings

@@ -62,43 +62,43 @@
 "OFF" = "UIT";
 
 /* The title of the command to update diagnostic LEDs */
-"Diagnostic LEDs" = "Diagnostic LEDs";
+"Diagnostic LEDs" = "Diagnostische LEDs";
 
 /* The title of the command to fetch RileyLink statistics */
-"Get RileyLink Statistics" = "Get RileyLink Statistics";
+"Get RileyLink Statistics" = "RileyLink statistieken";
 
 /* The title of the command to invert BLE connection LED logic */
-"Invert LED Logic" = "Invert LED Logic";
+"Invert LED Logic" = "LED Logica omkeren";
 
 /* The header of the cells showing test commands */
-"Test Commands" = "Test Commands";
+"Test Commands" = "Test commando’s";
 
 /* The title of the cell showing Lighten Yellow LED */
-"Lighten Yellow LED" = "Lighten Yellow LED";
+"Lighten Yellow LED" = "Zet gele LED aan";
 
 /* The title of the cell showing Lighten Yellow LED */
-"Lighten Red LED" = "Lighten Red LED";
+"Lighten Red LED" = "Zet rode LED aan";
 
 /* The title of the cell showing Test Vibration */
-"Test Vibration" = "Test Vibration";
+"Test Vibration" = "Test trillen";
 
 /* The title of the cell for sounding device finding piezo */
-"Find Device" = "Find Device";
+"Find Device" = "Apparaat zoeken";
 
 /* The title of the cell for connection LED */
-"Connection LED" = "Connection LED";
+"Connection LED" = "Verbinding LED";
 
 /* The title of the cell for connection vibration */
-"Connection Vibration" = "Connection Vibration";
+"Connection Vibration" = "Verbinding trillen";
 
 /* Detail text when battery alert disabled. */
-"Off" = "Off";
+"Off" = "Uit";
 
 /* Text indicating LED Mode is on */
-"On" = "On";
+"On" = "Aan";
 
 /* Text indicating LED Mode is off */
-"Off" = "Off";
+"Off" = "Uit";
 
 /* Text indicating LED Mode is auto */
 "Auto" = "Auto";

+ 104 - 0
Dependencies/rileylink_ios/RileyLinkKitUI/pt-PT.lproj/Localizable.strings

@@ -0,0 +1,104 @@
+/* The title of the section describing commands */
+"Commands" = "Commands";
+
+/* The connected state */
+"Connected" = "Connected";
+
+/* The in-progress connecting state */
+"Connecting" = "Connecting";
+
+/* The title of the cell showing BLE connection state */
+"Connection State" = "Connection State";
+
+/* The title of the section describing the device */
+"Device" = "Device";
+
+/* The title of the devices table section in RileyLink settings */
+"Devices" = "Devices";
+
+/* The disconnected state */
+"Disconnected" = "Disconnected";
+
+/* The in-progress disconnecting state */
+"Disconnecting" = "Disconnecting";
+
+/* The title of the cell showing firmware version */
+"Firmware" = "Firmware";
+
+/* The title of the cell showing current rileylink frequency */
+"Frequency" = "Frequency";
+
+/* The title of the cell showing device name */
+"Name" = "Name";
+
+/* RileyLink setup description */
+"RileyLink allows for communication with the pump over Bluetooth Low Energy." = "RileyLink allows for communication with the pump over Bluetooth Low Energy.";
+
+/* The title of the cell showing BLE signal strength (RSSI) */
+"Signal Strength" = "Signal Strength";
+
+/* The header of the cells showing connection monitoring */
+"Connection Monitoring" = "Connection Monitoring";
+
+/* The title of the cell showing uptime */
+"Uptime" = "Uptime";
+
+/* The title of the cell showing battery level */
+"Battery level" = "Battery level";
+
+/* The title of the cell showing Voltage */
+"Voltage" = "Voltage";
+
+/* "The title of the section for alerts" */
+"Alert" = "Alert";
+
+/* The title of the cell showing Low Battery Alert */
+"Low Battery Alert" = "Low Battery Alert";
+
+/* Header of list showing battery level alert options */
+"Battery level Alert" = "Battery level Alert";
+
+/* Battery level alert OFF in list of options */
+"OFF" = "OFF";
+
+/* The title of the command to update diagnostic LEDs */
+"Diagnostic LEDs" = "Diagnostic LEDs";
+
+/* The title of the command to fetch RileyLink statistics */
+"Get RileyLink Statistics" = "Get RileyLink Statistics";
+
+/* The title of the command to invert BLE connection LED logic */
+"Invert LED Logic" = "Invert LED Logic";
+
+/* The header of the cells showing test commands */
+"Test Commands" = "Test Commands";
+
+/* The title of the cell showing Lighten Yellow LED */
+"Lighten Yellow LED" = "Lighten Yellow LED";
+
+/* The title of the cell showing Lighten Yellow LED */
+"Lighten Red LED" = "Lighten Red LED";
+
+/* The title of the cell showing Test Vibration */
+"Test Vibration" = "Test Vibration";
+
+/* The title of the cell for sounding device finding piezo */
+"Find Device" = "Find Device";
+
+/* The title of the cell for connection LED */
+"Connection LED" = "Connection LED";
+
+/* The title of the cell for connection vibration */
+"Connection Vibration" = "Connection Vibration";
+
+/* Detail text when battery alert disabled. */
+"Off" = "Off";
+
+/* Text indicating LED Mode is on */
+"On" = "On";
+
+/* Text indicating LED Mode is off */
+"Off" = "Off";
+
+/* Text indicating LED Mode is auto */
+"Auto" = "Auto";

+ 2 - 2
Dependencies/rileylink_ios/RileyLinkKitUI/tr.lproj/Localizable.strings

@@ -2,7 +2,7 @@
 "Commands" = "Komutlar";
 
 /* The connected state */
-"Connected" = "Bağlanıldı";
+"Connected" = "Bağlandı";
 
 /* The in-progress connecting state */
 "Connecting" = "Bağlanıyor";
@@ -23,7 +23,7 @@
 "Disconnecting" = "Bağlantı kesiliyor";
 
 /* The title of the cell showing firmware version */
-"Firmware" = "Firmware";
+"Firmware" = "Aygıt Yazılımı";
 
 /* The title of the cell showing current rileylink frequency */
 "Frequency" = "Frekans";

+ 0 - 252
FreeAPS.xcodeproj/xcshareddata/xcschemes/FreeAPS X.xcscheme

@@ -20,258 +20,6 @@
                ReferencedContainer = "container:FreeAPS.xcodeproj">
             </BuildableReference>
          </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43D8FDCA1C728FDF0073BE78"
-               BuildableName = "LoopKit.framework"
-               BlueprintName = "LoopKit"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "A9E6758022713F4700E25293"
-               BuildableName = "LoopKit.framework"
-               BlueprintName = "LoopKit-watchOS"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43BA7153201E484D0058961E"
-               BuildableName = "LoopKitUI.framework"
-               BlueprintName = "LoopKitUI"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "892A5D33222F03CB008961AB"
-               BuildableName = "LoopTestingKit.framework"
-               BlueprintName = "LoopTestingKit"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "89D2047121CC7BD7001238CC"
-               BuildableName = "MockKit.framework"
-               BlueprintName = "MockKit"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "89D2048E21CC7C12001238CC"
-               BuildableName = "MockKitUI.framework"
-               BlueprintName = "MockKitUI"
-               ReferencedContainer = "container:Dependecies/LoopKit/LoopKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43C246921D8918AE0031F8D1"
-               BuildableName = "Crypto.framework"
-               BlueprintName = "Crypto"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C10D9BC01C8269D500378342"
-               BuildableName = "MinimedKit.framework"
-               BlueprintName = "MinimedKit"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C136AA5D231187B0008A320D"
-               BuildableName = "MinimedKitPlugin.loopplugin"
-               BlueprintName = "MinimedKitPlugin"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "4352A72420DEC9B700CAC200"
-               BuildableName = "MinimedKitUI.framework"
-               BlueprintName = "MinimedKitUI"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1B3830A1CD0665D00CE7782"
-               BuildableName = "NightscoutUploadKit.framework"
-               BlueprintName = "NightscoutUploadKit"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAF77213323CC00C50C1D"
-               BuildableName = "OmniKit.framework"
-               BlueprintName = "OmniKit"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C136AA2923116E32008A320D"
-               BuildableName = "OmniKitPlugin.loopplugin"
-               BlueprintName = "OmniKitPlugin"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "C1FFAFD8213323F900C50C1D"
-               BuildableName = "OmniKitUI.framework"
-               BlueprintName = "OmniKitUI"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "431CE76E1F98564100255374"
-               BuildableName = "RileyLinkBLEKit.framework"
-               BlueprintName = "RileyLinkBLEKit"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43722FAD1CB9F7630038B7F2"
-               BuildableName = "RileyLinkKit.framework"
-               BlueprintName = "RileyLinkKit"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43CABDF21C3506F100005705"
-               BuildableName = "CGMBLEKit.framework"
-               BlueprintName = "CGMBLEKit"
-               ReferencedContainer = "container:Dependecies/CGMBLEKit/CGMBLEKit.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
-         <BuildActionEntry
-            buildForTesting = "YES"
-            buildForRunning = "YES"
-            buildForProfiling = "YES"
-            buildForArchiving = "YES"
-            buildForAnalyzing = "YES">
-            <BuildableReference
-               BuildableIdentifier = "primary"
-               BlueprintIdentifier = "43D5E78D1FAF7BFB004ACDB7"
-               BuildableName = "RileyLinkKitUI.framework"
-               BlueprintName = "RileyLinkKitUI"
-               ReferencedContainer = "container:Dependecies/rileylink_ios/RileyLink.xcodeproj">
-            </BuildableReference>
-         </BuildActionEntry>
       </BuildActionEntries>
    </BuildAction>
    <TestAction

+ 29 - 23
Dependencies/LoopKit/LoopKit.xcodeproj/xcshareddata/xcschemes/LoopKit Example.xcscheme

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Scheme
-   LastUpgradeVersion = "1240"
+   LastUpgradeVersion = "1320"
    version = "1.3">
    <BuildAction
       parallelizeBuildables = "YES"
@@ -14,10 +14,24 @@
             buildForAnalyzing = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "430157F61C7EC03B00B64B63"
-               BuildableName = "LoopKit Example.app"
-               BlueprintName = "LoopKit Example"
-               ReferencedContainer = "container:LoopKit.xcodeproj">
+               BlueprintIdentifier = "38E8751B27554D5500975559"
+               BuildableName = "FreeAPSWatch.app"
+               BlueprintName = "FreeAPSWatch"
+               ReferencedContainer = "container:FreeAPS.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "388E595725AD948C0019842D"
+               BuildableName = "FreeAPS.app"
+               BlueprintName = "FreeAPS"
+               ReferencedContainer = "container:FreeAPS.xcodeproj">
             </BuildableReference>
          </BuildActionEntry>
       </BuildActionEntries>
@@ -27,15 +41,6 @@
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       shouldUseLaunchSchemeArgsEnv = "YES">
-      <MacroExpansion>
-         <BuildableReference
-            BuildableIdentifier = "primary"
-            BlueprintIdentifier = "430157F61C7EC03B00B64B63"
-            BuildableName = "LoopKit Example.app"
-            BlueprintName = "LoopKit Example"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
-         </BuildableReference>
-      </MacroExpansion>
       <Testables>
       </Testables>
    </TestAction>
@@ -48,15 +53,16 @@
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "YES"
       debugServiceExtension = "internal"
-      allowLocationSimulation = "YES">
+      allowLocationSimulation = "YES"
+      notificationPayloadFile = "FreeAPSWatch WatchKit Extension/PushNotificationPayload.apns">
       <BuildableProductRunnable
          runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
-            BlueprintIdentifier = "430157F61C7EC03B00B64B63"
-            BuildableName = "LoopKit Example.app"
-            BlueprintName = "LoopKit Example"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
+            BlueprintIdentifier = "38E8751B27554D5500975559"
+            BuildableName = "FreeAPSWatch.app"
+            BlueprintName = "FreeAPSWatch"
+            ReferencedContainer = "container:FreeAPS.xcodeproj">
          </BuildableReference>
       </BuildableProductRunnable>
    </LaunchAction>
@@ -70,10 +76,10 @@
          runnableDebuggingMode = "0">
          <BuildableReference
             BuildableIdentifier = "primary"
-            BlueprintIdentifier = "430157F61C7EC03B00B64B63"
-            BuildableName = "LoopKit Example.app"
-            BlueprintName = "LoopKit Example"
-            ReferencedContainer = "container:LoopKit.xcodeproj">
+            BlueprintIdentifier = "38E8751B27554D5500975559"
+            BuildableName = "FreeAPSWatch.app"
+            BlueprintName = "FreeAPSWatch"
+            ReferencedContainer = "container:FreeAPS.xcodeproj">
          </BuildableReference>
       </BuildableProductRunnable>
    </ProfileAction>

+ 2 - 2
FreeAPS/Resources/de.lproj/InfoPlist.strings

@@ -8,10 +8,10 @@
 "NSBluetoothPeripheralUsageDescription" = "Bluetooth wird verwendet, um mit Insulinpumpen und CGMs zu kommunizieren.";
 
 /* Privacy - Face ID Usage Description */
-"NSFaceIDUsageDescription" = "Identitätsverifizierung für Bolus - damit nur autorisierte Personen einen Bolus abrufen können.";
+"NSFaceIDUsageDescription" = "Autorisierung für Bolusabgabe";
 
 /* Privacy - Calendars Usage Description */
-"NSCalendarsUsageDescription" = "BZ Werte als Kalendartermin: Jeder neue CGM-Blutzuckerwert wird als momentaner Kalendartermin gespeichert, damit er auf der Apple Watch in real-time aufgefrischt wird.";
+"NSCalendarsUsageDescription" = "BZ-Werte werden im Kalender als temporärer Termin erstellt.";
 
 /* Privacy - Health Update Usage Description */
 "NSHealthUpdateUsageDescription" = "Die Health App wird zur Speicherung von Blutzuckerdaten verwendet";

+ 2 - 2
FreeAPS/Resources/javascript/prepare/determine-basal.js

@@ -1,9 +1,9 @@
 //для enact/smb-suggested.json параметры: monitor/iob.json monitor/temp_basal.json monitor/glucose.json settings/profile.json settings/autosens.json --meal monitor/meal.json --microbolus --reservoir monitor/reservoir.json
 
-function generate(iob, currenttemp, glucose, profile, autosens = null, meal = null, microbolusAllowed = false, reservoir = null, clock = new Date()) {
+function generate(iob, currenttemp, glucose, profile, autosens = null, meal = null, microbolusAllowed = false, reservoir = null, clock = new Date(), pump_history) {
 
     try {
-        var middlewareReason = middleware(iob, currenttemp, glucose, profile, autosens, meal, reservoir, clock);
+        var middlewareReason = middleware(iob, currenttemp, glucose, profile, autosens, meal, reservoir, clock, pump_history);
         console.log("Middleware reason: " + (middlewareReason || "Nothing changed"));
     } catch (error) {
         console.log("Invalid middleware: " + error);

+ 7 - 7
FreeAPS/Resources/nl.lproj/InfoPlist.strings

@@ -1,20 +1,20 @@
 /* Privacy - NFC Scan Usage Description */
-"NFCReaderUsageDescription" = "NFC is used to scan Libre sensors.";
+"NFCReaderUsageDescription" = "NFC wordt gebruikt voor het scannen van Libre sensoren.";
 
 /* Privacy - Bluetooth Always Usage Description */
-"NSBluetoothAlwaysUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices";
+"NSBluetoothAlwaysUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met de insuline pomp en de continue glucose meter";
 
 /* Privacy - Bluetooth Peripheral Usage Description */
-"NSBluetoothPeripheralUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices";
+"NSBluetoothPeripheralUsageDescription" = "Bluetooth wordt gebruikt om te communiceren met de insuline pomp en de continue glucose meter";
 
 /* Privacy - Face ID Usage Description */
-"NSFaceIDUsageDescription" = "For authorized acces to bolus";
+"NSFaceIDUsageDescription" = "Voor toegang om een bolus te geven";
 
 /* Privacy - Calendars Usage Description */
-"NSCalendarsUsageDescription" = "Calendar is used to create a new glucose events.";
+"NSCalendarsUsageDescription" = "Agenda wordt gebruikt om nieuwe glucose gebeurtenissen aan te maken.";
 
 /* Privacy - Health Update Usage Description */
-"NSHealthUpdateUsageDescription" = "Health App is used to store blood glucose data";
+"NSHealthUpdateUsageDescription" = "De gezondheid app wordt gebruikt om bloedglucose gegevens op te slaan";
 
 /* Privacy - Health Share Usage Description */
-"NSHealthShareUsageDescription" = "Health App is used to store blood glucose data";
+"NSHealthShareUsageDescription" = "De gezondheid app wordt gebruikt om bloedglucose gegevens op te slaan";

+ 9 - 2
FreeAPS/Resources/pt.lproj/InfoPlist.strings

@@ -4,10 +4,17 @@
 /* Privacy - Bluetooth Always Usage Description */
 "NSBluetoothAlwaysUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices";
 
+/* Privacy - Bluetooth Peripheral Usage Description */
 "NSBluetoothPeripheralUsageDescription" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices";
 
+/* Privacy - Face ID Usage Description */
+"NSFaceIDUsageDescription" = "For authorized acces to bolus";
+
 /* Privacy - Calendars Usage Description */
 "NSCalendarsUsageDescription" = "Calendar is used to create a new glucose events.";
 
-/* Privacy - Face ID Usage Description */
-"NSFaceIDUsageDescription" = "For authorized acces to bolus";
+/* Privacy - Health Update Usage Description */
+"NSHealthUpdateUsageDescription" = "Health App is used to store blood glucose data";
+
+/* Privacy - Health Share Usage Description */
+"NSHealthShareUsageDescription" = "Health App is used to store blood glucose data";

+ 0 - 12
FreeAPS/Resources/pt-PT.lproj/infoPlist.strings

@@ -1,12 +0,0 @@
-/* Privacy - Bluetooth Always Usage Description */
-"Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices" = "Bluetooth is used to communicate with insulin pump and continuous glucose monitor devices";
-
-/* Privacy - Face ID Usage Description */
-"For authorized acces to bolus" = "For authorized acces to bolus";
-
-/* Privacy - NFC Scan Usage Description */
-"NFC is used to scan Libre sensors." = "NFC is used to scan Libre sensors.";
-
-/* Privacy - Calendars Usage Description */
-"Calendar is used to create a new glucose events." = "Calendar is used to create a new glucose events.";
-

+ 10 - 4
FreeAPS/Sources/APS/CGM/CGMType.swift

@@ -68,7 +68,10 @@ enum CGMType: String, JSON, CaseIterable, Identifiable {
         case .nightscout:
             return NSLocalizedString("Online or internal server", comment: "Online or internal server")
         case .xdrip:
-            return NSLocalizedString("Shared app group", comment: "Shared app group")
+            return NSLocalizedString(
+                "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors",
+                comment: "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors"
+            )
         case .dexcomG6:
             return NSLocalizedString("Native G6 app", comment: "Native G6 app")
         case .dexcomG5:
@@ -77,11 +80,14 @@ enum CGMType: String, JSON, CaseIterable, Identifiable {
             return NSLocalizedString("Simple simulator", comment: "Simple simulator")
         case .libreTransmitter:
             return NSLocalizedString(
-                "Direct connection with Libre 1 transmitters or Libre 2",
-                comment: "Direct connection with Libre 1 transmitters or Libre 2"
+                "Direct connection with Libre 1 transmitters or European Libre 2 sensors",
+                comment: "Direct connection with Libre 1 transmitters or European Libre 2 sensors"
             )
         case .glucoseDirect:
-            return NSLocalizedString("Shared app group", comment: "Shared app group")
+            return NSLocalizedString(
+                "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors",
+                comment: "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors"
+            )
         case .enlite:
             return NSLocalizedString("Minilink transmitter", comment: "Minilink transmitter")
         }

+ 7 - 3
FreeAPS/Sources/APS/OpenAPS/OpenAPS.swift

@@ -63,7 +63,8 @@ final class OpenAPS {
                     autosens: autosens.isEmpty ? .null : autosens,
                     meal: meal,
                     microBolusAllowed: true,
-                    reservoir: reservoir
+                    reservoir: reservoir,
+                    pumpHistory: pumpHistory
                 )
                 debug(.openAPS, "SUGGESTED: \(suggested)")
 
@@ -290,7 +291,8 @@ final class OpenAPS {
         autosens: JSON,
         meal: JSON,
         microBolusAllowed: Bool,
-        reservoir: JSON
+        reservoir: JSON,
+        pumpHistory: JSON
     ) -> RawJSON {
         dispatchPrecondition(condition: .onQueue(processQueue))
         return jsWorker.inCommonContext { worker in
@@ -314,7 +316,9 @@ final class OpenAPS {
                     autosens,
                     meal,
                     microBolusAllowed,
-                    reservoir
+                    reservoir,
+                    false, // clock
+                    pumpHistory
                 ]
             )
         }

+ 17 - 9
FreeAPS/Sources/APS/Storage/TempTargetsStorage.swift

@@ -3,7 +3,7 @@ import SwiftDate
 import Swinject
 
 protocol TempTargetsObserver {
-    func tempTargetsDidUpdate(_ targers: [TempTarget])
+    func tempTargetsDidUpdate(_ targets: [TempTarget])
 }
 
 protocol TempTargetsStorage {
@@ -31,6 +31,17 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
 
     private func storeTempTargets(_ targets: [TempTarget], isPresets: Bool) {
         processQueue.sync {
+            var targets = targets
+            if !isPresets {
+                if current() != nil, let newActive = targets.last(where: {
+                    $0.createdAt.addingTimeInterval(Int($0.duration).minutes.timeInterval) > Date()
+                        && $0.createdAt <= Date()
+                }) {
+                    // cancel current
+                    targets += [TempTarget.cancel(at: newActive.createdAt.addingTimeInterval(-1))]
+                }
+            }
+
             let file = isPresets ? OpenAPS.FreeAPS.tempTargetsPresets : OpenAPS.Settings.tempTargets
             var uniqEvents: [TempTarget] = []
             self.storage.transaction { storage in
@@ -58,20 +69,17 @@ final class BaseTempTargetsStorage: TempTargetsStorage, Injectable {
     }
 
     func current() -> TempTarget? {
-        guard let currentTarget = recent()
-            .last(where: {
-                $0.createdAt.addingTimeInterval(Int($0.duration).minutes.timeInterval) > Date()
-                    && $0.createdAt <= Date()
-            })
-        else {
+        guard let last = recent().last else {
             return nil
         }
 
-        if let cancel = recent().last(where: { $0.createdAt <= Date() }), cancel.duration == 0 {
+        guard last.createdAt.addingTimeInterval(Int(last.duration).minutes.timeInterval) > Date(), last.createdAt <= Date(),
+              last.duration != 0
+        else {
             return nil
         }
 
-        return currentTarget
+        return last
     }
 
     func nightscoutTretmentsNotUploaded() -> [NigtscoutTreatment] {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/ar.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/ca.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/da.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 56 - 53
FreeAPS/Sources/Localizations/Main/de.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/en.lproj/Localizable.strings


+ 6 - 3
FreeAPS/Sources/Localizations/Main/es.lproj/Localizable.strings

@@ -896,6 +896,9 @@ Enact a temp Basal or a temp target */
 /* */
 "Animated Background" = "Animated Background";
 
+/* Sensor day(s) */
+" day(s)" = " day(s)";
+
 
 /* Headers for settings ----------------------- */
 "OpenAPS main settings" = "OpenAPS main settings";
@@ -913,7 +916,7 @@ Enact a temp Basal or a temp target */
 "Bluetooth State restored (APS restarted?). Found %d peripherals, and connected to %@ with identifier %@" = "Bluetooth State restored (APS restarted?). Found %d peripherals, and connected to %@ with identifier %@";
 
 /* Shared app group */
-"Shared app group" = "Shared app group";
+"Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors" = "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors";
 
 /* Native G6 app */
 "Native G6 app" = "Native G6 app";
@@ -928,7 +931,7 @@ Enact a temp Basal or a temp target */
 "Simple simulator" = "Simple simulator";
 
 /* Direct connection with Libre 1 transmitters or Libre 2 */
-"Direct connection with Libre 1 transmitters or Libre 2" = "Direct connection with Libre 1 transmitters or Libre 2";
+"Direct connection with Libre 1 transmitters or European Libre 2 sensors" = "Direct connection with Libre 1 transmitters or European Libre 2 sensors";
 
 /* Online or internal server */
 "Online or internal server" = "Online or internal server";
@@ -1059,7 +1062,7 @@ Un 1.0 de valor permite un ajuste completo con el nuevo factor de sensibilidad d
 "Minimum duration in minutes between two enacted SMBs" = "Duración mínima en minutos entre dos SMBs aprobados";
 
 /* "Bolus Increment" */
-"Smallest possible bolus amount" = "Cantidad de bolo más pequeña posible";
+"Smallest SMB / SMB increment in oref0. Minimum amount for Medtronic pumps is 0.1 U, whereas for Omnipod it’s 0.05 U. The default value is 0.1." = "Smallest SMB / SMB increment in oref0. Minimum amount for Medtronic pumps is 0.1 U, whereas for Omnipod it’s 0.05 U. The default value is 0.1.";
 
 /* "Insulin Peak Time" */
 "Time of maximum blood glucose lowering effect of insulin, in minutes. Beware: Oref assumes for ultra-rapid (Lyumjev) & rapid-acting (Fiasp) curves minimal (35 & 50 min) and maximal (100 & 120 min) applicable insulinPeakTimes. Using a custom insulinPeakTime outside these bounds will result in issues with FreeAPS-X, longer loop calculations and possible red loops." = "Tiempo del máximo efecto de disminución de glucosa de la insulina, en minutos";

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/fi.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 31 - 31
FreeAPS/Sources/Localizations/Main/fr.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/he.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/it.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 8 - 5
FreeAPS/Sources/Localizations/Main/nb.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 31 - 28
FreeAPS/Sources/Localizations/Main/nl.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/pl.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 57 - 54
FreeAPS/Sources/Localizations/Main/pt-BR.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 84 - 10
FreeAPS/Sources/Localizations/Main/pt-PT.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 7 - 4
FreeAPS/Sources/Localizations/Main/ru.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 6 - 3
FreeAPS/Sources/Localizations/Main/sk.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 7 - 4
FreeAPS/Sources/Localizations/Main/sv.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 21 - 18
FreeAPS/Sources/Localizations/Main/tr.lproj/Localizable.strings


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 7 - 4
FreeAPS/Sources/Localizations/Main/uk.lproj/Localizable.strings


+ 10 - 7
FreeAPS/Sources/Localizations/Main/zh-Hans.lproj/Localizable.strings

@@ -879,23 +879,26 @@ Enact a temp Basal or a temp target */
 "Bolus failed or inaccurate. Check pump history before repeating." = "大剂量失败或者不准确,请在重复操作前检查胰岛素泵历史";
 
 /* */
-"Carbs" = "Carbs";
+"Carbs" = "碳水化合物";
 
 /* */
-"Temp Basal" = "Temp Basal";
+"Temp Basal" = "临时基础率";
 
 /* */
-"Temp Target" = "Temp Target";
+"Temp Target" = "临时目标";
 
 /* */
 "Resume" = "Resume";
 
 /* */
-"Suspend" = "Suspend";
+"Suspend" = "暂停";
 
 /* */
 "Animated Background" = "Animated Background";
 
+/* Sensor day(s) */
+" day(s)" = " day(s)";
+
 
 /* Headers for settings ----------------------- */
 "OpenAPS main settings" = "OpenAPS 主要设置";
@@ -913,7 +916,7 @@ Enact a temp Basal or a temp target */
 "Bluetooth State restored (APS restarted?). Found %d peripherals, and connected to %@ with identifier %@" = "蓝牙状态已恢复(APS 重启?) 找到 %d 个蓝牙,并连接到 %@ 标识符为 %@ 的设备";
 
 /* Shared app group */
-"Shared app group" = "共享的应用组";
+"Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors" = "Shared app group for direct connection with Libre 1 transmitters or European Libre 2 sensors";
 
 /* Native G6 app */
 "Native G6 app" = "官方G6 App";
@@ -928,7 +931,7 @@ Enact a temp Basal or a temp target */
 "Simple simulator" = "简单模拟器";
 
 /* Direct connection with Libre 1 transmitters or Libre 2 */
-"Direct connection with Libre 1 transmitters or Libre 2" = "直连Libre2或者Libre1发射器组合";
+"Direct connection with Libre 1 transmitters or European Libre 2 sensors" = "Direct connection with Libre 1 transmitters or European Libre 2 sensors";
 
 /* Online or internal server */
 "Online or internal server" = "在线或内部服务器";
@@ -1055,7 +1058,7 @@ Enact a temp Basal or a temp target */
 "Minimum duration in minutes between two enacted SMBs" = "两次自动大剂量的最短时间";
 
 /* "Bolus Increment" */
-"Smallest possible bolus amount" = "可能的最小大剂量输注";
+"Smallest SMB / SMB increment in oref0. Minimum amount for Medtronic pumps is 0.1 U, whereas for Omnipod it’s 0.05 U. The default value is 0.1." = "Smallest SMB / SMB increment in oref0. Minimum amount for Medtronic pumps is 0.1 U, whereas for Omnipod it’s 0.05 U. The default value is 0.1.";
 
 /* "Insulin Peak Time" */
 "Time of maximum blood glucose lowering effect of insulin, in minutes. Beware: Oref assumes for ultra-rapid (Lyumjev) & rapid-acting (Fiasp) curves minimal (35 & 50 min) and maximal (100 & 120 min) applicable insulinPeakTimes. Using a custom insulinPeakTime outside these bounds will result in issues with FreeAPS-X, longer loop calculations and possible red loops." = "胰岛素的最大降血糖作用,以分钟为单位";

+ 12 - 0
FreeAPS/Sources/Models/TempTarget.swift

@@ -25,6 +25,18 @@ struct TempTarget: JSON, Identifiable, Equatable, Hashable {
     func hash(into hasher: inout Hasher) {
         hasher.combine(createdAt)
     }
+
+    static func cancel(at date: Date) -> TempTarget {
+        TempTarget(
+            name: TempTarget.cancel,
+            createdAt: date,
+            targetTop: 0,
+            targetBottom: 0,
+            duration: 0,
+            enteredBy: TempTarget.manual,
+            reason: TempTarget.cancel
+        )
+    }
 }
 
 extension TempTarget {

+ 1 - 11
FreeAPS/Sources/Modules/AddTempTarget/AddTempTargetStateModel.swift

@@ -45,17 +45,7 @@ extension AddTempTarget {
         }
 
         func cancel() {
-            let entry = TempTarget(
-                name: TempTarget.cancel,
-                createdAt: Date(),
-                targetTop: 0,
-                targetBottom: 0,
-                duration: 0,
-                enteredBy: TempTarget.manual,
-                reason: TempTarget.cancel
-            )
-            storage.storeTempTargets([entry])
-
+            storage.storeTempTargets([TempTarget.cancel(at: Date())])
             showModal(for: nil)
         }
 

+ 7 - 7
FreeAPS/Sources/Modules/Bolus/BolusStateModel.swift

@@ -8,8 +8,8 @@ extension Bolus {
         @Injected() var broadcaster: Broadcaster!
         @Injected() var pumpHistotyStorage: PumpHistoryStorage!
         @Published var amount: Decimal = 0
-        @Published var inslinRecommended: Decimal = 0
-        @Published var inslinRequired: Decimal = 0
+        @Published var insulinRecommended: Decimal = 0
+        @Published var insulinRequired: Decimal = 0
         @Published var waitForSuggestion: Bool = false
         var waitForSuggestionInitial: Bool = false
 
@@ -24,8 +24,8 @@ extension Bolus {
                         guard let self = self else { return }
                         if !ok {
                             self.waitForSuggestion = false
-                            self.inslinRequired = 0
-                            self.inslinRecommended = 0
+                            self.insulinRequired = 0
+                            self.insulinRecommended = 0
                         }
                     }.store(in: &lifetime)
             }
@@ -74,9 +74,9 @@ extension Bolus {
 
         func setupInsulinRequired() {
             DispatchQueue.main.async {
-                self.inslinRequired = self.provider.suggestion?.insulinReq ?? 0
-                self.inslinRecommended = self.apsManager
-                    .roundBolus(amount: max(self.inslinRequired * self.settingsManager.settings.insulinReqFraction, 0))
+                self.insulinRequired = self.provider.suggestion?.insulinReq ?? 0
+                self.insulinRecommended = self.apsManager
+                    .roundBolus(amount: max(self.insulinRequired * self.settingsManager.settings.insulinReqFraction, 0))
             }
         }
     }

+ 4 - 4
FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift

@@ -30,24 +30,24 @@ extension Bolus {
                             Spacer()
                             Text(
                                 formatter
-                                    .string(from: state.inslinRequired as NSNumber)! +
+                                    .string(from: state.insulinRequired as NSNumber)! +
                                     NSLocalizedString(" U", comment: "Insulin unit")
                             ).foregroundColor(.secondary)
                         }.contentShape(Rectangle())
                             .onTapGesture {
-                                state.amount = state.inslinRecommended
+                                state.amount = state.insulinRecommended
                             }
                         HStack {
                             Text("Insulin recommended")
                             Spacer()
                             Text(
                                 formatter
-                                    .string(from: state.inslinRecommended as NSNumber)! +
+                                    .string(from: state.insulinRecommended as NSNumber)! +
                                     NSLocalizedString(" U", comment: "Insulin unit")
                             ).foregroundColor(.secondary)
                         }.contentShape(Rectangle())
                             .onTapGesture {
-                                state.amount = state.inslinRecommended
+                                state.amount = state.insulinRecommended
                             }
                     }
                 }

+ 2 - 3
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -150,14 +150,13 @@ extension Home {
                 .store(in: &lifetime)
 
             $setupPump
-                .removeDuplicates()
                 .sink { [weak self] show in
                     guard let self = self else { return }
                     if show, let pumpManager = self.provider.apsManager.pumpManager {
                         let view = PumpConfig.PumpSettingsView(pumpManager: pumpManager, completionDelegate: self).asAny()
-                        self.router.mainSecondaryModalView.value = view
+                        self.router.mainSecondaryModalView.send(view)
                     } else {
-                        self.router.mainSecondaryModalView.value = nil
+                        self.router.mainSecondaryModalView.send(nil)
                     }
                 }
                 .store(in: &lifetime)

+ 1 - 5
FreeAPS/Sources/Modules/Main/View/MainRootView.swift

@@ -13,11 +13,7 @@ extension Main {
                         .navigationViewStyle(StackNavigationViewStyle())
                 }
                 .sheet(isPresented: $state.isSecondaryModalPresented) {
-                    if let view = state.secondaryModalView {
-                        view
-                    } else {
-                        EmptyView()
-                    }
+                    state.secondaryModalView ?? EmptyView().asAny()
                 }
                 .onAppear(perform: configureView)
         }

+ 1 - 1
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorStateModel.swift

@@ -173,7 +173,7 @@ extension PreferencesEditor {
                 Field(
                     displayName: "Bolus Increment",
                     type: .decimal(keypath: \.bolusIncrement),
-                    infoText: NSLocalizedString("Smallest possible bolus amount", comment: "Bolus Increment"),
+                    infoText: NSLocalizedString("Smallest SMB / SMB increment in oref0. Minimum amount for Medtronic pumps is 0.1 U, whereas for Omnipod it’s 0.05 U. The default value is 0.1.", comment: "Bolus Increment"),
                     settable: self
                 )
             ]

+ 2 - 2
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -58,9 +58,9 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
             self.state.maxBolus = self.settingsManager.pumpSettings.maxBolus
             self.state.carbsRequired = self.suggestion?.carbsReq
 
-            let inslinRequired = self.suggestion?.insulinReq ?? 0
+            let insulinRequired = self.suggestion?.insulinReq ?? 0
             self.state.bolusRecommended = self.apsManager
-                .roundBolus(amount: max(inslinRequired * self.settingsManager.settings.insulinReqFraction, 0))
+                .roundBolus(amount: max(insulinRequired * self.settingsManager.settings.insulinReqFraction, 0))
 
             self.state.iob = self.suggestion?.iob
             self.state.cob = self.suggestion?.cob

+ 3 - 1
FreeAPSWatch WatchKit Extension/Views/CarbsView.swift

@@ -50,7 +50,9 @@ struct CarbsView: View {
                 }
                 Button {
                     WKInterfaceDevice.current().play(.click)
-                    state.addCarbs(Int(amount))
+                    // Get amount from displayed string
+                    let amount = Int(numberFormatter.string(from: amount as NSNumber)!) ?? Int(amount.rounded())
+                    state.addCarbs(amount)
                 }
                 label: {
                     HStack {

+ 15 - 2
FreeAPSWatch WatchKit Extension/WatchStateModel.swift

@@ -25,7 +25,20 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var isCarbsViewActive = false
     @Published var isTempTargetViewActive = false
     @Published var isBolusViewActive = false
-    @Published var isConfirmationViewActive = false
+    @Published var isConfirmationViewActive = false {
+        didSet {
+            confirmationTimeout = nil
+            if isConfirmationViewActive {
+                confirmationTimeout = Just(())
+                    .delay(for: 30, scheduler: DispatchQueue.main)
+                    .sink {
+                        WKInterfaceDevice.current().play(.retry)
+                        self.isConfirmationViewActive = false
+                    }
+            }
+        }
+    }
+
     @Published var isConfirmationBolusViewActive = false
     @Published var confirmationSuccess: Bool?
     @Published var lastUpdate: Date = .distantPast
@@ -33,6 +46,7 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var pendingBolus: Double?
 
     private var lifetime = Set<AnyCancellable>()
+    private var confirmationTimeout: AnyCancellable?
     let timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect()
 
     init(session: WCSession = .default) {
@@ -164,7 +178,6 @@ extension WatchStateModel: WCSessionDelegate {
     func session(_: WCSession, didReceiveMessageData messageData: Data) {
         if let state = try? JSONDecoder().decode(WatchState.self, from: messageData) {
             DispatchQueue.main.async {
-//                WKInterfaceDevice.current().play(.click)
                 self.processState(state)
             }
         }