diff --git a/AmplitudeService b/AmplitudeService index 5a7e8c69f5..fd9df8f489 160000 --- a/AmplitudeService +++ b/AmplitudeService @@ -1 +1 @@ -Subproject commit 5a7e8c69f545bd8a2347dd35f68c7ac95ec4492b +Subproject commit fd9df8f48947f2cadc2a017ab88fdae074e32d96 diff --git a/CGMBLEKit b/CGMBLEKit index ba5d0b7daf..edd8fb232e 160000 --- a/CGMBLEKit +++ b/CGMBLEKit @@ -1 +1 @@ -Subproject commit ba5d0b7daf83d282b587c8ff0e835162b8c75846 +Subproject commit edd8fb232e18a09a6c162b489172ea9d381d7bb6 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..b708ff16d8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,137 @@ +# Contributing to Loop + +Thank you for your interest in contributing to Loop. + +Loop is a community effort, and contributions of all kinds are welcome. This document outlines some guidelines, good practices, and expectations for contributing to the project, with the goal of making collaboration and review as smooth as possible. + +Whether you are helping other users, improving documentation, translating the app, testing builds, reviewing code, or contributing new features and fixes, your work matters. + +Loop is built using the LoopWorkspace repository. The primary source for the app is at https://github.com/LoopKit/LoopWorkspace. + +## Ways to contribute + +There are many ways to support the Loop community: + +- **Help others** by answering questions and guiding users in support communities. +- Improve the **documentation** by updating or expanding LoopDocs. +- Improve the **app** by contributing code, fixes, features, or tests. +- Help with **translation and localization** through Loop lokalise. +- Support **testing and feedback** by validating changes and reporting issues clearly. + +### Pay it forward + +If Loop has helped you manage your diabetes successfully, consider paying it forward by helping others. Answering questions in [Loop Zulipchat](https://loop.zulipchat.com/) or the [Loop and Learn](https://www.facebook.com/groups/LOOPandLEARN) Facebook group can make a real difference for someone getting started. + +### Translate + +Loop is translated into multiple languages to make it easier to understand and use around the world. Translation for the submodules that make up the Loop app is managed through the [Loop lokalise project](https://loopkit.github.io/loopdocs/faqs/app-translation/#code-translation) and does not require programming experience. + +If your preferred language is missing, or you would like to improve an existing translation, please sign up as a translator following the directions in the link above. + +### Develop + +Do you work with Swift? UI/UX? Testing? API optimization? Data storage? + +Loop is a collaborative project, and contributions of all kinds are welcome. Whether you are writing code, improving the user experience, testing builds, helping with documentation, or contributing in other ways, your help matters. + +## General principles + +- Start small. Smaller, focused contributions are easier to review, test, and merge. +- For larger changes or new features, open or reference an issue first so there is a clear place for discussion and progress tracking. +- Reach out early if you are planning to work on something substantial, especially if it may overlap with work already in progress. +- Keep discussions constructive, respectful, and focused on improving Loop for the community. +- Remember that Loop is part of a wider open source AID ecosystem. Collaboration and maintainability matter just as much as shipping features. + +## Development guidelines + +### Coding conventions + +- Use Xcode and follow the existing formatting and style used throughout the codebase. +- Keep indentation and formatting consistent in every file you change. +- Format your code before committing. +- Avoid unrelated formatting-only changes in files you are not otherwise modifying. +- Choose clear, readable code over clever or overly compact solutions. +- Follow existing naming, file organization, and architectural patterns unless there is a good reason not to. + +### Strings and localization + +- Add new user-facing strings in the appropriate localization mechanism used by the app. +- Provide English source strings only unless the contribution is specifically about translations. +- Translation and localization for other languages should go through the [Loop lokalise project](https://loopkit.github.io/loopdocs/faqs/app-translation/#code-translation). + +### Documentation + +- Update docstrings when your change affects setup, configuration, behavior, workflows, or troubleshooting. +- Keep documentation changes clear and practical. +- ocumentation contributions are just as valuable as code contributions. + +## Branches, commits, and pull requests + +### Getting started + +The example below is for the Loop repository. Similar contributions can be made to other respositories as needed. + +1. Fork the `dev` branch of the [Loop repository](https://github.com/LoopKit/Loop) on GitHub. +1. Create a separate branch for each feature or fix with an [appropriate name](#branch-names). +1. Branch from the most recent appropriate development branch (typically `dev`). +1. Commit your changes to your fork. +1. When ready, open a pull request against the upstream repository (`LoopKit/Loop`). + +### Before opening a pull request + +- Rebase or otherwise sync your branch with the latest target branch. +- Make sure your change is focused and does not include unrelated edits. +- Test your changes as thoroughly as you reasonably can. +- Update relevant documentation when needed. +- Double-check for debug code, commented-out code, accidental version changes, or temporary workarounds left behind. + +### Pull request guidance + +- Keep pull requests as small and focused as practical. +- Use a clear title and description. +- Explain **what** changed and **why**. +- Link the relevant issue when applicable. +- Mention any areas that need particular review attention. +- Be open to feedback and follow-up changes during review. +- Use AI tools, if at all, as a support for small, well-understood tasks rather than to generate large parts of a contribution +- Do not submit AI-heavy or "vibe-coded" pull requests; we welcome thoughtful use of tooling, but contributions need to be intentionally designed. + +## Naming conventions + +### Branch names + +Use short, descriptive branch names that make the purpose of the change obvious. For example: + +- `fix/watchstate-sync` +- `feature/onboarding-target-behavior` +- `refactor/therapy-editor` + +### Pull request titles + +Use concise, descriptive pull request titles. Good titles usually start with the type of change, for example: + +- `Fix watch state sync timing issue` +- `Add onboarding step for target behavior` +- `Update build documentation` + +## Communication and coordination + +For new ideas, larger features, or work that may affect multiple parts of the app, **discuss it with the community first** — reach out to the contributor core on [Loop Zulipchat](https://loop.zulipchat.com/). This helps reduce duplicate work, avoid merge conflicts, and improve the final design. + +## Review expectations + +Please remember that Loop is maintained by contributors with limited time. Reviews may take time, and some pull requests may require iteration before they are ready to merge. + +To help keep reviews efficient: + +- Keep the scope narrow. +- Explain your reasoning clearly. +- Respond to review comments directly. +- Avoid force-pushing large unexplained rewrites during active review unless necessary. +- AI-assisted work is welcome for limited, well-understood tasks, but contributions should remain author-driven and must be code you fully understand, and can explain. + +We do not accept pull requests that are largely AI-generated or submitted without careful engineering judgment, testing, and alignment with Loop’s existing patterns. + +## Final note + +Loop exists because people choose to contribute their time, knowledge, and care to a shared effort. Thank you for helping improve the project and support the broader open source AID community. diff --git a/G7SensorKit b/G7SensorKit index 4d0780db06..890e60754d 160000 --- a/G7SensorKit +++ b/G7SensorKit @@ -1 +1 @@ -Subproject commit 4d0780db06c7c95b3a3bf3cdb2f2838d521e411a +Subproject commit 890e60754ded6b1610c8b8fac7a3c026bf704a64 diff --git a/Gemfile b/Gemfile index ce5882953b..1a3b246f63 100644 --- a/Gemfile +++ b/Gemfile @@ -1,2 +1,4 @@ source "https://rubygems.org" -gem "fastlane", "2.232.1" +gem "fastlane", "2.233.1" +gem "json", ">=2.19.2" +gem "addressable", ">=2.9.0" diff --git a/Gemfile.lock b/Gemfile.lock index efe764ef44..fc68ad7a36 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,7 +3,7 @@ GEM specs: CFPropertyList (3.0.8) abbrev (0.1.2) - addressable (2.8.8) + addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) artifactory (3.0.17) atomos (0.1.3) @@ -68,10 +68,11 @@ GEM faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) + faraday-retry (1.0.4) faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.4.0) - fastlane (2.232.1) + fastlane (2.233.1) CFPropertyList (>= 2.3, < 4.0.0) abbrev (~> 0.1.2) addressable (>= 2.8, < 3.0.0) @@ -91,7 +92,7 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) - fastlane-sirp (>= 1.0.0) + fastlane-sirp (>= 1.1.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -121,8 +122,7 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.4.1) xcpretty-travis-formatter (>= 0.0.3, < 2.0.0) - fastlane-sirp (1.0.0) - sysrandom (~> 1.0) + fastlane-sirp (1.1.0) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) @@ -166,7 +166,7 @@ GEM httpclient (2.9.0) mutex_m jmespath (1.6.2) - json (2.18.0) + json (2.19.4) jwt (2.10.2) base64 logger (1.7.0) @@ -202,7 +202,6 @@ GEM simctl (1.6.10) CFPropertyList naturally - sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -231,7 +230,9 @@ PLATFORMS ruby DEPENDENCIES - fastlane (= 2.232.1) + addressable (>= 2.9.0) + fastlane (= 2.233.1) + json (>= 2.19.2) BUNDLED WITH 4.0.6 diff --git a/LibreTransmitter b/LibreTransmitter index 20f6d0e171..d0d301208f 160000 --- a/LibreTransmitter +++ b/LibreTransmitter @@ -1 +1 @@ -Subproject commit 20f6d0e171450b294b202cefa8edaf2c5e4a5150 +Subproject commit d0d301208faeb2bc763454baf0550f3fd4888bb7 diff --git a/LogglyService b/LogglyService index 0a8f3c83be..d6df99ea34 160000 --- a/LogglyService +++ b/LogglyService @@ -1 +1 @@ -Subproject commit 0a8f3c83bed117248c56acf8278b18a88f399988 +Subproject commit d6df99ea34658c42eb721829d29812645c08fdad diff --git a/Loop b/Loop index 367a9878f5..40ae514ef2 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 367a9878f5274be3ad5ead4142e2837bc0c394c2 +Subproject commit 40ae514ef2cb6ee8cf0a62177de3072a460ee2e4 diff --git a/LoopKit b/LoopKit index 835c45a317..e7e2ee2b54 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 835c45a31789305f4e26af58405124b8a5fd45f7 +Subproject commit e7e2ee2b546c4d8122014838cb98a0e26dd91208 diff --git a/LoopOnboarding b/LoopOnboarding index 6fbc8c7ae2..64f978e143 160000 --- a/LoopOnboarding +++ b/LoopOnboarding @@ -1 +1 @@ -Subproject commit 6fbc8c7ae2594cd0931b5ea9a36b015fafcd2b13 +Subproject commit 64f978e143723765452957cef06a99db380b128c diff --git a/LoopSupport b/LoopSupport index e470d203d3..0c296289ed 160000 --- a/LoopSupport +++ b/LoopSupport @@ -1 +1 @@ -Subproject commit e470d203d386895515a058f36ddfd741da185108 +Subproject commit 0c296289ed8698cbc3acd4c1ea1b39a600c0dbc3 diff --git a/MinimedKit b/MinimedKit index ba80a8f46a..106467e8f8 160000 --- a/MinimedKit +++ b/MinimedKit @@ -1 +1 @@ -Subproject commit ba80a8f46aa6582818289e7457574017281351e6 +Subproject commit 106467e8f8effeae5a2872d121a33b548350f25c diff --git a/NightscoutRemoteCGM b/NightscoutRemoteCGM index d442e9f24f..383d3c1e6b 160000 --- a/NightscoutRemoteCGM +++ b/NightscoutRemoteCGM @@ -1 +1 @@ -Subproject commit d442e9f24f5f42cf2d5d8725809ad64084be10cf +Subproject commit 383d3c1e6b7c0c79def98a1633e4a5856bf221a4 diff --git a/NightscoutService b/NightscoutService index d6785fdcaa..7721a8da0d 160000 --- a/NightscoutService +++ b/NightscoutService @@ -1 +1 @@ -Subproject commit d6785fdcaa47fcd9efa3da19dd4be97efaedb806 +Subproject commit 7721a8da0de4f69fbc6994bdaa5c860ba9a99ede diff --git a/OmniBLE b/OmniBLE index b0b78e66a6..4e212a81aa 160000 --- a/OmniBLE +++ b/OmniBLE @@ -1 +1 @@ -Subproject commit b0b78e66a6962677970a00e5d37ae4157e548b8a +Subproject commit 4e212a81aa30e3aedeb04cec6644c39463f9db8b diff --git a/OmniKit b/OmniKit index 38af22b3d3..2b4253b9fd 160000 --- a/OmniKit +++ b/OmniKit @@ -1 +1 @@ -Subproject commit 38af22b3d36e05a4cdffb242a1a47b347a4031fc +Subproject commit 2b4253b9fd3ec167d8a6b198dae6b59606058808 diff --git a/RileyLinkKit b/RileyLinkKit index 8dad76d152..d953e1c79b 160000 --- a/RileyLinkKit +++ b/RileyLinkKit @@ -1 +1 @@ -Subproject commit 8dad76d15295e13e091be74f6f47dbca5f0eb022 +Subproject commit d953e1c79b36f06d68b7255bb8f4331d906cc30d diff --git a/TidepoolService b/TidepoolService index 5f4927dcac..4ef78bf8b5 160000 --- a/TidepoolService +++ b/TidepoolService @@ -1 +1 @@ -Subproject commit 5f4927dcac2b17276776b83016896997001b1a67 +Subproject commit 4ef78bf8b58e2cee3e7f00fe7670fc2a7b166874 diff --git a/VersionOverride.xcconfig b/VersionOverride.xcconfig index b17045813b..e167b13dbe 100644 --- a/VersionOverride.xcconfig +++ b/VersionOverride.xcconfig @@ -8,5 +8,5 @@ // Version [for DIY Loop] // configure the version number in LoopWorkspace -LOOP_MARKETING_VERSION = 3.13.1 +LOOP_MARKETING_VERSION = 3.13.2 CURRENT_PROJECT_VERSION = 57 diff --git a/dexcom-share-client-swift b/dexcom-share-client-swift index 875faf232b..04804892ea 160000 --- a/dexcom-share-client-swift +++ b/dexcom-share-client-swift @@ -1 +1 @@ -Subproject commit 875faf232bb3f13d619512f9e8b47a2d5acac433 +Subproject commit 04804892ea58778472e19c738ae39a87f41c0070