Loop 3.0 Released

Loop 3.0 has been released! See Release Loop 3.0 · LoopKit/Loop · GitHub.
This means the scripts for building it in Xcode on a Mac will be updated making it easier for non-programmers and the non-technical oriented folks, though you’ll still need a Mac, Xcode installed on it. It also means the new method of building without a Mac or Xcode will be updated with newest version of Loop, capable of using Omnipod Dash and Dexcom G6/G7 turning them into an AID. It isn’t magic, it won’t make T1 better, but treatment will be easier for many. As with all things T1, check it out in LoopDocs: LoopDocs first and see if it’s something you want to try.

Caution: Loop 3.0 is still not FDA approved or endorsed. Loop is still a DIY software system for linking CGMs and pumps and making them an AID system. Though tested by many volunteers as well as the developers, there is no warranty/guarantee provided, and you accept all risks associated with its use. You need to subscribe and regularly monitor the Loop.Zulip.Chat groups (https://loop.zulipchat.com/) for any updates or warnings regarding its use.


What’s that? Please explain. Thx

Automate Insulin Delivery system. It’s the industry term normally used for the marrying of a CGM with a pump and algorithm to automatically dose for diabetes.

Ideally they would start commenting the code! Previous versions had practically no comments. Just had to figure out what was going on with the code by looking through everything and trying to figure it out.

I assume it is still written in Swift?


@Eric Yes, it’s still in swift. I believe parts are commented, but not to the extent many would appreciate. I agree commenting would be very much appreciate by those with skills/semi-skills, though many probably don’t understand the concept (I used to run a WWIV BBS and mod’d my own C code). I’m still using the Loop-dev code forming the basis of 3.0. There’s already a 3.1 version (not sure what drove it); the primary developers have been modifying/refining the 3.0 code for about a year and it’s been in use by many for months; they’ve deemed it sufficiently stable for release to the “general” Loop population. The most used modifications (CustomTypeOnePatches—I do not have them installed) have been tested and work with the new release per Marion Barker.


I’m still using the older version with the Riley Link. I’ve made a lot of mods to it.

I will try to post it all sometime.

My favorite mod was changing the display while a bolus is happening. The original display was ridiculously small.

I made it so I can see the number without my glasses! :grinning:

Here it is:

Compare that to what yours looks like when you bolus!


@Eric I suffer the glasses issue and small typeface as well! I’d be interested in seeing the changed bolusing code. I realized that while it graphically changes to show a bolus, it doesn’t change color/size while doing so and thought that would be good change to make.

I read recently someone got an email supposedly from Insulet stating they were planning to discontinue Eros pods. I think it’s inevitable with both Dash and 5’s out, but was somewhat surprised because there seems to be a LOT of people still using Eros (requiring a Riley/Orange/etc. link to Loop with). Do you have info on this or gotten anything?


I know the discontinuation is in the works but I have not officially received notice from Insulet yet. They have been talking about discontinuing it for years. :roll_eyes:

Is this the part you are talking about?

I think I made that text a little bigger too, but I am not 100% sure without looking at an “original” one".

How does that compare to yours?

1 Like

Here are some code changes to try. First of all, make a backup of your entire code tree! That way if you don’t like it, it’s simple to just roll everything back to the original.

I have all the file names here. Just substitute whatever your source tree location is.

Here are the changes. Just open the file in a text editor and make the changes I show below. Where it says “Was this:”, that is the original. Change it to what I have under “Changed to this:”.

This is for the old RileyLink Code, so hopefully the lines will match yours fairly closely.

This might look spooky, but it is simply a matter of editing the file in a text editor, looking for the original text that I listed, and replacing it with the new text. Don’t add any extra spaces or returns. Just try to match the original as closely as possible.

If you mess up, you have your backup copy, so no big deal.


Make the “Starting Bolus” more obvious! Using little emoji’s for this because the text was hard to control. But this makes it pop-out more!

\YOUR_CODE_SOURCE\LoopWorkspace\Loop\Loop\View Controllers\StatusTableViewController.swift

Was this:
cell.titleLabel.text = NSLocalizedString(“Starting Bolus”, comment: “The title of the cell indicating a bolus is being sent”)

Changed to this:
cell.titleLabel.text = NSLocalizedString(“\u{1F7E3}\u{274C}\u{1F7E3}\u{274C}\u{1F7E3}BOLUS\u{1F7E3}\u{274C}\u{1F7E3}\u{274C}\u{1F7E3}”, comment: “The title of the cell indicating a bolus is being sent”)

This is in the same file as above.
Make the animation spinny thing bigger for the Starting Bolus screen.

\YOUR_CODE_SOURCE\LoopWorkspace\Loop\Loop\View Controllers\StatusTableViewController.swift

There are about 5 of these “let indicatorView” lines in this file, so make sure you change it in the “Starting Bolus” section. It will be for the one that says: “The title of the cell indicating a bolus is being sent” a few lines above. That means you are in the right place for this change.

Was this:
let indicatorView = UIActivityIndicatorView(style: .default)

Changed to this:
let indicatorView = UIActivityIndicatorView(style: .large)

Change the size of the bolus text (the part while bolusing).
Also made the background yellow so it is very visible.


Was this:

Changed to this:

Was this:

Changed to this:

Was this:
rect key=“frame” x=“15” y=“16” width=“354” height=“22”
fontDescription key=“fontDescription” type=“boldSystem” pointSize=“15”

Changed to this: (and added the last line for the yellow background color):
rect key=“frame” x=“15” y=“16” width=“354” height=“250”
fontDescription key=“fontDescription” type=“boldSystem” pointSize=“55”

color key=“backgroundColor” red=“0.98” green=“0.98” blue=“0.1” alpha=“1” colorSpace=“custom” customColorSpace=“sRGB”

Removed the word “Bolused” to free up space for the numbers.


Was this:
progressLabel.text = String(format: NSLocalizedString(“Bolused %1$@ of %2$@”, comment: “The format string for bolus progress. (1: delivered volume)(2: total volume)”), deliveredUnitsString, totalUnitsString)

Changed to this:
progressLabel.text = String(format: NSLocalizedString(“%1$@ of %2$@”, comment: “The format string for bolus progress. (1: delivered volume)(2: total volume)”), deliveredUnitsString, totalUnitsString)

1 Like

@Eric In your post above you show a bolus in progress with yellow background and black text/numbers larger than the standard/other text on the the display. Mine opens a temporary gray background area with black text and the orange circle gradually closing the circle as the bolus progresses.

Thanks for the code, I’ll take a look. I doubt there’s much of a difference in the code at that point. We’ll see!


@TomH, make a backup. Then just edit with your favorite text editor. If you are careful and match it all like I show, it’s pretty easy.

I like it a lot!!

Here is my starting bolus screen. I could not change the text size for this one. So instead, I used the little symbols to make it pop out. Can’t miss this!

1 Like

Then once the bolus starts, I get the big yellow splash screen.

1 Like

Thanks for all your hard work to the developers and unsung heroes! I have been using Dev-Loop (now Loop 3.0) for several months now and I love it. I moved up to the DASH pumps and left behind my Riley Link. I am on medicare and the insurance denies Insulet products in favor of old style tubed pumps but I think it is worth the money to have the Loop working with tube-free Insulet products.

Thank you everyone!


I just checked with my US health insurance (moda) pharmacy benefits tool:

Omnipod Classic Pods (gen
Covered - Tier Preferred

Dash and O5 are also listed, also “preferred”, so I assume the “classic” is Eros. Unfortunately the "gen " information is truncated so I can’t be sure; O5 is gen 5, Dash is gen 4 and “classic” is gen .

Perhaps you could post the supposed email? They’re pretty much instantly recognisable.


@jbowler I’ve tried to find the original post regarding the Insulet letter, but couldn’t find it again. The reason I asked the question of here on FUD was to confirm if others had received anything; I’m sure it could be a poster’s “interpretation” as I haven’t heard anything else on planned discontinuation or possibly an over zealous rep trying to get people to “upgrade” to a newer product. Sorry if I caused any concerns for those still using Eros…it’s helped any number of people and gave a further push to the development of Loop for which I’m greatful!


I know this is a longshot, but does anyone have any suggestions on how to get your phone to play a notification sound when you do a bolus?

I know the Loop code has an option for confirmation beeps, but that is just the pod playing a beep sound, which in some circumstances doesn’t make enough noise if I am wearing headphones with my iPhone.

But if the phone could play a notification, that would be super helpful.

@Eric Kind of a shocker here, I didn’t think you wanted any notifications! Sorry to say, I don’t have the knowledge, but am sure its doable via an Xcode command inserted at the right place! Found these couple of examples on YouTube to provide some hacks that could be inserted in Loop, FreeAPS, or the like; have no idea otherwise: How to Play Sounds in Swift in One Minute - YouTube and How to add sound effects to Xcode project | Continued Learning #9 - YouTube.

1 Like

Hi @TomH,
Yes, generally I don’t want any notifications. With normal use, I can see the bolus screen, and that’s enough.

When I use the Loop app when I am on the treadmill, it’s fine there too, because I have the phone mounted on the treadmill to display the bolus (part of the reason I setup that really huge display on it!). I use the apple watch to do the bolus, because it’s super easy to use that while running. And it’s easy to see, so that’s all the confirmation I need.

But… for a race, I can’t be looking at my phone to make sure I got the bolus! And the watch does not ever notify me of a bolus failure, so I would always be uncertain that I got the bolus.

So my current setup is to use Loop when on the treadmill. But in a race I have to go back to syringes.

If I were to be able to configure it to play a phone sound, I would know I got a bolus. My headphones would make it easy to hear.

I looked through the code, and it’s hard to figure out exactly where to put the “play sound” function.

Thanks for the links. I am checking them out. But I just need to figure out where to put the code.

1 Like

@Eric I should have remembered you’re running stories from previous…makes total sense now! You’ve had an effect, I started looking at Swift coding today, not that I’ll get all that far with it, but if I come up with something I’ll pass it along, alternately, you could dm Pete Schwamb and ask where in the code would be a good place…he’s pretty good at answering others questions on much less technicalities…

1 Like

The way it works with AndroidAPS and Omnipod Dash is that I don’t get a notification if the bolus succeeds, rather I get a notification if AndroidAPS can’t confirm that the bolus succeeded, or if it fails. So quite often, in fact, I get a false negative; AndroidAPS starts tinkling and fairly rapidly raises the volume to siren level to assert that it can’t confirm the bolus was delivered.

Either approach should be possible in Loop, but the one you want should be easiest. Reporting the lack of a positive requires a timer in the code and handling code which starts the alarm. Reporting a success requires emitting an alarm at the point of the success. I suspect the authors didn’t do it because the pumps already do it and the authors did not consider chainsaw operators; even the AndroidAPS alarm can’t penetrate that :slight_smile:

1 Like