From fe4ff946d76150c3c748c4d5c440226a6e122cd9 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 08:53:38 -0700 Subject: [PATCH 1/9] fix typo --- docs/loop-3/features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/loop-3/features.md b/docs/loop-3/features.md index e465cb941b0..3c04efec849 100644 --- a/docs/loop-3/features.md +++ b/docs/loop-3/features.md @@ -44,7 +44,7 @@ Two algorithm experiments are now available in the *Loop* app (version 3.4.0 or * The "switcher" patch is no longer compatible * The GBPA feature is intended to replace the functionality of that older customization and is controlled completely inside the *Loop* app -_Glucose Based Partial Application_ is only used when _Automatic Bolus_ (AB) is selected for _Temp Basal Only_ _Dosing Strategy_ +_Glucose Based Partial Application_ is only used when _Automatic Bolus_ (AB) is selected for _Dosing Strategy_ * This modification **does not affect the recommended dose**, only how quickly the recommended dose is automatically delivered From a1981d0f9bffbd28ee09e6b81f24855b15163042 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 08:53:50 -0700 Subject: [PATCH 2/9] update for version 3.4.x --- docs/version/code-custom-edits.md | 84 ++++++++++++------------------- 1 file changed, 33 insertions(+), 51 deletions(-) diff --git a/docs/version/code-custom-edits.md b/docs/version/code-custom-edits.md index a4a38a1cccb..2c9eaf87d99 100644 --- a/docs/version/code-custom-edits.md +++ b/docs/version/code-custom-edits.md @@ -65,22 +65,11 @@ To search using the `Key_Phrase` (see graphic above for an example): * A copy button is available when you hover your mouse in the right-hand side of the block below the title `Key_Phrase`; click on it to copy the phrase into your paste buffer -* You can paste this into the search function of the tool you are using if desired (warning, you may have to hit back-space to remove a return character from the pasted text)

+* You can paste this into the search function of the tool you are using if desired (warning, you may have to hit back-space to remove a return character from the pasted text) * Alternatively, navigate to the required file using Module, Folder, File and line number ### Module, Folder, File -!!! tip "Stability Information Added" - Some customizations have not changed for a very long time (stable since 2.2.x days). - - It was not until version 3.2.3 that we started adding a notation as to when the required customization code changed. - - For those using the Browser Build method: - - * If you had a customization working for 3.2.3 it will continue to work with 3.4.0 unless it is one listed in the [Not Stable List](#not-stable-list) - * However, because the `build_loop.yml` file is significantly different for version 3.4.0, you will need to save your "customization lines" from the `build_loop.yml` file in the 3.2.3 version of your `fork` and add them to a new location for the 3.4.0 version of `build_loop.yml` in your `fork` - * If one of your personalized customizations is in the [Not Stable List](#not-stable-list) you will need to create a new version [Custom Edits with Browser: Code Updates](../browser/edit-browser.md#code-updates){: target="_blank" } - Each customization provides the Module, Folder and File bullet below the key phrase. * Module: Loop @@ -88,7 +77,7 @@ Each customization provides the Module, Folder and File bullet below the key phr * File: filename.swift, line number(s) * Stable: "Yes" or "Changed on date: Version #" -The customizations below show the original line of code that you will be changing. +Each customization will show the original line of code that you will be changing. There may be a figure illustrating the change. @@ -97,6 +86,25 @@ Below the figure, the original, and in some cases, the modified code will be dis * Sometimes that line is long and you may need to use the scroll bar to see the entire line in LoopDocs * In most cases, an example customization is shown to assist you in deciding how to edit the line to meet your needs +### What does `Stable` mean? + +The line starting with `Stable` indicates the last time the code associated with a given modification was changed. For most of these customizations, you will see `Stable: Yes`. For a few, you will see the date and version number at which the customization was modified. + +If the customization you used for an earlier version changed since the last time you built, it might be on the [`Not Stable List`](#not-stable-list), then you will need to use the updated 3.4.x version. If the customization indicates `Stable: Yes`, then you do not need to modify the process for 3.4.x. + +When the development version has significant differences from the released version, the customization may also differ. With the release of version 3.4.x, all customizations are identical for `main` and `dev`. Older versions of the customization are now removed from this page. + +??? tip "More Information about `Stable` (Click to open/close)" + Some customizations have not changed for a very long time (stable since 2.2.x days). + + It was not until version 3.2.3 that we started adding a notation as to when the required customization code changed. + + For those using the Browser Build method: + + * If you had a customization working for 3.2.3 it will continue to work with 3.4.0 unless it is one listed in the [Not Stable List](#not-stable-list) + * However, because the `build_loop.yml` file is significantly different for version 3.4.x, you will need to save your "customization lines" from the `build_loop.yml` file in the 3.2.3 version of your `fork` and add them to a new location for the 3.4.x version of `build_loop.yml` in your `fork` + * If one of your personalized customizations is in the [Not Stable List](#not-stable-list) you will need to create a new version when upgrading from 3.2.x to 3.4.x [Custom Edits with Browser: Code Updates](../browser/edit-browser.md#code-updates){: target="_blank" } + #### Not Stable List This list indicates personalized customization that differ between 3.2.3 and 3.4.x: @@ -111,7 +119,9 @@ This list indicates personalized customization that differ between 3.2.3 and 3.4 ![img/carb_screen.png](img/carb_screen.png){width="200"} {align="center"} -Loop’s default carb absorption times are based on the high, medium, and low glycemic index absorption curves presented in *Think Like A Pancreas* by Gary Scheiner. In prior versions of the *Loop* app, for example version 2.2.x, the lollipop (fast) icon was set for 2 hours, taco (medium) icon for 3 hours, and pizza (slow) icon for 4 hours. This is modified for `the *Loop* app` to 30 minutes, 3 hours and 5 hours respectively. Some people prefer different values. +In prior versions of the *Loop* app, for example version 2.2.x, the lollipop (fast) icon was set for 2 hours, taco (medium) icon for 3 hours, and pizza (slow) icon for 4 hours. This is modified for `the *Loop* app` to 30 minutes, 3 hours and 5 hours respectively. Some people prefer different values. + +If you want to change this to 2, 3 and 5 hours - that is available as a standard customization using the [*Loop and Learn*: Customization Select Script](https://www.loopandlearn.org/custom-code/#custom-list){: target="_blank" } ??? question "Do you want to know more? (Click to open/close)" The developers did this because they expect fast to only be used for rapid-acting low treatments. The medium and slow values are for moderate and higher-fat or large meals. @@ -171,6 +181,8 @@ Because the automatic bolus amount is also limited by the partial application fa If you are mostly happy with the Dosing Strategy of Automatic Bolus but wish it delivered more or less insulin during every Loop interval, then this customization is for you. +> With the release of version 3.4.x, there is another option. If you choose to enable [Glucose Based Partial Application](../loop-3/features.md#glucose-based-partial-application-gbpa){: target="_blank" }, then the percent of the recommended bolus automatically provided adjusts from 20% to 80% depending on your glucose level. You may decide this works well enough for you that this customization is no longer desired. Please give this new feature a try. + This customization changes the percent of the recommended bolus used for automatic delivery. The method for calculating that recommendation is not changed by this modification. The default value is 40% (0.4). It is recommended you take small changes of 0.1 at a time. Once you modify it once and try it out for a while, it’s easy to go back and change it again. **Change just the number and double check that the value is less than 1.** @@ -241,9 +253,8 @@ Guardrail(absoluteBounds: * Line: 26 for correctionRange * Stable: Changed on 2024 Feb 19: Version 3.4.0 -#### Version 3.4.0 - -This update, merged on 2024 Feb 19 was part of a larger fix to a problem when glucose units were mmol/L. The user could not select two values (min and max) that were the same and equal to the reported absolute range. This was a rounding problem going between mmol/L and mg/dL that has now been resolved. Part of the resolution was to modify the mg/dL absolute ranges to preserve the previously reported mmol/L absolute ranges. +??? info "Update Details (Click to open/close)" + This update, merged on 2024 Feb 19 was part of a larger fix to a problem when glucose units were mmol/L. The user could not select two values (min and max) that were the same and equal to the reported absolute range. This was a rounding problem going between mmol/L and mg/dL that has now been resolved. Part of the resolution was to modify the mg/dL absolute ranges to preserve the previously reported mmol/L absolute ranges. _Code Before Modification_ @@ -257,20 +268,6 @@ Modify the absoluteBounds to change the allowed ranges or the recommendedBounds Loop automatically converts from mg/dL to mmol/L. So you must enter values reasonable for mg/dL (18 times higher than for mmol/L). -#### Version from 3.2.3 - -_Code Before Modification_ - - static let suspendThreshold = Guardrail(absoluteBounds: 67...110, recommendedBounds: 74...80, unit: .milligramsPerDeciliter, startingSuggestion: 80) - -and - - static let correctionRange = Guardrail(absoluteBounds: 87...180, recommendedBounds: 100...115, unit: .milligramsPerDeciliter, startingSuggestion: 100) - -Modify the absoluteBounds to change the allowed ranges or the recommendedBounds to change the color of the numbers on the picker wheel. - -Loop automatically converts from mg/dL to mmol/L. So you must enter values reasonable for mg/dL (18 times higher than for mmol/L). - ### Modify Guardrails for Insulin Sensitivity Factor (ISF) Similar to the instructions for glucose guardrails above, but use this `Key_Phrase` and modify the absoluteBounds row, next line. @@ -310,8 +307,6 @@ The *Loop* app limits to 1 hour the amount of time in the future that carbs can * File: LoopConstants.swift, Line 28 * Stable: Changed on 2023 May 29 through 2023 Aug 20: Version 3.4.0 -#### Version 3.4.0 - ``` { .txt .copy title="Key_Phrase" } static let maxCarbEntryFutureTime ``` @@ -324,23 +319,6 @@ _Code Before Modification_ Change the maxCarbEntryFutureTime to the number of hours in the future you desire. Remember that Loop may increase insulin dosing for future carbs - make sure that they actually arrive. -#### Version from 3.2.3 - -* Folder: Loop/Loop/View Controllers -* File: CarbEntryViewController.swift, Line 438 - -``` { .txt .copy title="Key_Phrase" } -cell.datePicker.maximumDate = date.addingTimeInterval -``` - -Default shown below (for maximum and minimum): - -_Code Before Modification_ - - cell.datePicker.maximumDate = date.addingTimeInterval(.hours(1)) - -Change the maximumDate to the number of hours in the future you desire. Remember that Loop may increase insulin dosing for future carbs - make sure that they actually arrive. - ### Adjust the Watch Crown Sensitivity The rate of change of the carb and bolus entry pickers when using the digital crown can be altered as can the rotation required to confirm a bolus on the watch. If you are running an older series watch - you may want to make these customizations. When I switched from Series 3 to Series 7 watch - it was amazing. I got a graph on the main watch screen I didn't even know existed and the bolus acceptance was a breeze! @@ -386,7 +364,7 @@ This key phrase will indicate three different files in the same folder as shown An expiration notification feature has been added to Loop. You get a notification when you open the Loop app to alert you that the expiration is approaching. -* Read [Loop App Expiration Notification](../operation/features/notifications.md#loop-app-expiration-notification) to see the expiration reminder +* Read [Loop App Expiration Notification](../operation/features/notifications.md#loop-app-expiration-notification){: target="_blank" } to see the expiration reminder If you prefer a different notification time and frequency, there are two lines you can modify: @@ -504,6 +482,10 @@ And now you'll be the proud new owner of a custom Loop icon. ## Custom Edits Optional +The customizations listed below are incorporated into the [*Loop and Learn*: Customization Select Script](https://www.loopandlearn.org/custom-code){: target="_blank" }. + +You can use that script or make your own edit by following these directions. + ### Disable Authentication for Bolusing Depending on your iPhone Settings and model, you may have Face ID or Touch ID enabled. Those security features will also be used to authenticate bolus delivery in Loop. You can choose to disable authentication (i.e., not require Face ID, Touch ID, or passcode for bolusing) through the following code customization. From dc347229e15f245f6c58e62353e6ec17db67ad18 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 09:13:15 -0700 Subject: [PATCH 3/9] add some header and more details for build time flags --- docs/version/build-time-flag.md | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/version/build-time-flag.md b/docs/version/build-time-flag.md index 69c104404df..29542d4a449 100644 --- a/docs/version/build-time-flag.md +++ b/docs/version/build-time-flag.md @@ -1,17 +1,21 @@ ## Overview -Build-time features are not available with Loop 2.2.x. - With Loop 3, some features are enabled or disabled by default but can be modified by adding a "flag" in the LoopConfigOverride.xcconfig file. -If you use Build with Browser, these build-time features can be added to your copy of the LoopConfigOverride.xcconfig file. Use the pencil icon in that file on your copy of LoopWorkspace and then commit the change. +## Modify the `Build Time Flags` -If you use the Build with *Mac* Method, this is the same file used to automatically sign all your targets. You can edit the version in your LoopWorkspace folder (it shows up as the top item in the Xcode folder view) - or - if you use the build script, you can edit the copy found in ~/Downloads/BuildLoop after the first time you use the script. For that second case, the "flags" you add in ~/Downloads/BuildLoop/LoopConfigOverride.xcconfig are applied to all downloads created with the script. +The `Build Time Flags` are available for both build methods: -These flags are always upper case with underscore separating words for clarity, for example `MY_EXAMPLE_FLAG`. If you have more than one flag, they are separated by a space. Do not enter a line break between selections; in other words, do not hit return or enter. Xcode will automatically word-wrap the line for clarity. All values need to be on a single line. +* **Build with Browser** + * Edit the LoopConfigOverride.xcconfig file in your fork + * Use the pencil icon in that file to make the modification shown below and commit the change to your fork + * Do not try to open a pull request to LoopKit/LoopWorkspace - only modify your-github-username/LoopWorkspace version +* **Build with *Mac* Method** + * You edit the file used to automatically sign all your targets + * You can edit the version in your LoopWorkspace folder (it shows up as the top item in the Xcode folder view) - or - if you use the build script, you can edit the copy found in ~/Downloads/BuildLoop after the first time you use the script. + * If you edit `~/Downloads/BuildLoop/LoopConfigOverride.xcconfig`, the "flags" you add are applied to this download and all subsequent downloads created with the script. -!!! question "New Instructions" - The instructions are more robust than earlier instructions that had you editing a line instead of adding new ones. +These flags are always upper case with underscore separating words for clarity, for example `MY_EXAMPLE_FLAG`. If you have more than one flag, they are separated by a space. Do not enter a line break between selections; in other words, do not hit return or enter. Xcode will automatically word-wrap the line for clarity. All values need to be on a single line. Copy the text below, add it to the end of your LoopConfigOverride.xcconfig file and then insert the desired flags in place of `MY_EXAMPLE_FLAG`. If you want more than one flag, separate them by a space. @@ -40,7 +44,7 @@ _Code After Modification_ SWIFT_ACTIVE_COMPILATION_CONDITIONS = $(SWIFT_ACTIVE_COMPILATION_CONDITIONS) SIRI_DISABLED ``` -List of some flags and what they do: +## Table of Build Time Flags |FLAG|PURPOSE| |---------|---------| From 095a11959186486ccac06c8f373cd68a5b636c27 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 09:27:08 -0700 Subject: [PATCH 4/9] update the simulator page, more headings, how-to delete simulators --- docs/version/development.md | 2 +- docs/version/simulator.md | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/version/development.md b/docs/version/development.md index 144f2916ff4..667ecb017c9 100644 --- a/docs/version/development.md +++ b/docs/version/development.md @@ -21,7 +21,7 @@ Right now it is empty. Most features, originally in the Updates in `dev` section before the release of version 3.4, have been inserted into the appropriate part of the *LoopDocs* website (indicated by the up-right arrow after the link). A few items are still in this section. * [Support for Libre Sensors](../loop-3/add-cgm.md#libre){: target="_blank" } -* [Simulated Pump or CGM on Phone](simulator.md#simulated-pump-or-cgm-on-phone){: target="_blank" } +* [Pump or CGM Simulator on Phone](simulator.md#pump-or-cgm-simulator-on-phone){: target="_blank" } * [Algorithm Experiments](../loop-3/settings.md#algorithm-experiments){: target="_blank" } * [Glucose Based Partial Application Factor](../loop-3/features.md#glucose-based-partial-application-gbpa){: target="_blank" } * [Integral Retrospective Correction](../loop-3/features.md#integral-retrospective-correction-irc){: target="_blank" } diff --git a/docs/version/simulator.md b/docs/version/simulator.md index 109960c33ac..ce88f9d1180 100644 --- a/docs/version/simulator.md +++ b/docs/version/simulator.md @@ -62,7 +62,7 @@ When building to a real phone using a *Mac*, you must have access to a [Compatib * Follow the [set up the app](../loop-3/loop-3-overview.md) instructions on your phone but choose a simulated pump * If you have a compatible CGM on this phone, you can select that or you can use the simulated CGM or enter glucose values on the main Loop screen -### What to Expect +## What to Expect with a Simulator !!! warning "Locked Phone or App in Background" Loop will not work in the background without either a real CGM or a real pump to "wake" it up. @@ -92,11 +92,19 @@ These CGM and pump options work to provide glucose readings or accept pump comma The Loop app, when open, will be quite aggressive at warning you that you have disabled Notifications, so you can reverse those directions to enable notifications when actually using the app. -### Simulated Pump or CGM on Phone +### Pump or CGM Simulator on Phone The simulators for the Pump and CGM, with version 3.3 and later, hide their detailed configuration screen. The initial view is a demonstration screen showing a typical CGM or Pump display. In order to configure the simulator controls or delete the simulator, you must tap on the Simulator Settings row. ![tap on simulator settings row to get to controls](img/update-simulators.svg){width="500"} {align="center"} -If you do not see the Simulator Settings row, you have an older version. You can see the settings by doing a long-press (5 to 10 sec) in the top portion of the simulator screen. If you've counted to 10 and the display has not updated yet, then return to the main screen, go back to the simulator screen, and try again. \ No newline at end of file +If you do not see the Simulator Settings row, you have an older version. You can see the settings by doing a long-press (5 to 10 sec) in the top portion of the simulator screen. If you've counted to 10 and the display has not updated yet, then return to the main screen, go back to the simulator screen, and try again. + +### Delete the Pump or CGM Simulator on Phone + +To delete a pump simulator or CGM simulator from the *Loop* app on the phone, you must first tap on the Simulator Settings row, see graphic above. + +Then scroll down to the bottom of the screen and select `Delete Pump` or `Delete CGM`. + +After deleting the simulator, you can then [Add Pump](../loop-3/add-pump.md){: target="_blank" } or [Add CGM](../loop-3/add-cgm.md){: target="_blank" }. From 420b63f127134944693925334ca4624e40efcea8 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 09:38:19 -0700 Subject: [PATCH 5/9] update releases with latest patch number --- docs/build/build-dev-mac.md | 1 - docs/version/releases.md | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/build-dev-mac.md b/docs/build/build-dev-mac.md index d35405be963..7156d4dd07e 100644 --- a/docs/build/build-dev-mac.md +++ b/docs/build/build-dev-mac.md @@ -17,7 +17,6 @@ There is a script to assist in building the `dev branch`. It gives you the optio /bin/bash -c "$(curl -fsSL \ https://raw.githubusercontent.com/loopandlearn/lnl-scripts/main/BuildLoopDev.sh)" ``` -Both the `dev branch` and the lightly tested branch of `dev` have Libre support. ### BuildLoopDev Other Branches diff --git a/docs/version/releases.md b/docs/version/releases.md index 6f723b63f56..ec2733bf424 100644 --- a/docs/version/releases.md +++ b/docs/version/releases.md @@ -163,7 +163,7 @@ Each release uses 3 numbers: Major.Minor.Patch * Major is reserved for a significant change in the code, such as occurred going from `Loop 2.2.9` to `Loop 3.0.0` * Minor is used when the development branch is released for general use -* Patch typically indicates a modification to support external events like an Xcode or iOS version update with no feature changes in Loop +* Patch typically indicates a modification for a quick bug-fix or to support external events like an Xcode or iOS version update with no feature changes in Loop To prevent confusion between versions used for development and versions used for release (`main` `branch`), the Minor values are even for released code. The Minor value for the development `branch` (`dev`) is incremented as part of the release process and is always odd. @@ -174,7 +174,8 @@ For example: * `Loop 3.2.0` was the next released version * `Loop 3.2.1, 3.2.2 and 3.2.3` are patches to `Loop 3.2.0` without changes to the features of `Loop 3.2.x` * `Loop 3.3.0` was the development version before `Loop 3.4.0` was released -* `Loop 3.4.0` is the current version +* `Loop 3.4.0` was the next released version + * `Loop 3.4.1` is a patched version (fixed Browser Build) without changes to the features of `Loop 3.4.x` * `Loop 3.5.0` is the current development version ## Remove Apps with Shared App Group From 12417d8d42656d89787dae3bd3b563fc638395f1 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Thu, 29 Aug 2024 17:11:25 -0700 Subject: [PATCH 6/9] add warning about beta expired from automatic testflight installation --- docs/browser/phone-install.md | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/docs/browser/phone-install.md b/docs/browser/phone-install.md index 89326401beb..54791d78797 100644 --- a/docs/browser/phone-install.md +++ b/docs/browser/phone-install.md @@ -82,15 +82,43 @@ Once the app is available in *TestFlight*, you can adjust whether it is automati Go back to the *TestFlight* app on your phone and tap on your app name in the list to see an expanded screen similar to the graphic below. The row to enable or disable automatic updates is highlighted in the graphic, which shows the feature disabled. This is recommended for all users. -* If you leave automatic update enabled (default), then whenever a new build is created and uploaded to *TestFlight* , it will be installed immediately. -* WARNING: If you switch between Building with Browser and *Mac*, you must disable automatic update or Xcode will not be able to install to your phone. +* If you leave automatic update enabled (default), then whenever a new build is created and uploaded to *TestFlight* , it will be installed immediately (see [Unexpected *TestFlight* Expiration](#unexpected-testflight-expiration)) +* WARNING: If you switch between Building with Browser and *Mac*, you must disable automatic update or Xcode will not be able to install to your phone ![enable or disable automatic update for Loop](img/testflight-auto-update.png){width="300"} {align="center"} When you are ready to install, just open the *TestFlight* app and click Install to get the most recent build and then click Open when it completes the installation. All your settings and connections to CGM and Pump are maintained. -If you tap on the bottom row that says `Previous Builds`, highlighted by the dashed-green rectangle, you can view and choose an older build (as long as it has not expired). +### Previous Builds + +If you tap on the bottom row that says `Previous Builds`, highlighted by the dashed-green rectangle, you can view and choose an older (or lower version number) build (as long as it has not expired). + +* In some cases, you need to do this to see the newest build +* For example, it you build version 3.5.0 (`dev` branch) accidentally and then switched to 3.4.x (`main` branch), *TestFlight* shows you the 3.5.0 version on the screen and you need to go to previous builds to find your newer 3.4.x build + +### Unexpected *TestFlight* Beta Expiration + +!!! important "*Apple TestFlight* Bug" + It doesn't happen to everyone but it has happened a few times over the years and only for people who have Automatic Update enabled for their *TestFlight* app. + + Symptom: + + * App has plenty of time before expiration + * A new build becomes available, for example from the automatic monthly rebuild + * User is told *Loop* Beta is not available + + Solution: + + * Open *TestFlight* and turn off automatic installation for your app + * Install the previous version of the app on the phone manually (with monthly build, it should still be ok) + * Manually start a new build (if there were updates you want to get) + * Manually install the new update + + More information: + + * [Link 1: Apple forum](https://forums.developer.apple.com/forums/thread/720033){: target="_blank" } + * [Link 2: Stackoverflow thread](https://stackoverflow.com/questions/74588716/testflight-beta-has-expired){: target="_blank" } ## *TestFlight* for a Child From 4fad853f7b90d37faf912ee4987c2b7197a52c0f Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 30 Aug 2024 10:55:55 -0700 Subject: [PATCH 7/9] update for 3.4.x, code customization and browser build steps --- docs/browser/edit-browser.md | 164 +- .../img/navigate-submodule-omnible.svg | 9252 +++++++++++++++++ docs/version/code-custom-edits.md | 16 +- 3 files changed, 9369 insertions(+), 63 deletions(-) create mode 100644 docs/browser/img/navigate-submodule-omnible.svg diff --git a/docs/browser/edit-browser.md b/docs/browser/edit-browser.md index 8d39cd326df..6c61bf9ec54 100644 --- a/docs/browser/edit-browser.md +++ b/docs/browser/edit-browser.md @@ -35,29 +35,31 @@ !!! abstract "Summary" * Prepare Customization (One Time): - * Once you have prepared a given customization, you can use it again with each update + * Once you have prepared a given customization, you can use it again with every build and even across most updates * If there is an update (new release) and the customization is no longer valid - you will get a clear error message * Just follow the steps on this page again to replace the customization that did not work * If there is an update (new release) and the customization applies with no errors, then you do NOT need to create an update * It is a good idea to test each customization as soon as you install the new build on your phone * LoopDocs: Decide on Modules to modify using the [Version: Custom Edits](../version/code-custom-edits.md){: target="_blank" } page * You only need to create your own customization if what you want is not provided at [Loop and Learn: Customization List](https://www.loopandlearn.org/custom-code#custom-list){: target="_blank" } - * If there are customization not provided by the Customization List, then you need to make presonalized edits + * If there are customization not provided by the Customization List, then you need to make personalized edits * This current page explains how to make the edits using a browser * The [Version: Custom Edits](../version/code-custom-edits.md){: target="_blank" } gives instructions on identifying the Module, finding the file and editing the line(s) * *GitHub* (each Module): 1. `Fork` the Module (if needed) - this is your fork where you will make changes 1. `Sync` the Module (if needed) 1. Make the desired modification(s) using the pencil tool - 1. Save your changes + 1. Save your changes to a patch branch 1. Prepare lines needed for each customization and save * GitHub (LoopWorkspace) - using your fork where you will make changes 1. You will use the pencil tool to edit build_loop.yml 1. Add customization lines to the file - 1. Save your changes + 1. Save your changes to your default branch 1. Action 4: Build Loop + * (Optional): [Add Test Details to *TestFlight*](bb-update.md#add-test-details-to-testflight){: target="_blank" } * Phone: Install with *TestFlight* + !!! question "FAQs" - **Do I need a Mac computer?** No. This can be done on any browser. - **Should I build without customizations first?** Yes. Make sure the build process works without customizations. You don't need to install the build on your phone, just make sure it builds without errors before you start modifying. @@ -78,23 +80,23 @@ Decide which [Version: Custom Edits](../version/code-custom-edits.md){: target=" * Do not get confused later: LoopKit is both a username and a Module name * Refer to the [Module Table](#module-table) when directed -Look also at the Stable line for the desired customization: +With the release of 3.4.x, the customizations for `main` and `dev` are the same. There are 2 customizations that require an update when moving from 3.2.3 to 3.4.x. -* Stable: Yes or Changed on date -* The method for applying that customization differs slightly in the instructions below based on that notation -* The customizations that are not stable, are summarized in [Not Stable List](../version/code-custom-edits.md#not-stable-list){: target="_blank" } +* For more information, refer to [Not Stable List](../version/code-custom-edits.md#not-stable-list){: target="_blank" } + * Glucose Guardrails + * Adjust Future Carbs Time Interval ## Outline of What Happens in the Module !!! warning "Review Only" Review this section so you know what to expect. The actual steps will come later, starting with [Create your Fork for Selected Module](#create-your-fork-for-selected-module) or [Personalized Customization for this Module](#personalized-customization-for-this-module). + Feel free to skip ahead if you think you don't need the summary. + In the next sections, the exact process for making changes will be documented. But the steps may feel confusing. There are no links here because you are supposed to review the steps before taking action in the next section. 1. First time for this module: * Make a fork - * If the customization you want is not "Stable" and you are building `main` - * Create a new branch for your fork using the SHA-1 table 1. Change the line(s) of code desired for your customization(s) in your `fork` 1. Save the change(s) using descriptive comments 1. Repeat until done with this Module @@ -175,47 +177,85 @@ When you "fork a repository", the default  ## Create `branch` if needed -* If the customization you wish to prepare indicates Stable: Yes, you can skip ahead to [Personalized Customization for this Module](#personalized-customization-for-this-module) -* If you are preparing a customization for the `dev` branch, regardless of the Stable notation, there is no need to create a special `branch`, simply update the default branch to the latest (sync it) and use the current version of the customization when you skip ahead to [Personalized Customization for this Module](#personalized-customization-for-this-module) -* Otherwise, when you a preparing a customization where the file changed sufficiently between `main` and `dev` and you want to build the `main` branch, you need to create a branch for this Module that is consistent with the version you wish to customize. +> With the release of version 3.4.x, this entire section can be skipped. It was needed when LoopWorkspace `dev` used submodules that were quite different from those used by `main`. -Open your browser to your https://github.com/username/Module URL. If you already created the `branch` you need, you do not need to create a new one. +??? abstract "Skip for Now (Click to open/close)" -If you are customizing a released version, use the [Table of SHA-1](#table-of-sha-1) under your version number below. Copy the SHA-1 for your Module so you can paste it into the URL in Step 2 below. Notice the suggested branch name for that table. You will use this in Step 3.3 below. + * If the customization you wish to prepare indicates Stable: Yes, you can skip ahead to [Personalized Customization for this Module](#personalized-customization-for-this-module) + * If you are preparing a customization for the `dev` branch, regardless of the Stable notation, there is no need to create a special `branch`, simply update the default branch to the latest (sync it) and use the current version of the customization when you skip ahead to [Personalized Customization for this Module](#personalized-customization-for-this-module) + * Otherwise, when you a preparing a customization where the file changed sufficiently between `main` and `dev` and you want to build the `main` branch, you need to create a branch for this Module that is consistent with the version you wish to customize. -You should create a `branch` following the numbered steps and watching the GIF. Each Frame in the GIF corresponds to a numbered step below. + ??? abstract "Use only if directed (Click to Open/Close)" + Open your browser to your https://github.com/username/Module URL. If you already created the `branch` you need, you do not need to create a new one. -1. Click on URL line as indicated by the arrow -1. Add the text `/tree/SHA-1` where you change SHA-1 to be the value in the table below and hit return -1. Create a new branch in three steps - * 3.1: Click on the dropdown under the `branch` icon - * 3.2: Type the suggested new `branch` name in the blank space - * 3.3: Click on the create `branch` button -1. You should see a screen similar to the example below - * Do not click on the Create Pull Request button that is marked with a big X + If you are customizing a released version, use the [Table of SHA-1](#table-of-sha-1) under your version number below. Copy the SHA-1 for your Module so you can paste it into the URL in Step 2 below. Notice the suggested branch name for that table. You will use this in Step 3.3 below. -![create branch for version](img/create-branch.gif){width="600"} -{align="center"} + You should create a `branch` following the numbered steps and watching the GIF. Each Frame in the GIF corresponds to a numbered step below. -### Table of SHA-1 + 1. Click on URL line as indicated by the arrow + 1. Add the text `/tree/SHA-1` where you change SHA-1 to be the value in the table below and hit return + 1. Create a new branch in three steps + * 3.1: Click on the dropdown under the `branch` icon + * 3.2: Type the suggested new `branch` name in the blank space + * 3.3: Click on the create `branch` button + 1. You should see a screen similar to the example below + * Do not click on the Create Pull Request button that is marked with a big X + + ![create branch for version](img/create-branch.gif){width="600"} + {align="center"} -This will be updated with each release. The versions for the `dev` branch are not reported here because they are frequently updated. If customizing dev, use the default branch for each Module and `sync` that branch if needed. + ### Table of SHA-1 -#### Version 3.2.3 + This will be updated with each release. You do not need this information now - it is only important when submodules that are modified as part of `dev` branch changes to LoopWorkspace are sufficiently different from the versions used for `main` branch. -Suggested `branch` name is `v-3.2.3` + #### Version 3.4.1 -| Repository | SHA-1 | -|:--|:-:| -| `LoopWorkspace` | 81a3d9b03305a4b2a844bd6bac14a14f27626fef | -| `Loop` | c6b058b4276681600979aaeba518c635f06ac135 | -| `LoopKit` |9835a29f1bac9f75023f39c376479a2e6a6c8ccd | -| `OmniBLE` | f21360781c0b8eee26c531d20f1b0aa192a227f2 | -| `OmniKit` | c1e0d395975c93d15b3f84ac21097e40b7d5d93f | + | Repository | SHA-1 | + |:--|:-:| + | `LoopWorkspace` | 8060718e78b44ef45797082817392c1c4b7a7dab | + | `Loop` | 5c3b01f7e302dca9b8bbb12fd42fdd40ed52d2c1 | + | `LoopKit` |873b3b7c406cfc982f9061afb5f5e27e88d9208d | + | `OmniBLE` | 85fc3c6d4805d580acdf6592b220717b6e842558 | + | `OmniKit` | a80e38b1b7f203014b461f8aff8cead2c067e39d | ## Personalized Customization for this Module -Navigate to the file you need to modify (using the instructions to find the lines from the [Version: Custom Edit](../version/code-custom-edits.md#instructions-for-finding-the-lines){: target="_blank" } page) +Navigate to the file you need to modify (using the instructions to find the lines from the [Version: Custom Edit](../version/code-custom-edits.md#instructions-for-finding-the-lines){: target="_blank" } page). + +??? abstract "How do I navigate to the file? (Click to open/close)" + Let's do an example. + + Suppose you want to add this customization: [Pods: Add Extra Insulin on Insertion](../version/code-custom-edits.md#pods-add-extra-insulin-on-insertion){: target="_blank" } + + The folder name is: ` OmniBLE/OmniBLE/OmnipodCommon`
+ The file name is: `Pod.swift` + + So you will go to your OmniBLE fork: + + 1. Tap to select `OmniBLE` folder in that fork + 1. Tap to select `OmnipodCommon` folder in that folder + 1. Tap to open the `Pod.swift` file + + The graphic below shows the `fork` for the `OmniBLE` submodule. If you need more detailed instructions, they are found after the graphic. + + ![example navigation to file in fork](img/navigate-submodule-omnible.svg){width="800"} + {align="center"} + + ??? info "More detailed instructions (Click to open/close)" + 1. Check that this repository is the correct submodule and that: + * Fork has your GitHub Username + * Fork says it is forked from LoopKit + * Fork is up to date with LoopKit + * Tap on the OmniBLE folder to open the next screen + 1. Check that your screen shows: + * `OmniBLE/OmniBLE` at the top (current folder location) + * Tap on the OmnipodCommon folder to open the next screen + 1. Check that your screen shows: + * `OmniBLE/OmniBLE/OmnipodCommon` at the top (current folder location) + * Tap on the Pod.swift file to open it + + Now you are ready to move to the [Example GIF](#example-gif) which shows the steps needed to do the actual edit. + !!! tip "Pro Tip" Look at the files you want to change - if more than one change is desired for a single file - do them at the same time. @@ -226,6 +266,12 @@ This section provides the steps to make a single customization for the Module. I The GIF showing the creation of one customization is shown below. Please review the 4 frames of the GIF, read the detailed instructions below and then review the GIF again. In case you are concerned by the "Pull Request shown here; this is to your own fork, not back to the original. +There are 4 frames shown in this GIF; the frame number is noted at the bottom right. Take the time to cycle through several times to observe what you need to do. Frame 1 shows what to do after you have completed the edits you want for this file. + +**This includes making a `Pull Request` to your own repository. That is OK.** + +**Never make a `Pull Request` to a `LoopKit/repository`.** + ![GitHub screen while creating a customization](img/browser-customize.gif){width="750"} {align="center"} @@ -334,32 +380,34 @@ Return to your GitHub fork for LoopWorkspace&nb * Click on the pencil (so you can edit this file) * If you are building version 3.4 * Skip ahead to [Add Personal Customizations to build_loop.yml](#add-personal-customizations-to-build_loopyml) -* If you are building from an older version of main (version 3.2.3 or earlier), this is left here for your convenience - it will be removed over the next few months - please update soon - * Locate line 31, which is just above the words: - * `# Patch Fastlane Match to not print tables` - * Paste the contents of the block below so it comes before that section - * In the next section - you will need to modify the line number where you do the edits +??? abstract "Older versions (Click to open/close)" + * If you are building from an older version of main (version 3.2.3 or earlier), this is left here for your convenience - it will be removed over the next few months - please update soon + * Locate line 31, which is just above the words: + * `# Patch Fastlane Match to not print tables` + * Paste the contents of the block below so it comes before that section + * In the next section - you will need to modify the line number where you do the edits -``` { .text .copy title="Paste into build_loop.yml" } - # Customize Loop: Download and apply patches - - name: Customize Loop - run: | - # For each patch, edit comment line (keep the #) then update curl (and remove the #) + ``` { .text .copy title="Paste into build_loop.yml" } + # Customize Loop: Download and apply patches + - name: Customize Loop + run: | - # Submodule Loop patches: - # Loop: Filename: customization details - #curl https://github.com/username/Loop/commit/SHA-1.patch | git apply -v --directory=Loop - - # Submodule LoopKit patches: - # LoopKit: Filename: customization details - #curl https://github.com/username/LoopKit/commit/SHA-1.patch | git apply -v --directory=LoopKit - - # Submodule xxxxx patches: Follow prototype above + # For each patch, edit comment line (keep the #) then update curl (and remove the #) + # Submodule Loop patches: + # Loop: Filename: customization details + #curl https://github.com/username/Loop/commit/SHA-1.patch | git apply -v --directory=Loop + + # Submodule LoopKit patches: + # LoopKit: Filename: customization details + #curl https://github.com/username/LoopKit/commit/SHA-1.patch | git apply -v --directory=LoopKit + + # Submodule xxxxx patches: Follow prototype above -``` + + ``` ### Add Personal Customizations to build_loop.yml diff --git a/docs/browser/img/navigate-submodule-omnible.svg b/docs/browser/img/navigate-submodule-omnible.svg new file mode 100644 index 00000000000..f1d151029b2 --- /dev/null +++ b/docs/browser/img/navigate-submodule-omnible.svg @@ -0,0 +1,9252 @@ + +image/svg+xml123 diff --git a/docs/version/code-custom-edits.md b/docs/version/code-custom-edits.md index 2c9eaf87d99..fe81193c02d 100644 --- a/docs/version/code-custom-edits.md +++ b/docs/version/code-custom-edits.md @@ -41,6 +41,8 @@ The instructions on this page identify the module, `Key_Phrase` or file and line * If you cannot identify a line that looks exactly like the example - do not guess - go to your favorite social media group and ask for help * Sometimes there is a bigger change than just line numbers. The git software is really good about finding the "right" code that is just at a different line number. When you see the notation `Stable: Changed on date`, that means you must select the correct version when making your personal customization depending on which version you are modifying. + * With the release of 3.4.x, no customizations fall into this category + * The notation is kept to handle future changes that might happen when development start again This page is broken into two halves: @@ -88,11 +90,13 @@ Below the figure, the original, and in some cases, the modified code will be dis ### What does `Stable` mean? -The line starting with `Stable` indicates the last time the code associated with a given modification was changed. For most of these customizations, you will see `Stable: Yes`. For a few, you will see the date and version number at which the customization was modified. +The line starting with `Stable` was previously used to indicate when code changes were sufficient to require a different customization. With the release of 3.4.x, all customizations show `Stable: Yes`. -If the customization you used for an earlier version changed since the last time you built, it might be on the [`Not Stable List`](#not-stable-list), then you will need to use the updated 3.4.x version. If the customization indicates `Stable: Yes`, then you do not need to modify the process for 3.4.x. +* A few have an additional notation of when they were last changed; if you use these with browser build, you must update the customization going from 3.2.3 to 3.4.x +* All customizations are currently identical for `main` and `dev` +* Instructions for older versions of the customization are removed from this page. -When the development version has significant differences from the released version, the customization may also differ. With the release of version 3.4.x, all customizations are identical for `main` and `dev`. Older versions of the customization are now removed from this page. +There are two customizations, see [Not Stable List](#not-stable-list) that require an update between version 3.2.3 and 3.4.x. If you use one of those customizations for the Browser Build method, you will be required to update it if you want to continue using that customization. ??? tip "More Information about `Stable` (Click to open/close)" Some customizations have not changed for a very long time (stable since 2.2.x days). @@ -251,7 +255,8 @@ Guardrail(absoluteBounds: * File: Guardrail+Settings.swift * Line: 12 for suspendThreshold * Line: 26 for correctionRange -* Stable: Changed on 2024 Feb 19: Version 3.4.0 +* Stable: Yes + * Last Changed on 2024 Feb 19 ??? info "Update Details (Click to open/close)" This update, merged on 2024 Feb 19 was part of a larger fix to a problem when glucose units were mmol/L. The user could not select two values (min and max) that were the same and equal to the reported absolute range. This was a rounding problem going between mmol/L and mg/dL that has now been resolved. Part of the resolution was to modify the mg/dL absolute ranges to preserve the previously reported mmol/L absolute ranges. @@ -305,7 +310,8 @@ The *Loop* app limits to 1 hour the amount of time in the future that carbs can * Module: Loop * Folder: Loop/Loop/Models * File: LoopConstants.swift, Line 28 -* Stable: Changed on 2023 May 29 through 2023 Aug 20: Version 3.4.0 +* Stable: Yes + * Last changed 2023 Aug 20 ``` { .txt .copy title="Key_Phrase" } static let maxCarbEntryFutureTime From 685aeb454ac107d942e165361f3391a6dc5e7415 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 30 Aug 2024 13:22:31 -0700 Subject: [PATCH 8/9] add how to use patches folder instructions --- docs/browser/edit-browser.md | 78 +- docs/browser/img/browser-open-to-patch.png | Bin 0 -> 97632 bytes docs/browser/img/modify-build-loop-yml.svg | 2586 +++++++++ docs/browser/img/prepare-workspace-patch.svg | 5107 ++++++++++++++++++ 4 files changed, 7757 insertions(+), 14 deletions(-) create mode 100644 docs/browser/img/browser-open-to-patch.png create mode 100644 docs/browser/img/modify-build-loop-yml.svg create mode 100644 docs/browser/img/prepare-workspace-patch.svg diff --git a/docs/browser/edit-browser.md b/docs/browser/edit-browser.md index 6c61bf9ec54..5a6c8b1dbeb 100644 --- a/docs/browser/edit-browser.md +++ b/docs/browser/edit-browser.md @@ -51,11 +51,10 @@ 1. Make the desired modification(s) using the pencil tool 1. Save your changes to a patch branch 1. Prepare lines needed for each customization and save - * GitHub (LoopWorkspace) - using your fork where you will make changes - 1. You will use the pencil tool to edit build_loop.yml - 1. Add customization lines to the file - 1. Save your changes to your default branch - 1. Action 4: Build Loop + * New with 3.4.x release, there are 2 ways to add customizations + * See [Update LoopWorkspace](#updateloopworkspace){: target="_blank" } + * See [How to use the `patches` Folder](#how-to-use-the-patches-folder){: target="_blank" } + * Regardless of the method, incorporate the customization with `Action 4: Build Loop` * (Optional): [Add Test Details to *TestFlight*](bb-update.md#add-test-details-to-testflight){: target="_blank" } * Phone: Install with *TestFlight* @@ -230,13 +229,15 @@ Navigate to the file you need to modify (using the instructions to find the line The folder name is: ` OmniBLE/OmniBLE/OmnipodCommon`
The file name is: `Pod.swift` - So you will go to your OmniBLE fork: + So you will go to your OmniBLE fork (see [New Fork](#new-fork){: target="_blank" } if you don't have a fork yet): 1. Tap to select `OmniBLE` folder in that fork 1. Tap to select `OmnipodCommon` folder in that folder 1. Tap to open the `Pod.swift` file + * Once the file is open, tap on the pencil icon and make your edits + * When done, review the [Example GIF](#example-gif) which shows the steps needed to save your changes after you complete the edit - The graphic below shows the `fork` for the `OmniBLE` submodule. If you need more detailed instructions, they are found after the graphic. + The graphic below shows the `fork` for the `OmniBLE` submodule with numbers that match the steps in the list above. If you need more detailed instructions, they are found after the graphic. ![example navigation to file in fork](img/navigate-submodule-omnible.svg){width="800"} {align="center"} @@ -253,8 +254,9 @@ Navigate to the file you need to modify (using the instructions to find the line 1. Check that your screen shows: * `OmniBLE/OmniBLE/OmnipodCommon` at the top (current folder location) * Tap on the Pod.swift file to open it + * Tap on the pencil icon (upper right) to start editing the file - Now you are ready to move to the [Example GIF](#example-gif) which shows the steps needed to do the actual edit. + Now you are ready to move to the [Example GIF](#example-gif) which shows the steps needed to save your changes after you complete the edit. !!! tip "Pro Tip" @@ -264,13 +266,17 @@ This section provides the steps to make a single customization for the Module. I ### Example GIF -The GIF showing the creation of one customization is shown below. Please review the 4 frames of the GIF, read the detailed instructions below and then review the GIF again. In case you are concerned by the "Pull Request shown here; this is to your own fork, not back to the original. +The GIF below shows the steps needed to save an edited file, so you can configure the customization. Please review the 4 frames of the GIF, read the [Detailed Instructions](#detailed-instructions) below and then review the GIF again. -There are 4 frames shown in this GIF; the frame number is noted at the bottom right. Take the time to cycle through several times to observe what you need to do. Frame 1 shows what to do after you have completed the edits you want for this file. +There are 4 frames shown in this GIF; the frame number is noted at the bottom right. Take the time to cycle through several times to observe what you need to do. -**This includes making a `Pull Request` to your own repository. That is OK.** +* Frame 1 shows what to do after you have completed the edits you want for this file -**Never make a `Pull Request` to a `LoopKit/repository`.** +* **Frame 2 shows a `Pull Request` to your own repository - that is OK** + +* Frame 3 displays a green button that would make a `Pull Request` to a `LoopKit/repository` - **do NOT click that button** + +* Frame 4 shows how to obtain the really-long alphanumeric string needed to modify your build_loop.yml file ![GitHub screen while creating a customization](img/browser-customize.gif){width="750"} {align="center"} @@ -338,6 +344,8 @@ Repeat this process until you've done all your customizations for this Module an ## Prepare the Customizations +There are two ways to use this customization. Keep reading for the method in which you edit the build_loop.yml file. If you are feeling adventurous, check out [How to use the `patches` Folder](#how-to-use-the-patches-folder){: target="_blank" }. + Once you prepare the commands, then you will edit the build_loop.yml file of your fork of LoopWorkspace. !!! warning "Ensure your fork is from LoopKit/LoopWorkspace" @@ -413,12 +421,23 @@ Return to your GitHub fork for LoopWorkspace&nb Open the text file in which you saved the customization lines. -For a given submodule, paste the comment curl lines that you prepared in [Prepare customization lines](#prepare-customization-lines) similar to the examples, near line 239, that are commented out and provided as an example. The best place to paste these is at the end of the `# Customize Loop: Download and apply patches` section and before the `# Patch Fastlane Match to not print tables` line. +For a given submodule, paste the "comment" and "curl" lines that you prepared in [Prepare customization lines](#prepare-customization-lines) similar to the examples, near line 279 (`main` or 239 for `dev`), that are commented out and provided as an example. The best place to paste these is at the end of the `# Customize Loop: Download and apply patches` section and before the `# Patch Fastlane Match to not print tables` line. -The indenting needs to match, so tab or (shift-tab) to line up the columns. +The indenting needs to match, so tab or (shift-tab) to line up the columns. The graphic below shows a couple of common mistakes. + +* All lines within a given section need to start in the same column (see the vertical dashed green line) +* Comments (lines starting with a `#`) placed in the wrong column will cause the build to fail +* Commands (line starting with `curl`) placed in the wrong column will cause the build to fail + +The command placed in the correct column has 4 "words" highlighted with red rectangles. You must have the correct values for all 4 of these places or the build will fail. + +![indentation and blank lines are important](img/modify-build-loop-yml.svg){width="600"} +{align="center"} It is best to leave a blank line between customizations. +**You must have a blank line** after the last customization and before the `# Patch Fastlane Match to not print tables` line or the build will fail. + **Once you are done with all the edits for build_loop.yml you will commit the changes to your fork directly.** * Once you have finished the edits for build_loop.yml @@ -443,6 +462,37 @@ Wait about 2 minutes before walking away to make sure there are no errors. If yo In about 1 hour, your customized app will be available for installation on your phone via *TestFlight*. +## Extra Information + +The rest of this page has additional information most people can skip. If a mentor is helping you, they may use some of this information. + +### How to Use the `patches` Folder + +With the release of 3.4.x, you can add patches to your `GitHub-Username/LoopWorkspace` fork in the `patches` folder. Those patches will then be automatically added to your build every time without needing to modify the build_loop.yml file. + +Refer to [Prepare customization lines](#prepare-customization-lines){: target="_blank" }: + +* extract the text from "https:" through "patch" and paste that into a new tab +* this will open a browser similar to the following graphic + +![open patch at GitHub](img/browser-open-to-patch.png){width="750"} +{align="center"} + +Now you need to download that file (Save Page As, if using chrome). + +Once the file is downloaded to a sensible name, make a copy (or rename it) to indicate that you have edited the file to make it a Workspace level patch. An example is shown below. You add the name of the submodule in 4 places so the patch is applied correctly when you build. + +![download and then edit patch for Workspace](img/prepare-workspace-patch.svg){width="750"} +{align="center"} + +If you've gotten this far, keep going. No more pretty graphics, but I think you can figure it out. + +* Return to your `GitHub-Username/LoopWorkspace` fork, tap on the `patches` folder +* At the upper right, click on `Add file` dropdown and choose `Upload files` + * Drag and drop your Workspace level patch into the window + * Commit to your default branch +* Test the build to make sure everything worked + ### Customization and SHA-1 When you commit your customization to your `branch` of your `fork`, there is a new SHA-1 associated with that step. The SHA-1 for a given branch, typically `main` or `dev` identifies to a mentor exactly which version of code you used for your build. diff --git a/docs/browser/img/browser-open-to-patch.png b/docs/browser/img/browser-open-to-patch.png new file mode 100644 index 0000000000000000000000000000000000000000..dff1f25b499739dd6e8e88471e3cd6012eecac1b GIT binary patch literal 97632 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 Y1M;0h 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 Z&6_b9 +image/svg+xmlXX diff --git a/docs/browser/img/prepare-workspace-patch.svg b/docs/browser/img/prepare-workspace-patch.svg new file mode 100644 index 00000000000..581942e5290 --- /dev/null +++ b/docs/browser/img/prepare-workspace-patch.svg @@ -0,0 +1,5107 @@ + +image/svg+xml From 9bd8d9c44379f175c0b8e8f29c18bcc6e53030a8 Mon Sep 17 00:00:00 2001 From: marionbarker Date: Fri, 30 Aug 2024 14:12:46 -0700 Subject: [PATCH 9/9] minor updates --- docs/browser/edit-browser.md | 21 +++++++++--- docs/browser/img/prepare-workspace-patch.svg | 34 +++++++++++--------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/docs/browser/edit-browser.md b/docs/browser/edit-browser.md index 5a6c8b1dbeb..8f70a50d946 100644 --- a/docs/browser/edit-browser.md +++ b/docs/browser/edit-browser.md @@ -51,7 +51,7 @@ 1. Make the desired modification(s) using the pencil tool 1. Save your changes to a patch branch 1. Prepare lines needed for each customization and save - * New with 3.4.x release, there are 2 ways to add customizations + * New with 3.4.x release, there are 2 ways to add customizations (use only one) * See [Update LoopWorkspace](#updateloopworkspace){: target="_blank" } * See [How to use the `patches` Folder](#how-to-use-the-patches-folder){: target="_blank" } * Regardless of the method, incorporate the customization with `Action 4: Build Loop` @@ -187,7 +187,7 @@ When you "fork a repository", the default  ??? abstract "Use only if directed (Click to Open/Close)" Open your browser to your https://github.com/username/Module URL. If you already created the `branch` you need, you do not need to create a new one. - If you are customizing a released version, use the [Table of SHA-1](#table-of-sha-1) under your version number below. Copy the SHA-1 for your Module so you can paste it into the URL in Step 2 below. Notice the suggested branch name for that table. You will use this in Step 3.3 below. + If you are customizing a released version, use the [Table of SHA-1](#table-of-sha-1) under your version number below. Copy the SHA-1 for your Module so you can paste it into the URL in Step 2 below. The suggested branch name is `v-#.#.#` where #.#.# corresponds to the version number for `main`. You will use this in Step 3.3 below. You should create a `branch` following the numbered steps and watching the GIF. Each Frame in the GIF corresponds to a numbered step below. @@ -274,15 +274,19 @@ There are 4 frames shown in this GIF; the frame number is noted at the bottom ri * **Frame 2 shows a `Pull Request` to your own repository - that is OK** -* Frame 3 displays a green button that would make a `Pull Request` to a `LoopKit/repository` - **do NOT click that button** +* Frame 3 displays a green `Compare & pull request` button that would make a `Pull Request` to a `LoopKit/repository` - **do NOT click that button** -* Frame 4 shows how to obtain the really-long alphanumeric string needed to modify your build_loop.yml file +* Frame 4 shows how to obtain the really-long alphanumeric string (SHA-1) needed to modify your build_loop.yml file ![GitHub screen while creating a customization](img/browser-customize.gif){width="750"} {align="center"} ### Detailed Instructions +If you followed along above and made the modifations, you can skip ahead to [Prepare the Customizations](#prepare-the-customizations). + +This section provides the detailed steps just explained in [Example GIF](#example-gif). + You will be using the "pencil" tool in the browser display for your fork. !!! question "Are there detailed instructions?" @@ -379,6 +383,8 @@ To view the exact code change associated with that patch, open a browser at the ## Update LoopWorkspace +With the release of 3.4.x, there are two ways to use this customization. Keep reading for the method in which you edit the build_loop.yml file. If you are feeling adventurous, check out [How to use the `patches` Folder](#how-to-use-the-patches-folder){: target="_blank" }. + The final step is to update your LoopWorkspace fork to apply these customizations by adding those customization lines into the build_loop.yml file. Return to your GitHub fork for LoopWorkspace and make sure to sync it if needed. @@ -480,7 +486,12 @@ Refer to [Prepare customization lines](#prepare-customization-lines){: target="_ Now you need to download that file (Save Page As, if using chrome). -Once the file is downloaded to a sensible name, make a copy (or rename it) to indicate that you have edited the file to make it a Workspace level patch. An example is shown below. You add the name of the submodule in 4 places so the patch is applied correctly when you build. +Once the file is downloaded to a sensible name, make a copy (or rename it) to indicate that you have edited the file to make it a Workspace level patch. An example is shown below. + +* Top file shows the original download +* Lower file shows the renamed and edited version: + * Add the name of the module to the "a" and "b" directory paths so the patch is applied to the correct folder (from LoopWorkspace) + * In this example `OmniBLE/` was added in 4 places as highlighted by red rectangles ![download and then edit patch for Workspace](img/prepare-workspace-patch.svg){width="750"} {align="center"} diff --git a/docs/browser/img/prepare-workspace-patch.svg b/docs/browser/img/prepare-workspace-patch.svg index 581942e5290..3909238bb81 100644 --- a/docs/browser/img/prepare-workspace-patch.svg +++ b/docs/browser/img/prepare-workspace-patch.svg @@ -113,9 +113,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.70710678" + inkscape:zoom="1.4142136" inkscape:cx="439.82042" - inkscape:cy="443.35595" + inkscape:cy="614.12224" inkscape:document-units="px" inkscape:current-layer="layer1" inkscape:document-rotation="0" @@ -5059,15 +5059,16 @@ rkJggg== id="tspan4580" x="1455.5" y="2156.5"> + rx="0.453529" + ry="0.49999124" + clip-path="url(#clipPath11263)" + transform="matrix(1.1024652,0,0,1.0000175,-162.86855,-1.3215484)" />