diff --git a/docs/build/build-options.md b/docs/build/build-options.md index 4155e70..a95184d 100644 --- a/docs/build/build-options.md +++ b/docs/build/build-options.md @@ -4,7 +4,7 @@ * Browser Build: * If you have never built, see [*LoopFollow* Browser Build](lf-browser-build.md) - * If you are updating from v3.x or older, you need follow the one-time steps to [Update from *LoopFollow* v3.x](lf-browser-build.md#update-from-loopfollow-v3x){: target="_blank" } + * If you are updating from v5.x or older, you need follow the one-time steps to [Update to *LoopFollow* v6.x](lf-browser-build.md#update-to-loopfollow-v6x){: target="_blank" } * Mac-Xcode: [Build *LoopFollow* Script for Mac-Xcode](#build-loopfollow-script-for-mac-xcode) ### Build *LoopFollow* Script for Mac-Xcode diff --git a/docs/build/lf-browser-build.md b/docs/build/lf-browser-build.md index f10ae80..66db66c 100644 --- a/docs/build/lf-browser-build.md +++ b/docs/build/lf-browser-build.md @@ -137,12 +137,14 @@ The `Add Identifier`  Action  should su ## Create `App Group` +New builders - just continue with the instructions as provided on this page. + +### Update to *LoopFollow* v6.x + !!! important "Updating LoopFollow to version 6.0 and newer" - New builders - just follow the instructions as provided on this page. - This information admonition is for existing builders who need to update. - The addition of Live Activity requires adding the LoopFollow App Group. Your build will fail until you take these steps. + The addition of Live Activity requires adding the LoopFollow App Group. Your build will fail until you take these one-time steps. If you are updating from an earlier version, **sync your fork** and then: @@ -160,7 +162,7 @@ If you have never built the *LoopFollow* app with *Xcode* using your `TEAMID`, y 1. Open this link: [Register an App Group](https://developer.apple.com/account/resources/identifiers/applicationGroup/add/) on the *Apple Developer* site. 1. For **`Description`**, use `LoopFollow App Group` 1. For **`Identifier`**, enter `group.com.TEAMID.LoopFollow`, substituting your Team ID for `TEAMID` - * **You must replace `TEAMID` with your 10-digit Apple Developer ID - do not just copy the App Group Identifier above** + * **You must replace `TEAMID` with your 10-character Apple Developer ID - do not just copy the App Group Identifier above** * A mistake here means you will not be able to build the *LoopFollow* app until you fix it 1. Click `Continue` and then `Register`. @@ -353,70 +355,3 @@ Please do not remove an existing app if you have trouble building a new one. You ## Install on Phone The [LoopDocs instructions: Install on Phone](https://loopkit.github.io/loopdocs/browser/phone-install) walk you through the steps to install the app to a phone. When going through those steps, replace your App Name for _Loop_. Everything else is the same. - - -!!! success "Adding Push Notifications Simplified with v4.4" - Provided in *LoopFollow* v4.4 and newer, you can run Add Identifiers to add the required `Push Notifications` capability. - - For *LoopFollow* v4.0 through 4.3, you had to manually add that capability to the Identifier. Thanks to our friends at fastlane, who updated their tool, this manual action is no longer necessary. - -## Legacy: Updating from v3.x - -Given that a Browser Build must be rebuilt every 90 days, the instructions here are unlikely to be required. - -### Update from *LoopFollow* v3.x - -When updating from an older version of *LoopFollow*, v3.x or older, you need to add the `Push Notification` to the Identifier Capabilities: - -* [Sync Your Fork](#sync-your-fork) -* [Run Add Identifiers](#run-add-identifiers) to add the new capability -* [Build Your App](#build-your-app) - -> Repeat these steps if you use LoopFollow_Second or LoopFollow_Third. - -#### Sync Your Fork - -* Go to your *LoopFollow* fork and click on the Sync button - -> ![sync the fork](img/github-build-check-fork-status.svg){width="700"} - -#### Run Add Identifiers - -* In your *LoopFollow* fork, select the Action tab and run the Add Identifiers Action -* Wait for a successful completion before trying to Build. - -??? abstract "Detailed Instructions to Run Add Identifiers (Click to open/close)" - Refer to the graphic below for the numbered steps: - - 1. Click on the "Actions" tab of your repository - 1. On the left side, click on "Add Identifiers" - 1. On the right side, click "Run Workflow" to show a dropdown menu - * You will see your default branch (`main`) - * You can select a different branch, but typically, you run the default - 1. Tap the green button that says "Run workflow" - - ![add identifiers using github actions](img/action-02-add-identifiers.svg){width="700"} - {align="center"} - - The `Add Identifier`  Action  should succeed or fail in a few minutes. - - * If you see the green check (:octicons-check-circle-fill-16:{: .passed }) continue to the next section - * If you see the red `X` (:octicons-x-circle-fill-16:{: .failed }): - * Use the Browser Build Errors page to resolve the error, then repeat the Action - * [Quick Reference for Browser Build Errors](https://loopkit.github.io/loopdocs/browser/bb-errors/#quick-reference-for-browser-build-errors) - -#### Build Your App - -* In your *LoopFollow* fork, select the Action tab and run the Build LoopFollow Action -* Wait for a successful completion and wait for the TestFlight upload (timing varies from a few minutes to a few hours) until trying to install the new build on your phone - -??? abstract "Detailed Instructions to Build LoopFollow (Click to open/close)" - 1. Click on the Actions tab of your *LoopFollow* repository - 2. On the left side, click on `4. Build LoopFollow` - 3. On the right side, click Run Workflow to show a dropdown menu - 4. Tap the green button that says Run workflow. - - > ![add identifiers](img/action-04-build.svg){width="700"} - -**Once this completes, be sure to update from TestFlight to get the updated version of *LoopFollow* on your phone.** - diff --git a/docs/faqs/lf-faqs.md b/docs/faqs/lf-faqs.md index bb7c351..dba71db 100644 --- a/docs/faqs/lf-faqs.md +++ b/docs/faqs/lf-faqs.md @@ -1,99 +1,63 @@ +## Why do Notifications vanish before I can read them? -!!! tip "Pro Tip: Frequent Glucose Alerts" - If you are experiencing audible and visible glucose alerts every single minute, disable the *LoopFollow* > Settings > General > Persistent Notifications slider. +You need to modify your iPhone settings to make the banners persistent. - Note: this is completely different from the persistent notifications you may want enabled to see APNS messages returned from real-time responses to remote commands. +In iPhone Settings, select Notifications, then Apps and then *LoopFollow*. -- - - +For the banner style, select Persistent. Then each notification remains visibile until you swipe up. -## Why do I keep getting "App inactive for X minutes. Open to resume."? { #app-inactive-silent-tune } - -This happens when *LoopFollow* isn't able to stay running in the background as intended. When *LoopFollow* is configured to use the *Silent Tune* method (playing silent audio to stay alive), the notification fires if that silent audio gets interrupted and the app becomes inactive. - -A common reason is that another app temporarily takes control of audio — for example the iPhone alarm or apps like Microsoft Teams. While that other app holds the audio session, *LoopFollow* can't keep itself alive in the background. If it's just temporary, you can simply tap the notification to reopen the app and it will resume normally. - -Another reason is if the app has been manually closed (swiping it away from the app switcher). In that case, the background activity stops completely, including *Silent Tune*, and the app needs to be opened again. +This also means that the current banner might be out of date if you haven't looked at your phone for a while. - - - -## Why do I keep getting "App inactive for X minutes. Verify Bluetooth connectivity."? { #app-inactive-bluetooth } - -This happens when *LoopFollow* isn't able to stay running in the background as intended. When *LoopFollow* is configured to use a Bluetooth heartbeat (RileyLink, Dexcom, or Omnipod Dash), it relies on regular Bluetooth signals from that device to wake itself up in the background. The notification fires when those signals stop arriving for several minutes. +## Why do I get audible and visible glucose alerts every single minute? -Common reasons: +If you are experiencing audible and visible glucose alerts every single minute, disable the *LoopFollow* > Settings > General > Persistent Notifications slider. -* **The Bluetooth device is out of range.** The phone and the heartbeat device need to stay within Bluetooth range — typically a few meters and worse through walls. -* **Bluetooth is turned off** on the phone, or the phone is in Airplane Mode without Bluetooth re-enabled. -* **The Bluetooth device has a low or dead battery.** RileyLink-style devices and expired Dexcom transmitters/sensors keep working only as long as their internal battery has enough power to advertise. +Note: this is completely different from the persistent notifications you may want enabled to see APNS messages returned from real-time responses to remote commands. -If the connection comes back on its own, the alert will stop. If it does not, check Bluetooth on the phone, move closer to the heartbeat device, and consider whether the device's battery has run out. - - - -## Version Compatibility - -This section consolidates version requirements for *LoopFollow* to work with *Loop* and *Trio*, and provides historical context for how remote control has evolved. - -It also lists updates to the method for using Browser Build. +## Does using DASH as a Background App Refresh Type increase Pod failure rate? -### *LoopFollow* Version 6.0 and newer +No, it shouldn't. -With the addition of Live Activity to *LoopFollow*, the build directions for browser build were updated. +What is happening under the hood: when you pick DASH as your heartbeat, *LoopFollow* connects to the pod's normal BLE service and just listens in on the same notifications *Loop*/*Trio* is already getting. It's not poking the pod or asking it for anything extra — it's eavesdropping on traffic that is happening anyway. -* If you use Browser Build, your automatic build will fail until you add the new Identifier, create the `LoopFollow App Group` and include the `LoopFollow App Group` in the capabilities for the *LoopFollow* Identifiers. -* Instructions start here: [Add LoopFollow App Group](../build/lf-browser-build.md#create-app-group){: target="_blank" } +Because both apps, *LoopFollow* + (*Trio* or *Loop*), are on the same phone, iOS only opens one actual BLE connection to the pod and shares it between them. So from the pod's perspective there is just one controller talking to it, same as always. Whether one app is listening or two, the pod is doing the exact same radio work. -### *LoopFollow* and *Loop* Compatibility +*LoopFollow* tagging along will not affect the pod battery. -| Feature | Minimum Versions Required | -|:--|:--| -| *Loop* Remote Control via APNS | *LoopFollow* 3.2 or newer; any version of *Loop* | -| Real-time APNS response from *Loop* phone | *LoopFollow* 4.6 or newer; *Loop* v3.11.1 or newer | - -With *LoopFollow* 3.2 and newer, *Loop* remote commands include Meal, Bolus and Override control. *LoopFollow* no longer requires the *Nightscout* site to be configured with the APNS credentials — Read access for the *Nightscout* URL is sufficient. - -With *LoopFollow* 3.1 and older, *Loop* remote commands were limited to Overrides, required the *Nightscout* site to be configured with the APNS credentials, and required a token with `careportal` access. +- - - -### *LoopFollow* and *Trio* Compatibility +## Why do I need APN credentials to use Live Activity? -!!! important "Breaking Change: *Trio* Remote Command Users" - *Trio* users must have matching versions of *LoopFollow* and *Trio* for remote control to work. +* When *LoopFollow* uses Silent Tunes as Background Refresh, it is not able to update the Live Activity display while the phone is locked unless APN are available +* The decision was made to require APN for Live Activity regardless of Background Refresh selection - * *Trio* 0.6 (or newer) requires *LoopFollow* 4.0 (or newer) - * *Trio* 0.5.1.28 (or older) requires *LoopFollow* 3.2.11 (or older) +- - - - Remote control commands stop working if versions are not matched. You do **not** need to reconfigure your credentials when upgrading — your existing settings continue to work. However, *LoopFollow* Browser Build users must update their Identifiers when upgrading from v3.x: see [Legacy: Updating from v3.x](../build/lf-browser-build.md#legacy-updating-from-v3x){: target="_blank" }. +## Why do I keep getting "App inactive for X minutes. Open to resume."? { #app-inactive-silent-tune } -| Feature | Minimum Versions Required | -|:--|:--| -| *Trio* Remote Control via APNS | *LoopFollow* 4.0 or newer; *Trio* 0.6 or newer | -| Real-time APNS response from *Trio* phone | *LoopFollow* 4.0 or newer; *Trio* 0.6 or newer | -| Nightscout Careportal (Temp Targets only) | Available for all *Trio* versions | -| *Nightscout* OpenAPS pill display | *Nightscout* 15.0.2 or newer with *Trio* 0.5.x or newer | +This happens when *LoopFollow* isn't able to stay running in the background as intended. When *LoopFollow* is configured to use the *Silent Tune* method (playing silent audio to stay alive), the notification fires if that silent audio gets interrupted and the app becomes inactive. -With *Trio* 0.2.x, *LoopFollow* only supports Temp Targets via the *Nightscout* Careportal, which requires a token with `careportal` access. Once updated to *Trio* 0.5.x or newer, the full *Trio* Remote Control options are available. +A common reason is that another app temporarily takes control of audio — for example the iPhone alarm or apps like Microsoft Teams. While that other app holds the audio session, *LoopFollow* can't keep itself alive in the background. If it's just temporary, you can simply tap the notification to reopen the app and it will resume normally. -For those following a looper using *Trio* 0.2.x, the only remote setting option in *LoopFollow* is *Nightscout* (Careportal). With this selection: +Another reason is if the app has been manually closed (swiping it away from the app switcher). In that case, the background activity stops completely, including *Silent Tune*, and the app needs to be opened again. -* The *LoopFollow* phone sends commands to *Nightscout*, which then forwards commands to the *Trio* phone -* The *Nightscout* display will be updated first -* If there is an issue sending the Careportal request, it might not reach the *Trio* phone -* After the next *Nightscout* download, *LoopFollow* display will reflect whether commands completed the full round trip +- - - -### APNS Keys Do Not Need to Be in Nightscout +## Why do I keep getting "App inactive for X minutes. Verify Bluetooth connectivity."? { #app-inactive-bluetooth } -With *LoopFollow* 3.2 and newer, the APNS credentials are entered directly in the *LoopFollow* app. They do **not** need to be embedded in the *Nightscout* site for remote control to work. This simplifies *Nightscout* configuration, especially for those using a paid *Nightscout* service. +This happens when *LoopFollow* isn't able to stay running in the background as intended. When *LoopFollow* is configured to use a Bluetooth heartbeat (RileyLink, Dexcom, or Omnipod Dash), it relies on regular Bluetooth signals from that device to wake itself up in the background. The notification fires when those signals stop arriving for several minutes. -The APNS credentials only need to be in *Nightscout* if you also use *Nightscout* Careportal or the *LoopCaregiver* app to send remote commands. +Common reasons: -## *LoopFollow* Feature History +* **The Bluetooth device is out of range.** The phone and the heartbeat device need to stay within Bluetooth range — typically a few meters and worse through walls. +* **Bluetooth is turned off** on the phone, or the phone is in Airplane Mode without Bluetooth re-enabled. +* **The Bluetooth device has a low or dead battery.** RileyLink-style devices and expired Dexcom transmitters/sensors keep working only as long as their internal battery has enough power to advertise. -The feature history is summarized below in reverse chronological order. +If the connection comes back on its own, the alert will stop. If it does not, check Bluetooth on the phone, move closer to the heartbeat device, and consider whether the device's battery has run out. -| *LoopFollow* Version | Feature Added | -|:--|:--| -| 6.0 | Live Activity added - must use LoopFollow App Group to build
see [Add LoopFollow App Group](../build/lf-browser-build.md#create-app-group){: target="_blank" } | -| 4.6 | Real-time APNS notifications returned from the *Loop* phone (requires *Loop* v3.11.1 or newer) | -| 4.3 | Separate QR codes for *Nightscout* Site, Dexcom Share, Remote Settings, and Alarm Settings | -| 4.0 | *Trio* 0.6 remote control support; share remote configuration via QR code | -| 3.2 | *Loop* remote commands (Meal, Bolus, Override) sent directly via APNS; APNS credentials no longer required in *Nightscout* | +- - - diff --git a/docs/faqs/lf-history.md b/docs/faqs/lf-history.md new file mode 100644 index 0000000..db82206 --- /dev/null +++ b/docs/faqs/lf-history.md @@ -0,0 +1,100 @@ +- - - + +## New Feature Highlights + +!!! tip "" + New with *LoopFollow* v6.0 and v6.1: + + * Live Activity and Live Activity upgrades + * More accurate statistics with user choice of range + * Smarter unit handling + * Fixes for alarms, the graphs, and the remote-command UI + * Settings rows updated for clarity + * For Trio users: choice of cone of uncertainty or forecast lines + +!!! tip "" + New with *LoopFollow* v5.0: + + * [Menu Screen](../setup/lf-setup.md#menu-screen){: target="_blank"} + * [Treatments](../setup/lf-features.md#treatments){: target="_blank"} + * [Statistics](../setup/lf-features.md#statistics){: target="_blank"} + +- - - + +## *LoopFollow* Feature History + +The feature history is summarized below in reverse chronological order. + +| *LoopFollow* Version | Feature Added | +|:--|:--| +| 6.1 | Live Activity requires APN credentials
see [APN Settings](../setup/lf-setup.md#apn){: target="_blank" } | +| 6.0 | Live Activity added - Browser Builders must use LoopFollow App Group to build
see [Browser Build: Add LoopFollow App Group](../build/lf-browser-build.md#create-app-group){: target="_blank" } | +| 4.6 | Real-time APNS notifications returned from the *Loop* phone (requires *Loop* v3.11.1 or newer) | +| 4.3 | Separate QR codes for *Nightscout* Site, Dexcom Share, Remote Settings, and Alarm Settings | +| 4.0 | *Trio* 0.6 remote control support; share remote configuration via QR code | +| 3.2 | *Loop* remote commands (Meal, Bolus, Override) sent directly via APNS; APNS credentials no longer required in *Nightscout* | + +- - - + +## Version Compatibility + +This section consolidates version requirements for *LoopFollow* to work with *Loop* and *Trio*, and provides historical context for how remote control has evolved. + +It also lists updates to the method for using Browser Build. + +### *LoopFollow* Version 6.1 and newer + +After testing *LoopFollow* Live Activity in version 6.0.0 and doing extensive research, it became clear that Live Activity with *LoopFollow* is not reliable without the use of Apple Push Notification credentials. + +This means that if you want to use Live Activity with *LoopFollow*, you need to create those credentials and enter them in *LoopFollow* [APN Settings](../setup/lf-setup.md#apn){: target="_blank" }. + +### *LoopFollow* Version 6.0 and newer + +With the addition of Live Activity to *LoopFollow*, the build directions for browser build were updated. + +* If you use Browser Build, your automatic build will fail until you add the new Identifier, create the `LoopFollow App Group` and include the `LoopFollow App Group` in the capabilities for the *LoopFollow* Identifiers. +* Instructions start here: [Add LoopFollow App Group](../build/lf-browser-build.md#create-app-group){: target="_blank" } + +### *LoopFollow* and *Loop* Compatibility + +| Feature | Minimum Versions Required | +|:--|:--| +| *Loop* Remote Control via APNS | *LoopFollow* 3.2 or newer; any version of *Loop* | +| Real-time APNS response from *Loop* phone | *LoopFollow* 4.6 or newer; *Loop* v3.11.1 or newer | + +With *LoopFollow* 3.2 and newer, *Loop* remote commands include Meal, Bolus and Override control. *LoopFollow* no longer requires the *Nightscout* site to be configured with the APNS credentials — Read access for the *Nightscout* URL is sufficient. + +With *LoopFollow* 3.1 and older, *Loop* remote commands were limited to Overrides, required the *Nightscout* site to be configured with the APNS credentials, and required a token with `careportal` access. + +### *LoopFollow* and *Trio* Compatibility + +!!! important "Breaking Change: *Trio* Remote Command Users" + *Trio* users must have matching versions of *LoopFollow* and *Trio* for remote control to work. + + * *Trio* 0.6 (or newer) requires *LoopFollow* 4.0 (or newer) + * *Trio* 0.5.1.28 (or older) requires *LoopFollow* 3.2.11 (or older) + + Remote control commands stop working if versions are not matched. You do **not** need to reconfigure your credentials when upgrading — your existing settings continue to work. However, *LoopFollow* Browser Build users had to update their Identifiers when upgrading from v3.x to add Push Notification capability. This is automatic when running Add Identifiers. + +| Feature | Minimum Versions Required | +|:--|:--| +| *Trio* Remote Control via APNS | *LoopFollow* 4.0 or newer; *Trio* 0.6 or newer | +| Real-time APNS response from *Trio* phone | *LoopFollow* 4.0 or newer; *Trio* 0.6 or newer | +| Nightscout Careportal (Temp Targets only) | Available for all *Trio* versions | +| *Nightscout* OpenAPS pill display | *Nightscout* 15.0.2 or newer with *Trio* 0.5.x or newer | + +With *Trio* 0.2.x, *LoopFollow* only supports Temp Targets via the *Nightscout* Careportal, which requires a token with `careportal` access. Once updated to *Trio* 0.5.x or newer, the full *Trio* Remote Control options are available. + +For those following a looper using *Trio* 0.2.x, the only remote setting option in *LoopFollow* is *Nightscout* (Careportal). With this selection: + +* The *LoopFollow* phone sends commands to *Nightscout*, which then forwards commands to the *Trio* phone +* The *Nightscout* display will be updated first +* If there is an issue sending the Careportal request, it might not reach the *Trio* phone +* After the next *Nightscout* download, *LoopFollow* display will reflect whether commands completed the full round trip + +### APNS Keys Do Not Need to Be in Nightscout + +With *LoopFollow* 3.2 and newer, the APNS credentials are entered directly in the *LoopFollow* app. They do **not** need to be embedded in the *Nightscout* site for remote control to work. This simplifies *Nightscout* configuration, especially for those using a paid *Nightscout* service. + +The APNS credentials only need to be in *Nightscout* if you also use *Nightscout* Careportal or the *LoopCaregiver* app to send remote commands. + diff --git a/docs/index.md b/docs/index.md index 2bce6ee..482a6c8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -28,13 +28,11 @@ An example of the Home screen for *LoopFollow* v5.0 and newer is shown in the gr The toolbar at the bottom of the Home and Menu screens has 4 user-configurable icons in addition to the `Menu` icon. The icons shown in the graphic above are Home, Alarms, Snoozer and Remote. -#### New Features -!!! tip "" - New with *LoopFollow* v5.0: - - * [Menu Screen](setup/lf-setup.md#menu-screen){: target="_blank"} - * [Treatments](setup/lf-features.md#treatments){: target="_blank"} - * [Statistics](setup/lf-features.md#statistics){: target="_blank"} +#### New Features + +The released version of *LoopFollow* is 6.1.0 and is built with the `main` branch. + +See [New Feature Hightlights](faqs/lf-history.md#new-feature-highlights){: target="_blank" } - - - diff --git a/docs/privacy/lf-telemetry.md b/docs/privacy/lf-telemetry.md new file mode 100644 index 0000000..b880803 --- /dev/null +++ b/docs/privacy/lf-telemetry.md @@ -0,0 +1,109 @@ +--- +## *LoopFollow* Anonymous Telemetry + +*LoopFollow* can send a small anonymous report once a day so the +maintainers can see which app and *iOS* versions are still in active use. +The data helps make decisions like when it's safe to drop support for +older *iOS* releases. **No glucose data, no credentials, no logs leave +your device.** + +This is opt-out: the first time the app comes to the foreground after +installing or updating to a version that supports telemetry, you'll see +a one-time prompt to choose Yes or No. You can change your mind any +time in *Settings* > *General Settings* > *Diagnostics*. + +- - - + +## What is sent + +A typical check-in looks like this — you can see the exact JSON your +own install would send under *Settings* > *General Settings* > +*Diagnostics* > *What's sent*. + +| Field | Example | Notes | +|:--|:--|:--| +| App version | `6.0.7` | | +| Build date | `2026-04-15` | | +| TestFlight or not | `true` / `false` | Whether the install came from TestFlight or a local Xcode build. | +| Instance | `LoopFollow` / `LoopFollow_2` / ... | If you have multiple *LoopFollow* installs side by side, this distinguishes them. | +| IDFV | Apple per-vendor UUID | Apple's `identifierForVendor` — opaque, scoped to *LoopFollow*'s bundle prefix, and resets when all of this developer's apps are removed from the device. Combined with the *Instance* field above, identifies a specific install. | +| Device | `iPhone15,2` | Apple's hardware identifier (not the marketing name). | +| Platform | `iOS` / `iPadOS` / `macCatalyst` | | +| iOS version | `17.5` | | +| Following app | `Loop` / `Trio` / ... | Which closed-loop app *LoopFollow* is following, if known. Field is omitted when not yet detected. | +| Uses *Dexcom* | `true` / `false` | Whether *Dexcom Share* is configured. **No username or password.** | +| Uses *Nightscout* | `true` / `false` | Whether a *Nightscout* site is configured. **No URL or API token.** | +| Background-refresh method | `Silent Tune` | Which background-refresh strategy is selected. | +| Display units | `mg/dL` / `mmol/L` | | +| Remote-command type | `none` / `Loop APNS` / ... | Which remote-command path is configured. | +| Appearance | `dark` / `light` / `system` | | +| Calendar / Contact integrations | `true` / `false` | Whether those features are turned on. | +| Cold launches in past 7 days | `12` | A count of process restarts; high values can flag stability issues. | + +The server adds two fields when it stores each report: + +* `receivedAt` — the time the report was received. +* `dayBucket` — a date label (e.g. `2026-04-29`) used to deduplicate. + +- - - + +## What is **not** sent + +Specifically and explicitly: + +* No glucose values, insulin or carb data, treatments, or any other health data. +* No *Nightscout* URL or API token. Only a yes/no flag for whether *Nightscout* is configured. +* No *Dexcom* credentials. Only a yes/no flag for whether *Dexcom Share* is configured. +* No time zone. +* No remote-command secrets, no APNS keys. +* No GPS or location data. +* **No logs.** Logs are never sent automatically. The existing *Settings* > *Logs* sharing flow is unchanged and only triggered by you. + +The receiving server also does not log your IP address — the *NGINX* +edge zeroes the last octet of *IPv4* addresses and only retains the +`/64` prefix of *IPv6* addresses before anything is written to disk. + +- - - + +## Where it goes + +Reports are sent over *HTTPS* to **`https://lf.bjorkert.se/api/telemetry/checkin`**, +which is self-hosted by the maintainer. There is no third-party +analytics service involved. + +- - - + +## How to opt out + +The toggle lives at *Settings* > *General Settings* > *Diagnostics* > +*Send anonymous usage stats*. Turning it off is immediate and persistent. + +The *Diagnostics* section also has: + +* *What's sent* — renders the exact *JSON* your install would send right now, + with a *Copy* button if you want to inspect it more closely. +* *Privacy* — a shorter in-app version of this page. + +- - - + +## How often + +A check-in is sent at most once every 24 hours, or once after a new +build is installed (whichever fires first). It runs in the background +while the app is active or refreshing in the background — *LoopFollow* +schedules the next check-in based on when the last one was actually +sent, so a relaunch a few hours after the previous send simply waits +out the remainder of the 24 hours. + +If a send fails (network error, the server is unreachable, etc.) the +last-sent timestamp is not updated, so the next scheduled check tries +again. + +- - - + +## For the curious + +The *iOS* implementation lives at +[`LoopFollow/Helpers/Telemetry.swift`](https://github.com/loopandlearn/LoopFollow/blob/dev/LoopFollow/Helpers/Telemetry.swift) +on *GitHub*. The receiving server is a small *.NET* service in a +private repository on the maintainer's account. diff --git a/docs/remote/img/lf-lrc-credentials.png b/docs/remote/img/lf-lrc-credentials.png index 5756c42..f14b7a1 100644 Binary files a/docs/remote/img/lf-lrc-credentials.png and b/docs/remote/img/lf-lrc-credentials.png differ diff --git a/docs/remote/remote-control-loop.md b/docs/remote/remote-control-loop.md index 8311c09..12246ad 100644 --- a/docs/remote/remote-control-loop.md +++ b/docs/remote/remote-control-loop.md @@ -222,16 +222,20 @@ These guardrails are for sending remote commands with *LoopFollow*. There are se ### Credentials to Enable Loop Remote Control -When you select *Loop* Remote Control as the Remote Type in the *LoopFollow* app, you must fill in the (1) [Developer Team ID](#developer-team-id), (2) [APNS Key ID](#apns-key-id) and (3) [APNS Key](#apns-key). +When you select *Loop* Remote Control as the Remote Type in the *LoopFollow* app, you must fill in the following under *LoopFollow* Settings, APN and *LoopFollow* Settings, Remote Control. -![remote lrc settings ](img/lf-lrc-credentials.png){width="300"} -{align="center"} +* Settings: APN + * [APNS Key ID](#apns-key-id) + * [APNS Key](#apns-key) -### Developer Team ID +* Settings: Remote Control -This is the *Apple* Developer ID for whoever created the APNS Key. The developer must be the same as the developer who built the *Loop* app. + * [Developer Team ID](#developer-team-id) + * [QR Code URL](#qr-code-url) + * [Environment Production](#environment-production) -Note that the *Nightscout* app and the *LoopFollow* app do not need to be built by this developer. It is only the *Loop* app that has this requirement. +![remote lrc settings ](img/lf-lrc-credentials.png){width="700"} +{align="center"} ### APNS Key ID @@ -249,6 +253,12 @@ If you previously configured remote control with the *Loop* app, you already hav If you have never created an APNS (or have lost the credentials), follow the directions in [New APNS](remote-control-overview.md#new-apns){: target="_blank" } and copy the APNS Key into *LoopFollow* and save the value in your Secrets Reference file. +### Developer Team ID + +This is the *Apple* Developer ID for whoever created the APNS Key. The developer must be the same as the developer who built the *Loop* app. + +Note that the *Nightscout* app and the *LoopFollow* app do not need to be built by this developer. It is only the *Loop* app that has this requirement. + ### QR Code URL This provides the One-Time Password needed for the *Loop* app to accept the APNS input as valid. diff --git a/docs/remote/remote-control-nightscout.md b/docs/remote/remote-control-nightscout.md index 2f5b415..9638434 100644 --- a/docs/remote/remote-control-nightscout.md +++ b/docs/remote/remote-control-nightscout.md @@ -1,5 +1,8 @@ ## Remote Control with Nightscout +!!! warning "Nightscout Remote Control will be removed" + With the update of Trio main to version 0.7.0, Remote Control with Nightscout is no longer needed and will be removed as an option from *LoopFollow*. + You must configure *LoopFollow* and the *Nightscout* URL to use remote commands. Please review the [Remote Control Overview](remote-control-overview.md) if terms on this page are not familiar. diff --git a/docs/remote/remote-control-overview.md b/docs/remote/remote-control-overview.md index 9d05439..f19add2 100644 --- a/docs/remote/remote-control-overview.md +++ b/docs/remote/remote-control-overview.md @@ -10,12 +10,6 @@ > The return APNS message is only available for a meal or bolus entry. - -!!! warning "Browser Build Update" - If you use Browser Build and your current build is older than v4.0.0, follow the one-time updates needed to transition from *LoopFollow* v3.x: - - * [Update from *LoopFollow* v3,x](../build/lf-browser-build.md#update-from-loopfollow-v3x){: target="_blank" } - !!! important "Breaking Change: Trio Remote Command Users" Trio users must have matching code for LoopFollow and Trio. @@ -28,7 +22,7 @@ ## *LoopFollow* Remote Options -For a full summary of version requirements and feature history, see [Version Compatibility](../faqs/lf-faqs.md#version-compatibility){: target="_blank" }. +For a full summary of version requirements and feature history, see [Version Compatibility](../faqs/lf-history.md#version-compatibility){: target="_blank" }. The graphic below shows the Remote Settings screen for *LoopFollow*. You must first enter a *Nightscout* URL before any remote options are offered and then only the option suitable for that *Nightscout* site can be selected. @@ -124,8 +118,8 @@ When you configured APNS for the *Loop* app and saved information in your *Night Note that the `LOOP_DEVELOPER_TEAM_ID` is the Apple Developer ID used to build the *Loop* app. -* When using *LoopFollow* 3.2 or newer, the addition of those `config` variables in *Nightscout* is only required to support sending remote commands to the *Loop* app from *Nightscout* `Careportal` and from *LoopCaregiver*. -* With *LoopFollow* 3.2 and newer versions, the *LoopFollow* Remote Control features are available for both the *Loop* and *Trio* apps when the APNS credentials are entered in the *LoopFollow* app, along with other specific credentials for each app. +* When using *LoopFollow* for remote control, the addition of those `config` variables in *Nightscout* is only required to support sending remote commands to the *Loop* app from *Nightscout* `Careportal` and from *LoopCaregiver*. +* The *LoopFollow* Remote Control features are available for both the *Loop* and *Trio* apps when the APNS credentials are entered in the *LoopFollow* app in the [APN Settings](../setup/lf-setup.md#apn){: target="_blank" }, along with other specific credentials for each app under [Remote Settings](../setup/lf-setup.md#remote){: target="_blank" }. If you are configuring for *Trio* remote control with *LoopFollow*, you do not need to enter the Apple Developer ID explicitly because it is included in the information *Trio* uploads to *Nightscout*. @@ -133,7 +127,7 @@ If you are configuring for *Trio* remote control with *LoopFollow*, you do not n When using *Trio*, you do not need to add the config vars to *Nightscout* that are required for *Loop* remote control from *Nightscout* `Careportal` and *LoopCaregiver*. If you already have them, it doesn't hurt anything, but you do not need to add them to use remote control with *Trio*. -With *LoopFollow* 3.2 and newer, the config vars will not need to be embedded in *Nightscout* for *Loop* Remote Control from *LoopFollow*, although they are still needed to issue remote commands with the *Nightscout* *Careportal* and the *LoopCaregiver* app. +When using *Loop* Remote Control from *LoopFollow*, the config vars do not need to be embedded in *Nightscout*; although they are still needed to issue remote commands with the *Nightscout* *Careportal* and the *LoopCaregiver* app. If you do not have APNS credentials, you need to create a key and grant it access to the  Apple Push Notification Service (APNS). @@ -189,6 +183,10 @@ If you do not have APNS credentials, you need to create a key and grant it acces Depending on the selection you made, continue to one of these pages for more information on how to configure *LoopFollow* for your desired remote control option. +The APN credentials are entered in *LoopFollow* under Settings in the APN row. + +The other remote credential are entered as described in the appropriate link. + * [*Loop* Remote Control](remote-control-loop.md) * [*Trio* Remote Control](remote-control-trio.md) * [*Nightscout* Remote Control](remote-control-nightscout.md) (`Trio 0.2.x only`) diff --git a/docs/remote/remote-control-trio.md b/docs/remote/remote-control-trio.md index 05cdac0..79bc119 100644 --- a/docs/remote/remote-control-trio.md +++ b/docs/remote/remote-control-trio.md @@ -24,8 +24,6 @@ Starting with *LoopFollow* v4.0 and *Trio* v0.6, users of remote control are pro **Question: If I was using Trio / LoopFollow remote control do I need to change my configuration parameters?**: No, the parameters you already set up continue to work. **BUT** you need to update the *LoopFollow* Identifiers if you use Browser Build. - * [Update from *LoopFollow* v3,x](../build/lf-browser-build.md#update-from-loopfollow-v3x){: target="_blank" } - ??? question "How does this differ from *Trio* 0.2.x? (Click to Open/Close)" *Trio* can use *Nightscout* Careportal to enter `Carb Correction`, and start and cancel `Temporary Target`. @@ -120,6 +118,18 @@ Remote control must be enabled on the *Trio* phone or no remote information is a > You can search for this screen in *Trio* settings or go through the sequence: Trio, Settings, Features, Remote Control. + +When you select *Trio* Remote Control as the Remote Type in the *LoopFollow* app, you must fill in the following under *LoopFollow* Settings, APN and *LoopFollow* Settings, Remote Control. + +* Settings: APN + * [APNS Key ID](#apns-key-id) + * [APNS Key](#apns-key) + +* Settings: Remote Control + + * [User](#user) + * [Shared Secret](#shared-secret) + ### Shared Secret Once Remote Control is enabled, a Shared Secret is available. This is only used if you want to use *Trio* Remote Control with *LoopFollow*. @@ -213,7 +223,9 @@ This is the unique shared secret that can be generated or entered into the *Trio ### APNS Credentials -When you select *Trio* Remote Control as the Remote Type in the *LoopFollow* app, you must fill in the (1) [Shared Secret](#shared-secret), (2) [APNS Key ID](#apns-key-id) and (3) [APNS Key](#apns-key). +When you select *Trio* Remote Control as the Remote Type in the *LoopFollow* app, you must fill in the [Shared Secret](#shared-secret) on the *LoopFollow* Settings, Remote screen and the [APNS Key ID](#apns-key-id) and [APNS Key](#apns-key) on the *LoopFollow* Settings, APN screen. + +> The graphics below are out of date. As of version 6.0.0, the APN entries are in their own setting location. | Default Remote Settings | Configured Remote Settings | |:-:|:-:| diff --git a/docs/setup/img/lf-units-and-metrics.png b/docs/setup/img/lf-units-and-metrics.png new file mode 100644 index 0000000..1ff453d Binary files /dev/null and b/docs/setup/img/lf-units-and-metrics.png differ diff --git a/docs/setup/lf-setup.md b/docs/setup/lf-setup.md index 2817c93..e9be940 100644 --- a/docs/setup/lf-setup.md +++ b/docs/setup/lf-setup.md @@ -45,7 +45,7 @@ Once you’ve configured your settings, your Home screen will look as beautiful ## Toolbar -The toolbar (tab bar) at the bottom of the Home and Menu screens is configurable using [Settings: Tab](#tab). Four icons are displayed at a time — choose from the options below. The features that can be selected are: +The toolbar (tab bar) at the bottom of the Home and Menu screens is configurable using [Settings: Tabs](#tabs). Four icons are displayed at a time — choose from the options below. The features that can be selected are: | Name | Description | |:--|:--| @@ -114,7 +114,7 @@ The type of token depends on the type of remote control desired. The table below indicates the minimum token access for each type of remote control available with *LoopFollow*. When you enter your credentials, *LoopFollow* tries to reach the site and then provides the status. -For a full summary of version requirements for *Loop* and *Trio* remote control, see [Version Compatibility](../faqs/lf-faqs.md#version-compatibility){: target="_blank" }. +For a full summary of version requirements for *Loop* and *Trio* remote control, see [Version Compatibility](../faqs/lf-history.md#version-compatibility){: target="_blank" }. | *LoopFollow* Remote Type | Minimum Token Access| *LoopFollow* Status | |:--|:--|:--| @@ -152,7 +152,8 @@ There are a number of display options the user can configure to customize the ap | General | Adjust settings that affect the general app behavior | [General](#general) | | Graph | Adjust settings that affect the plots on the Home screen | [Graph](#graph) | | Information Display | Select which items to display in the Home screen Information Table
Requires Nightscout Data Source | [Information Display](#information-display) | -| Tab | Configure the toolbar displayed on the Home and Menu screens |[Tab](#tab) | +| Units and Metrics | Choose glucose unit, Time in Range mode, and how glycemic and variability metrics are reported | [Units and Metrics](#units-and-metrics) | +| Tabs | Configure the toolbar displayed on the Home and Menu screens |[Tabs](#tabs) | ### App Settings @@ -165,6 +166,8 @@ There are a number of application settings the user can configure. These are sum |:--|:--|:--| | Background Refresh | Configure to keep *LoopFollow* always alive or allow it to sleep and thus conserve phone battery | [Background Refresh](lf-features.md#background-refresh){: target="_blank" } | | Import/Export | Share configurations among Caregiver phones | [Import/Export](#importexport) | +| APN | Enter Apple Push Notification Credentials for Remote Control and Live Activity | [APN](#apn)| +| Live Activity | Enable and Configure Live Activity | [Live Activity](#live-activity) | | Remote | Configure for secure remote control
Requires Nightscout Data Source | [Remote Control Overview](../remote/remote-control-overview.md){: target="_blank" } | ### Other Settings @@ -192,7 +195,6 @@ These settings are accessed through the General row in the Settings screen. | Persistent Notification | Typically disabled
When enabled, glucose is reported with every update | | Appearance | Choose Light, Dark or System for appearance | | Display Stats | When enabled, statistics for the last 24 hours are displayed on Home screen | -| Use IFCC A1C | When enabled, display estimated A1C using mmol/mol units | | Display Small Graph | When enabled, a full history graph is displayed under the main plot. The history is determined by the Number of Days Back chosen in the Graph screen | | Color BG Text | When enabled, use colors to highlight low, in-range and high values | | Keep Screen Active | When enabled, override the auto-lock setting
This works whether the phone is plugged in or not, so be sure to lock screen manually| @@ -222,8 +224,6 @@ These settings are accessed through the Graph row in the Settings screen. | Hours of Prediction | Select prediction extent on main plot | | Min Basal | clamp the minimum displayed range for basal rate plot | | Min BG Scale | clamp the minimum displayed range for glucose scale | -| Low BG Line | Choose glucose level to display as low | -| High BG Line | Choose glucose level to display as high | | Show Days Back | Affects the small graph display and adjusts fetch from Nightscout Site | ### Information Display @@ -261,16 +261,86 @@ These items can be chosen for display on the Home screen. A Nightscout Site is r | TDD | Total Daily Dose in the last 24 hours | `Trio` | | IAGE | Insulin Age | Both | -### Tab +### Units and Metrics + +These settings are accessed through the *Units and Metrics* row in the Settings screen. They control how glucose is displayed throughout the app, the range used for Time in Range, and how long-term glycemic and variability metrics are reported. + +![Units and Metrics screen](img/lf-units-and-metrics.png){width="300"} +{align="center"} + +#### Glucose + +Selects the unit used everywhere in *LoopFollow* for glucose values, target ranges and graphs. + +| Option | Example reading | +|:--|:--| +| `mg/dL` | `120 mg/dL` | +| `mmol/L` | `6.7 mmol/L` | + +The same reading is shown in either unit — switching the unit does not change any underlying data. + +#### Range + +Selects the Low and High thresholds that define your target interval. The percentage of readings within this interval is shown on the Home screen. + +| Option | Name | Low – High | +|:--|:--|:--| +| `TIR` | Time in Range | 70 – 180 mg/dL (3.9 – 10.0 mmol/L) | +| `TITR` | Time in Tighter Range | 70 – 140 mg/dL (3.9 – 7.8 mmol/L) | +| `Custom` | — | Values you enter below | + +When `Custom` is selected, two extra rows appear — **Low** and **High** — entered in the glucose unit you chose above. These same Low and High values also drive the Low and High BG lines drawn on the main graph. + +#### Glycemic Metrics + +A long-term estimate of average glycemia, computed from the average glucose for the displayed period. + +| Metric | What it is | +|:--|:--| +| `eHbA1c` | Estimated HbA1c, derived from average glucose using the ADAG-style formula | +| `GMI` | Glucose Management Indicator, derived from average CGM glucose | + +Either metric can be reported in: + +* `%` — for example `7.0 %` +* `mmol/mol` — for example `53 mmol/mol` + +Example values for three different average glucose levels: + +| Mean glucose | eHbA1c (%) | GMI (%) | eHbA1c (mmol/mol) | GMI (mmol/mol) | +|:--|:--|:--|:--|:--| +| 120 mg/dL / 6.7 mmol/L | 5.8 | 6.2 | 40 | 44 | +| 154 mg/dL / 8.6 mmol/L | 7.0 | 7.0 | 53 | 53 | +| 180 mg/dL / 10.0 mmol/L | 7.9 | 7.6 | 63 | 60 | + +#### Variability + +Selects how variability of glucose is reported. + +| Option | What it is | Example | +|:--|:--|:--| +| `Std Dev` | Standard deviation of glucose, in the selected glucose unit | `40 mg/dL` or `2.2 mmol/L` | +| `CV` | Coefficient of Variation — standard deviation divided by mean glucose, expressed as a percent | `35 %` | + +CV is reported as a percentage and is independent of the glucose unit. + +### Tabs The user can modify which icons are displayed in the task bar at the bottom of the screen. -In the Settings screen, select Tab. Drag any of the options up or down to your preferred configuration. +In the Settings screen, select Tabs. Drag any of the options up or down to your preferred configuration. ![tab customization](img/lf-tab-configuration.png){width=400} {align="center"} +### Background Refresh + +There are several options for keeping *LoopFollow* up to date. If you rely on *LoopFollow* Alarms or Live Activity, you must configure a Background Refresh setting. + +For more information, see [Background Refresh](lf-features.md#background-refresh){: target="_blank" }. + + ### Import/Export When setting up LoopFollow for another caregiver that will use some or all of the same configuration settings, you can export or scan a QR code to transfer settings between phones. @@ -323,6 +393,38 @@ When the QR code is accepted, you will see a screen indicating what type of sett ![Import confirmation](img/lf-import-confirm.svg){width="600"} {align=center} +### APN + +You must create and enter Apple Push Notification (APN) credentials if you want to make use of several features offered by *LoopFollow*. If you choose not to use these features, no credentials are required. + +Features which need APN: + +* Live Activity +* Remote Control + +Details about creating APN credentials are found in the [Remote Control Overview](../remote/remote-control-overview.md#apple-push-notifications-system-apns){: target="_blank" } + +### Live Activity + +The Live Activity feature for *LoopFollow* has the following requirements or it will not update reliably and should not be used. + +* Background Refresh must be enabled + * Typically caregivers use Silent Tunes to keep the app alive in the background + * If background refresh is not working, the app notifies the user and they should assume Live Activity is also not refreshing +* APN Credentials must be entered +* Live Activity must be enabled + +#### Live Activity Options + +The Live Activity screen allows the following selections: + +* Enable Live Activity (slider) +* Restart Live Activity (manual button if needed) +* Grid Slots for Live Activity + * There are 4 slots available + * There are over 20 options to choose from for the 4 slots + * The options are the same as are found in the [Information Display](#information-display) + ### Remote Detailed instructions for configuring a phone for remote control are found on the [Remote Control Overview](../remote/remote-control-overview.md){: target="_blank" } page. diff --git a/mkdocs.yml b/mkdocs.yml index ea07f9d..b95d215 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -196,8 +196,11 @@ nav: - Build: - 'LoopFollow Build': 'build/build-options.md' - 'LoopFollow Browser Build': 'build/lf-browser-build.md' -- FAQs: - - 'LoopFollow FAQs': 'faqs/lf-faqs.md' +- Privacy: + - 'Anonymous Telemetry': 'privacy/lf-telemetry.md' +- Reference: + - 'FAQs': 'faqs/lf-faqs.md' + - 'History': 'faqs/lf-history.md' - 'Glossary': faqs/glossary.md - Translate: - 'Translation': 'translate.md'