// Collapsable Mobile Menus


This page was last updated on June 26, 2022 by Marion Barker

  • June 26:
    • If you are using Loop-dev (highly recommended), check out the new (work in progress) section in LoopDocs
    • Added new method for deleting shared app group apps – if you need to do that for some reason
  • May 14: The Loop-dev build instructions and beginning of documentation have been added to LoopDocs.
  • April 22: No particular milestone – just been a while since page was updated
  • March 21: Apple released iOS 15.4, which required Xcode 13.3, on March 14. Xcode 13.3 requires macOS Monterey (12.x)
    • We’ve been so busy fixing code for Xcode 13.3 that documentation has fallen behind
    • Loop-Dev, Loop (released master branch), FreeAPS (released freeaps branch) and FreeAPS-Dev (freeaps-dev branch) have all been updated to work with Xcode 13.3
    • Please download (or update) to fresh code before attempting to build with Xcode 13.3
  • March 1: A lot of changes since page was last updated.
    • Big news today: the dash-integration branch is merged into the dev branch and the zulipchat channel for Omnipod DASH is opened to the public.

Beta Testing

In preparation for beta testing and to assist developers and very early testers, this page was prepared in draft form and was password protected. The password has now been removed.

  • The LoopKit team is hosting an implementation for Loop dev
    • In addition to the dash integration – this also has a lot of new features
    • This is the version that will become Loop 3.0, so you will be testing these new features in addition to Dash
  • The Loop and Learn team is hosting an implementation of an Omnipod (Dash) (aka Bluetooth enabled) version of FreeAPS.
    • If you are interested in the FreeAPS version – join both the zulipchat channel and the telegram channel (link at top of page)

If you are not familiar with either Loop or FreeAPS, you should wait until this has been released.

Refer to the documentation for Loop and FreeAPS. You can use these apps with Medtronic, Eros or Dash pumps.

You should not attempt to use this beta test version unless you have a clear understanding of how DIY artificial pancreas systems work, are comfortable with the potential need to rebuild at short notice and are willing and able to provide detailed troubleshooting information to the developers when you have a problem.

What does beta test mean?

  • This code has been tested by the developers and early adopters
  • This code is a work in progress
  • You should join the public communication channel to get alerts to updates and to provide feedback on code features:
    • You need to join the Loop zulipchat #Omnipod DASH stream to engage with the developers and keep up to date with status
    • The User Interface in the Loop-dev version contains a lot of updates from Tidepool for the Dash pods and has the updates associated with Loop-dev
    • The FreeAPS user interface is unchanged and remains the older version of code with Dash added
  • Feb 22, 2022 – a schema breaking change to Loop dev landed starting Feb 20
    • If you have already built Loop-dev on a given phone and an alert had been issued with Loop-dev, then you must delete Loop-dev, do full update of code, rebuild and on-board
    • If you use Nightscout, your therapy settings including overrides can be pulled from Nightscout as part of the onboarding
    • There was an earlier problem where existing health entries were not imported for the day of the transistion – this was fixed with the version available on March 1, 2022
  • March 4, 2022 – the time zone bug (FreeAPS only) has been fixed – requires updated code and rebuild
    • The Dash implementation for FreeAPS has been moved to the freeaps_dev branch in the loopnlearn repository
    • The build instructions, below, for FreeAPS have been updated to reflect this.
    • Warning – very few people have tested this – please pay close attention and post your Issue Reports (water pod or live) on zulipchat

Prerequisites Before Building Updated Loop / FreeAPS


Please review LoopDocs thoroughly – it pertains to both the Loop dev version and the FreeAPS version. The underlying algorithm is similar for Loop and FreeAPS; there are some differences in user interface and display (and architecture). FreeAPS supports more CGM options and has some features not available in Loop. If you do not know how to do a workspace build using the clone command, please wait until this is tested and added to the Loop and Learn Build-Select script.

Crowdin Translation Project

Please help by adding your language to the translation project for the loopnlearn github implementation for FreeAPS. See this link for the current status of languages and to sign up to help.

The current status of the translation for all languages is shown by this graphic:

Don’t worry if you see the localized number go down – that probably means a new language or submodule was added.

Build Directions

Stay Informed

Whenever a new update is made available, a summary is found the Loop zulipchat channel.

Because Loop-dev is undergoing testing for many new features, you should subscribe to all the streams in zulipchat.  The information you want may be under #development or #ux or #general, etc.  Do NOT build or update without first reviewing recent news and discussion. Please update whenever a new update is available – these typically are bug-fixes or improvements to code stability.

  • Loop zulipchat stream #Omnipod DASH if it is Dash Specific
  • Loop zulipchat stream #development if it is a general Loop-dev problem, comment, or compliment
  • Loop zulipchat stream #github has automatic announcements of changes to LoopWorkspace and the submodules used by Loop

CGM Sources

The Loop dev version provides for DexcomShare, Dexcom (and Medtronic) CGM support and has now added Nightscout as a CGM.

Getting Ready to Build:

If you do not have a Mac (or Virtual Machine) with Xcode ready to use, you may find the Build Step 1 through 9 in LoopDocs helpful.

Download Directions:

You should only use one of these apps if you are a member of the Loop zulipchat channel and have subscribed to all the streams.

When Building:

