Releases: Artificial-Pancreas/iAPS
Release 3.0
New features:
- New Bolus View:
- Display predictions (graph) and a summary of meal entries. Added setting to hide this chart:
- Always display the Eventual Glucose prediction.
- Alert if a remote bolus was just delivered, to avoid double boluses (both remote parent/caregiver and user).
- New alternate bolus calculator (we now have two, select which one you want to use in the new settings). Thank you @polscm32 .
This bolus calculator uses a simpler and more traditional bolus wizard, with an added optional adjustment for fatty meals (reduced bolus) and an individual adjustment factor (a multiple).
The toggle for fatty meal (if enabled in settings) will decrease the recommended bolus amount.
Important to understand is that the Oref0/2 predictions are not used for these recommendations (in contrast to the default calculator).
This means recommendations will sometimes be given even when some predictions(s) are below your target glucose and/or threshold glucose value. Because of this I added the display of predictions also for this calculator, for some extra info and safety when making decision about confirming or changing bolus amount when using this alternate bolus calculator:
-
New Warning and inactivation if entering above maxBolus.
-
New big blue ”Enact” button.
-
Edit Meal entries. You can now go back to the Meal View from the Bolus View to edit or delete entries.
- New Meal View:
-
In Meal View you can now edit previous entered meal entries (if coming from the bolus view, see above).
-
Several UI/UX changes to make this view cleaner.
-
The summary when combining different presets (the ”presets” now called ”Saved Food”) is cleaner and more readable. Font colour will be adjusted automatically for you to be able to easier separate the different items comprising the full meal:

-
Adjustment of time is now easier and safer. Tap in the + or - button to add or subtract 15 minutes. To avoid accidental change of Time you now need to tap the ”Now” once before you can change the time of meal entries.
-
Added ”Note” for you to add any additional info (see screenshot above).
-
New big blue ”Continue” button.
- New Settings
-
UX/UI, App Icons, Bolus Calculator, Fat and Protein and ISF are some of all the new features added to the original FreeAPS X. These will now have their own section in settings.
-
The UX/UI have several new settings and you can now access these directly from the Home View (via the new Time Interval Button).
-
The Dynamic ISF settings have new pop-ups, allowing for more readable descriptions with new graphics. Using font size adjusted for dynamic font sizes (accessibility setting).
-
Threshold value can now be entered in a user-configurable glucose unit. New descriptions and graphics for the threshold setting.
- Live Activities.
- Live activities added, displaying latest glucose reading in the dynamic island and/or the Lock Screen. Thank you @10nas .
- Home View
Lots of UX/UI changes meant to reduce the clutter and improve the user experience. I can’t list them all here. Listed below are some of the
changes.
-
Make iASP work better with the accessibility settings.
Now iAPS will display nicely with all of the different iOS accessibility font sizes. One exception are the views from the Loop dependencies, these are not presenting well in bigger/biggest font sizes. These will need code change also in Loop.
You can both increase and decrease the font sizes in the iOS accessibility settings. Tip is to make iAPS-specific settings in iOS. -
Display active profile override in chart, similar to the demo targets. Duration and target are illustrated in purple. When active also the override button is highlighted:

-
Disable an active TT or Override with a tap on the highlighted button. A new cleaner confirmation alert is present before cancelation.
-
To edit or see more details about current active override (or TT) longpress the override (or TT) button.
-
Highlight the Temp Target button when active. Disable and change as with the overrides above:

The Temp Target button is hidden by default, but for those who really need to combine overrides and temp targets there now is a new setting in UX/UI settings to display this button.
-
Add a grey history button to the left. Tap this when you want to see the pump or glucose history.
-
Added scroll view. To see more (than you had before) info you can scroll down in Home View. Currently we only have a preview of statistics here (Sort of a test). Later more info/charts will be added here (insulin, carbs, steps, heart rate etc.). This is Info you only need/want to see sometimes, and which you only see when scrolling down. Tap the statistics preview to see all stats. This current preview display the Time in Range for the current day (hours since start of day).
 -
Increase the current Glucose in Header. There is now a setting to always Color-code the glucose, or only when below/over notification limits (for a cleaner look).
-
Present IOB and COB in frosted glass test tubes. (To reduce the boring clutter of strings in header view):