You may notice an initial red error indication at the top right of your Xcode (before you start to build or if you hit the build too soon).  There are several external packages that must be fetched from github, then that indicator will resolve.  Be patient.

Often, these packages don’t resolve and the build fails because of that.  The solution, with associated graphics, is found in LoopDocs. The short answer is Hold down the Control-Key and click the Package Dependency row, choose Resolve Package Dependencies. Wait for packages to resolve and indexing to begin.

Build Directions for FreeAPS

NOTE: You should only use this app with Dash pods if you are a member of the Loop zulipchat and the Telegram group for Loop Help. 

Open a terminal, go to a “fresh” directory – it cannot already have a LoopWorkspace folder, and issue these commands

git clone --branch=freeaps_dev --recurse-submodules https://github.com/loopnlearn/LoopWorkspace.git

cd LoopWorkspace

xed .

To Build

The build instructions for FreeAPS (freeaps_dev branch) are the same as the Loop-dev Build Directions once you have used the clone command listed above.

Build Directions for Loop dev

You should only use build this app if you are a member of Loop zulipchat (best to join all streams).

LoopDocs updates are a work in progress.  Until such time as Loop-dev is released as Loop 3, the build instructions are “hidden” at the bottom of Step 13.

Please refer to LoopDocs Loop-dev Usage pages (labeled Loop 3 because Loop-dev will be released as Loop 3) for preliminary documentation on the dev version.

  • You may be able to transition from Loop Master or FreeAPS to Loop-dev
    • If you use FreeAPS, remember to export settings first using an iCloud drive
  • Loop-dev has two onboarding features – with or without Nightscout:
    • With Nightscout – it asks if you want to import from Nightscout – say yes and all your settings are imported, then you confirm them
    • Without Nightscout – if building over Master or FreeAPS, you can confirm the settings you had previously while going through the onboarding
    • In both cases, you can (probably) keep the same pod (no guarantees in life)

Loop-dev now has a feature to import all settings and all saved overrides from Nightscout – if you want to use this feature, add your Nightscout credentials first thing when onboarding with Loop-dev

If you built Loop-dev on your phone before Feb 21, you might need to delete it from your phone before building an updated version – which means you should plan it during a pod change if using pods. If you have never installed Loop-dev (or not recently installed Loop-dev), you should be able to build the app over Loop master or FreeAPS.

Be prepared because the signature that means you need to delete is that the app builds and then crashes – which means you will not have a working app.

If you ever need to completely clear Loop-dev off your phone in preparation for a fresh start with Loop-dev (rebuild), you will need to delete all apps on your phone that have a shared app group. 

  • This includes Loop, FreeAPS, FreeAPS X, xDrip4iOS, Glucose-Direct, and the g5 Transmitter Reset app.
  • Fastest way to delete all apps with a shared app group is to follow the directions to review the provisioning profiles on your phone and then delete (by using the – sign) all of them.
  • Now if you tap on Loop-dev it will say “Loop is no longer available”
  • Delete the app and then rebuild to see the “Welcome to Loop” screen

To Build

To avoid having to update build instructions and build error fixes in two places, you are now directed to LoopDocs if you are building Loop-dev

To Update

You do not need a fresh clone for each update.

For Loop-dev early testers ONLY

For the big, schema-breaking change of Feb 21, 2022 – make sure you are not running Xcode (quit if you are), and then update the LoopWorkspace with the “Typical Procedure”.  It reorders the build order so that you can use NightscoutService module to import all your settings from Nightscout as part of onboarding. It doesn’t hurt to remove derived data too (see below).

Typical Procedure:

If you see an announcement that the workspace has been updated, you should open a terminal window and navigate to the LoopWorkspace folder. Ensure that the branch name, reported after the first command, is correct. The final submodule update command configures your workspace to have the correct version for all the submodules.

  1. git branch
  2. git fetch
  3. git pull --recurse

Warning – sometimes the `git pull` command will not finish because there is a conflict in that folder – for example if you have added a customization in a file that is updated with this pull. To resolve a conflict, the easiest way is to type `git stash` in that folder, then redo the pull. (For LoopWorkspace, sometimes a version of LoopConfigOverride.xcconfig is checked in inadvertently with Pete’s ID and then reverted next build.) 

Advanced Procedure

If you see an announcement that a particular submodule has a branch you want to test, or if you notice that submodule update has not yet been pulled into LoopWorkspace, then you can update just that one submodule – you must know the name of the branch you want to use. Open a terminal window and navigate to the LoopWorkspace folder. Then type the following commands for each submodule you want to update. (Be aware that the LoopWorkspace update command listed above will undo any special branch selections you make with this process.)

  1. cd <folder>
  2. git fetch
  3. git checkout <branch-name>
  4. git pull
  5. cd .. (return to LoopWorkspace folder)

Some updates will modify characteristics of the LoopWorkspace build environment and require you to remove the derived data.  Typically you will be warned if you need to do this.  If you update and your build fails (for something other than the WatchApp Extension entitlements error), you can always remove the DerivedData and try again. It will take much longer to rebuild following this step.

To do this, first close the workspace and quit Xcode.

Issue this command, then restart Xcode and allow it to index again. Build again.
rm -rf ~/Library/Developer/Xcode/DerivedData

Skip to content