Duration will b presented in red when getting close to expiration. Tap pump to see more info.
-
Present MDT battery image dynamically. Battery will be filled according to current percentage . Tap to see more info.
-
Loop symbol is now more discrete. As looping is happening reliably you shouldn’t always need to focus on a big loop symbol. However when not working this symbol will be presented in red (or orange) clearly for everyone. Looping symbol is now presented centred, under the glucose (centred), as these two parameters ere the two most important. Tapping the loop symbol will display a bigger loop pop-up than before, in bigger default font size at the bottom for you to see all info at once (header, info panel, part of chart and the big pop-up with all of the relevant oref2 info.

-
Display the Eventual Glucose in info panel (before som users didn’t know what this tiny string meant) and in bigger default font size. Added unit to distinguish it from the current glucose value.
-
Added info in the loop pop-up. You will now always see when SMBs are disabled and when a middleware function is active (exactly what info is presented depends on the middleware code). When Middleware is active you will see this info in red. When SMB-ratio is changed from default (0.5) you’ll see this in orange (see above). When SMBs are disabled (either by settings or by a profile override or a demo target override you’ll see this presented at the button.
-
Remove the big colourful legend. Only display the chart legend whiten tapping the chart. Tapping again will hide it. The legend will now always be displayed under the predictions. Less clutter.
-
Simplify the chart time interval settings (less clutter). Tapping this button will now also present you with a shortcut directly to the Ui/UX settings, for you to change the appearance of the Home View, whenever you’d like.
 -
Overlay the Bolus Progress. Display Bolus progress more prominently. Display current insulin amount actually delivered:
-
When Max IOB = 0 an orange string is presented prominently in the info panel, now being a bit more descriptive.

The font size depends on your iOS settings… -
Profile panel has been removed and this space has now been added to the header instead. Instead of the panel we now have a profile button.
- Remote Commands, including Remote Profile Overrides.
-
From Nightscout you can now announce carbs, fat, protein remotely. You need to always enter all arguments.
Example 1: Announce 10 g carbs, 5g fat and 8g protein:
”meal: 10, 5, 8” -
You can now also activate an override and cancel an active profile override remotely.
Example 2: cancel an override:
”Override: cancel”Example 3: Start an override (you need to enter the name of an existing override preset):
”override: 🎾 🎾” -
The remote commands will now be presented in iAPS Home View chart with an owl symbol with an overlayed symbol of action. As mentioned before any remote bolus will tr...
Release 2.3.3
-
Safety fix / Info for Middleware users. Display when active middleware. Some less experienced users might forget that they are using some copied middleware code Now they will notice in red in the big pop-up. For the more advanced users this will allow for direct confirmation of an active middleware with the configurable output string in pop-up.
-
Use the same "remote" for remote commands in Nightscout, as in dev branch. Instead of "freeeaps-x-remote" now use "remote". Please be careful with remote commands. More confirmation/display of remote commands will be pushed to main later (now in dev).
-
Lots and lots of new translations and new strings. Added Hungarian and Vietnamese for iAPS and all its dependencies. (Vietnamese at 100 % in Crowdin project (https://crowdin.com/project/iaps).
Release 2.3.2
-
Fix Silence Pod toggle bug which inadvertently cleared configured alerts, by @itsmojo
-
Added build expiry info to settings view and logs, by @JamieKeene. Only displayed when building in Xcode to an iOS device.
-
More Omnipod pump manager related fixes and improvements, by @itsmojo
Fixes a source of possible 0x31 pod faults during pod setup. -
Typos and some refactoring.
Release 2.3.0
Import/Export profiles from Nightscout.
-
Allows your endocrinologist, or you and your endo (preferably), to go through your settings in NS (ISF, CR, basals, DIA, targets). When updated in NS you can import all these setting to your iPhone iAPS app with a new import settings button in iAPS Nightscout settings.
-
Can also be used when onboarding a new iAPS app. You can import all settings from Nightscout with just a tap. To import you first need to select a pump, but even a simulator pump works for import to begin.
-
All profile settings will be imported and saved to pump.
-
All your settings (yes every one of them) are uploaded automatically whenever changed (and only when changed). For the auto upload of updated settings to NS you need to have NS configured and upload toggled on in iAPS NS settings.
Thank you co-authors and testers @scrappy and @dnzxy.
Replace Basal Schedules with Autotune Basals (new button).
- This feature has been requested many times. Now your normal basal profile will be replaced with the autotuned basal settings and saved to pump with a push of a new button in Autotune settings.
Bug fixes
- fix for adjusting the SMB/UAM minutes with a profile override.
- change opacity amount for the temp basal colour, by @dnzxy
- Update Microsoft clock for GitHub builds, by @bjornoleh
Release 2.2.8
- Localization code and all translations from Crowdin translators. All strings and localizations from dev branch 2.2.9.
- Additional fix for maximum insulin peak time.
Release 2.2.7
Omnipod update bundle with Silence Pod mode & Diagnostics support (#324), by @itsmojo
- Update bundle with various improvements and new functionality including
Silence Pod mode & Diagnostics support from freeaps_dev to SwiftUI
Various fault event code updates
- Add missing 0x4E code and description for SAW Trim Error
- Fix typo in rtcInterruptHandlerInconsistentState string
- Improved description string for the testInProgress fault
- Use more generic name for the values do not match case
- Add codes for the 0xD6 & 0xD7 reset faults of unknown origin
- Add codes for the mystery 0xCB, 0xD4, 0xD5, 0xD8 & 0xD9 faults
Various Omnipod message decode improvements
- Round RateEntry rate calculation to 2 digits
- Round RateEntry duration calculation to nearest second
- Add missing comma to RateEntry debugDescription
- New timeIntervalStr TimeInterval var for pod interval debug info
- Update some command commenting to be more consistent and useful
- Add debugDescription for CancelDeliveryCommand DeliveryType
- Add additional PodInfoTest checking and comments
- Whitespace tweaks for OmniKit & OmniBLE consistency
Remove some overly verbose OmniBLE Bluetooth logging messages
- Add {public} specifier to some non-debug logging messages
New operation mode that suppresses all pod alerts & beeping
- New CustomDebugStringConvertible extension for AlertTrigger
- Add new optional silent Bool parameter to AlertConfiguration struct
- Updated CustomDebugStringConvertible extension for AlertConfiguration
- Add new optional silent Bool associated value for most PodAlert enum values
- Add new offset TimeInterval associated value for time based PodAlert enum values
- Updated AlertSlot naming to make slot to alert mappings consistent
- Use consistent ascending alert ordering for all switch statements
- New alertSetString func to return suitable String for a given AlertSet
- New func to create corresponding PodAlerts for current pod time and silent values
- Add new silent Bool to ConfigureAlertsCommand struct
- Sort alert configurations in ConfigureAlertsCommand for easier analysis
- Have ConfigureAlertsCommand enforce the max alert duration value
- Rework pump manager code to use new silencePod var
- Use { } instead of ({ }) for {set,modify}State for consistency & clarity
- Add timeActive var to pump manager for more accurate pod active time
- Have acknowlegePodAlerts() use AlertSet instead of [AlertSlot: PodAlert]
- New setSilencePod pump manager func to change the pod's silence state
- Add some additional pump manager error logging statements
- Add new silencePod var to the pump manager state
- Rework PodAlerts creation for new podActive time offset and silence values
- New PodState var's to manage pod time active state
- Remove no longer needed activeAlerts PodState var func
- Update updatePodTimes func to manages new time active var's
- Update all unit tests as needed for new names & members
- Rework UI to use updated simplied interfaces for alertStrings from AlertSlots
- Add new Pod Settings button for Silence Pod and Unsilence Pod
- Update UI to use new new pod active pod state
- Have Pod Settings UI set the pod's expiration reminder alert
- Various commenting additions/updates/improvements/corrections
Read Pod Status display and consistency updates
-
Add new faultDescription var for FaultEventCode
-
Display errorEventInfo details for Pod fault details
-
Various AlertSlot comment updates for consistency
-
Make PumpManager silencePod and confirmationBeeps vars read-only
-
Consistency updates for setTempBasal result handling
-
Improved OmniBLE PodCommsError recoverySuggestion for noResponse and podNotConnected
-
Change OmniKit acknowledgeAlerts() to acknowledgePodAlerts() for consistency
-
New Silence Pod option and View
-
Update pulseLogString newlines for SwiftUI output
-
Replace pumpmanager mutateState() with discardableResult with setState()
-
Restore getDetailedStatus() pumpmanager funcs
-
enactTempBasal() func skips unneeded pod cancel if running scheduled basal
-
Restore deliveryStatus PodState variable to verify pod delivery state
-
Restore lastCommsOK PodState variable for additional comms verification
-
Add bulletproofing for all insulin commands to prevent 0x31 faults
-
Updated Notification Settings & Confidence Reminders text for silent pod
-
New Diagnostics command section at end of Pump Settings
Restore Loop 2.x/FreeAPS Read Pod Status diagnostic command
Restore Loop 2.x/FreeAPS Read Pulse Log diagnostic command
Restore Loop 2.x/FreeAPS Play Test Beeps diagnostic command
New Pump Manager Details diagnostic command
- Fix some mismatched comments for some copied LocalizedString's
- Update a couple of messages to avoid using the word "Loop"
- Add missing LocalizedString funcs for various buttons
- Print Pod Details View Sequence # as a zero padded 7-digit value
- Fix typo in Pod Details View LocalizedString comment
- Updated Pod Fault display with decimal & hex values & separate description line
- Prevent immediate low reservoir pod alerts if setting a value higher than current
- Improved debugDescription formatting for various PumpManager related state
- Allow expiration reminder to be triggered more than once
- Acknowledge all pod alerts when toggling silence pod state for safety
- Fix to prevent podState expiresAt jumping after a reset pod fault
- New PumpManagerAlert to post and clear any unexpected pod alerts
- Cleaned up some uneeded PumpManagerAlert related cruft
- Improved SwiftUI previews for many views
- Fixed various comment typos and errors
- Convert some inconsistent uses of NSLocalizedString to LocalizedString
- Remove some uneeded and inconsistent semicolons in OmnipodSettingsView
- White space cleanup to minimize OmniKit & OmniBLE source file differences
- New configuredAlertsString func for detailed info on configured alerts
- Renamed alertString func to alertSetString func for better clarity
- Clearer PumpManager debug strings for optional current & previous PodState
- Clearer PodState debug strings for optional Fault and pdmRef
- Add additional bulletproofing for suspend time expired alert clearing
Reworked and improved pump manager settings layout
- Device Details -> Pod Details
- Previous Pod Information -> Previous Pod Details
- Remove Pod -> Deactivate Pod
Improved alert handling when toggling pod silence state during suspend
- reset suspendTimeExpired alert if active and alert not acknowledged
- fix logic error which caused podSuspendedReminder alert not to be reset
Pod suspend alert handling improvements
- Don't clear suspend time expired pod alert to continue beeping until resume
- Keep suspend time expired pod beeps on 15m intervals when toggling Silence Pod
Make pod fault code, description and ref string info more available
- Added the decimal fault # to the reservoir display for a faulted pod
- Deactivate pod view includes notification string for common faults
- Deactivate pod includes fault # & Ref string for unexpected pod faults
Disable selective pod settings commands based on pod state
- Disable Set Temporary Basal Rate when pod is faulted or not active
- Disable Play Test Beeps Diagnostic when pod is faulted or not active
- Disable Read Pod Status and Read Pulse Log Diagnostics with no pod
Add missing OmniKitUI.xcassets for Cannula Inserted & reservoir masks
-
Fix logic error for fault display text during Pod Deactvation
Improve OmniBLE/PumpManagerUI directory Xcode sorting -
New Crowdin updates (#320)
-
Merge fix (#327)
-
More pod strings
-
Localization work
-
Revert "strings"
This reverts commit 0d0acad.
Authored-by: Joe Moran [email protected]
and co-authored (strings and localization) by @Jon-b-m
Release 2.2.6
Allow looping when HIGH (#259)
- Allows safe looping when your CGM reading is "HIGH".
- When CGM is reporting HIGH all SMBs and High Temps will be temporarily disabled, but the loop will still be run for computation of IOB, COB etc, for you to make an informed decision about how much insulin to manually administer.. Your scheduled basal will now be used as current basal, unless the eventual glucose is predicted below your set glucose target. So a kind of safe looping is now temporarily activated.
- Display the real glucose in header. "HIGH" when high and when adding a capillary glucose display the real value (not HIGH).
- Allow (capillary readings over HIGH for normal looping.
- Display in Enacted pop-up.
- Display warning in same pop-up
Big fixes
- Minutes ago fix for G7 sensors.
- Fix compile issue in Xcode 14 (#235)
- Improve the update of the date of Glucose View Header, by @avouspierre
- BuildBranch fix for Xcode 15, by @bjornoleh
- Hard limit of 55 for insulinPeakTime
to avoid endless logs and errors in oref0 - Prevent Nightscout collisions from occurring due to non-unique glucose-IDs IDs Fix for all CGMs, by @avouspierre, @dsnallfot and @LiroyvH
- Fix run script for branch name and commit ID to work with Xcode 15 (#274)
Miscellaneous
- Add Dexcom G7 SAGE.Upload activation and session start date to NS.
- Display build number like TestFlight (build number in brackets), by @MikePlante1
- Check for a trailing slash (/) at the end of the URL entered by the user and remove it to prevent 404's, by @LiroyvH
Co-authored-by: Pierre L [email protected]
Co-authored-by: bjornoleh [email protected]
Co-authored-by: Liroy van Hoewijk [email protected]
Co-authored-by: dsnallfot, Daniel S.
Release 2.2.5
Bug fixes
- Snoozing fix (#207), by @TymHuckin. Glucose alarms can now be snoozed.
Miscellaneous
- Add back sensor start and transmitter activation date (to display SAGE in Nightscout for Dexcom G6 sensors). Thanks @bjornoleh!
- Fastlane typos edits, by Brandon Nielsen (GitHub: @bniels707).
- Make the iAPS App URL configurable.
- Hide the snooze modal (screen) when tapping "Snooze"-button.
Release 2.2.4
Bug fixes
- Sigmoid combined with a profile override target was not using the override target (but normal target).
- Profile target presets were displayed as rounded to nearest integer.
- Test fix for UAM not working with an empty pump history (due to a bad merge?).
Miscellaneous
- add a freeaps _settings default JSON and change some to same default as OpenAPS, by @scrappy
- Lower the minimum carb ratio to 0.1 g/U
Release 2.2.3
New Features
- Add Fat and Protein from Watch app.
- Add meal notes (Food Type). Upload foodType to Nightscout.
- List all 3 upload toggles to Nightscout in Nightscout Config View instead (Feature request #140).
- Add setting to Autotune which allows for autotuning of only basal rates
- Add dynamic ratio and dynamic ISF to the insulin sensitivity config view
Bug fixes
- Typo in logs
- glucose conversion bug (issue 141) fix by @eugene Bashmakov
- Fix Fetching carbs from NS and prepare for fetching fat and protein from Nightscout.
- Fix minus button for nutrients in Watch app. Now easier to tap. Scale down text when necessary.
- Display current oref0 threshold when bolus alert about dropping below threshold.
- Prevent displaying button shape for bottom panel buttons
- Fix for Remote NS Announcements (bolus, open loop etc), by @daniela C. Sort by timestamp before fetching to make sure that always the last announcement is fetched.
- Typo in stat view laying TIR chart.
Miscellaneous
- Change back to TDD in enacted pop-up
- TIR. Display value even when 0 % (<3.3, 3.9-7-8, > 11), by request
- Enable Apple Health integration footer update, by @MikePlante
- Logging of COBpredBG
- Display units in statistics.json and
fix for issue nr 156: #156 - Allow carb ratios as low as 1 g/U, by request
- ISSUE-161 | Rename title Target Ranges to Target Glucose by @eugene Bashmakov
- Avoid rounding twice
- Use same sequence of nutrients as the Phone app.
- Crowdin updates and new localizations.
- Fix for issue157 #157
When there is a red bolus warning use the old bolus recommendation for Watch app. To avoid displaying alerts on watch app and to avoid overdose insulin when using iAPS watch app. - Raise max COBpredBG from 401 mg/dl to 1500 mg/dl. Test. This will indirectly also raise the max Eventual Glucose to 1500 mg/dl.
- Upload euglycemic range to optional statistics.json (70-140). Reduced code (made it more similar to the functions used in StatView).