Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
4283c29
Bump version to 3.14.3
marionbarker Jun 21, 2026
2b4168f
update EversenseKit: wait for write lock to be released
marionbarker Jun 21, 2026
cecb823
update to fastlane 2.236.1
marionbarker Jun 21, 2026
4d834fb
update GitHub action to use Xcode 26.5,
marionbarker Jun 21, 2026
29512d2
update MedtrumKit: include PR 147, 148, 151;
marionbarker Jun 25, 2026
03ca0bf
update NightscoutKit and NightscoutService: report build environment …
marionbarker Jun 26, 2026
8e2167d
Updated translations from lokalise on Fri Jun 26 12:54:46 PDT 2026
marionbarker Jun 27, 2026
724e68d
Updated translations from lokalise on Sat Jun 27 09:48:15 PDT 2026
marionbarker Jun 27, 2026
cf265f1
update EversenseKit: fix time setting
marionbarker Jun 30, 2026
4e5ce16
Merge pull request #461 from daghaian-loop-org/add-build-autotrigger
daghaian Jun 30, 2026
4176bb2
update OmnipodKit: provide code to support Omnipod 5 pods with token
marionbarker Jun 30, 2026
c6a2d39
update OmnipodKit: localizations and improved status updates with faults
marionbarker Jun 30, 2026
41dad8a
update G7SensorKit: Extend displaying remaining lifetime from 24 to 4…
marionbarker Jul 1, 2026
9a9cc2f
Update dev to 3.14.3 (#459)
marionbarker Jul 3, 2026
ae75603
Clarify scheduled build documentation
Jul 6, 2026
4072ad5
Bump version to 3.14.4
marionbarker Jul 17, 2026
218e864
update OmnipodKit:
marionbarker Jul 17, 2026
24c8847
improve clarity: when build is skipped, run is canceled no green che…
marionbarker Jul 20, 2026
648cf30
update CGMBLEKit: recognize Anubis transmitter, enable user to select…
marionbarker Jul 20, 2026
8780352
update EversenseKit: fix: navigation titles; chore: remove CryptoSwif…
marionbarker Jul 20, 2026
3f70f0c
update Loop: fix LiveActivityManager bug
marionbarker Jul 20, 2026
dfaa2fb
update MedtrumKit: enable Manual Temp Basal, various fixes, updated t…
marionbarker Jul 20, 2026
5855ce5
update EversenseKit: feat: implement LoopKit alerts, fix: prevent cra…
marionbarker Jul 26, 2026
23237ac
update Loop, LoopKit to support new BLE management for Pods
marionbarker Jul 28, 2026
5727b6c
update OmnipodKit: new BLE Management for DASH and Omnipod 5,
marionbarker Jul 28, 2026
2bf6a99
update Loop: bump watch deployment
marionbarker Jul 28, 2026
8af5ca0
update fastlane to 2.237.0
marionbarker Jul 29, 2026
74c1694
update Loop: bump WATCHOS_DEPLOYMENT_TARGET to 9.0
marionbarker Aug 2, 2026
491a7de
update OmnipodKit: same code, new SHA with PR 118 merged, removed som…
marionbarker Aug 2, 2026
3bd4e71
update MedtrumKit: stable version with updated localizations
marionbarker Aug 3, 2026
4aed4ed
update OmnipodKit: bugfix, prevent lost comms issue
marionbarker Aug 6, 2026
a8c97d5
update OmnipodKit: fix intermittent deadlock
marionbarker Aug 10, 2026
d7d1e00
Merge pull request #466 from Hederstedt/codex/docs-scheduled-build-cl…
marionbarker Aug 15, 2026
aab6dc8
update TrueTime.swift: bump IPHONEOS_DEPLOYMENT_TARGET to 15.0
marionbarker Aug 20, 2026
0a4aa27
update Loop: more Xcode 27 fixes
marionbarker Aug 20, 2026
3773cd2
update G7SensorKit: add MIT license, fix typo in state string
marionbarker Aug 21, 2026
d0d57d3
update EversenseKit: update logging, credential storage, support Outs…
marionbarker Aug 30, 2026
524f05e
update G7SensorKit: Defer forgetting sensor on suspected session end…
marionbarker Aug 31, 2026
e8e6579
update OmnipodKit: display information text for Omnipod 5 setup (#136)
marionbarker Aug 31, 2026
0f4bee5
update RileyLinkKit: Make autoConnectIDs safe to read off centralQueue
marionbarker Aug 31, 2026
69d4218
Merge pull request #469 from LoopKit/update_dev_to_3.14.4
marionbarker Aug 31, 2026
58efd20
Bump version to 3.14.5
marionbarker Sep 1, 2026
164f5e7
update OmnipodKit: backport fixes for pod keep alive; ble-heartbeat m…
marionbarker Sep 2, 2026
cc2c930
update .circleci config
marionbarker Sep 2, 2026
cc77859
update OmnipodKit: fix simulator-only that prevented circeci tests
marionbarker Sep 2, 2026
bdc39cc
update EversenseKit: fix migration US, Outside US zones
marionbarker Sep 2, 2026
53bcc64
update LoopKit: Fix intermittent testObserverQueryStartup failures
marionbarker Sep 2, 2026
669ef69
update MedrumKit: Bluetooth and dosing updates
marionbarker Sep 2, 2026
0646bf6
update EversenseKit: fix: onboarding api zone
marionbarker Sep 3, 2026
3f71b35
Localization scripts: use the shared PROJECTS list, pin an iOS destin…
ps2 Sep 5, 2026
abfa1cd
Merge pull request #490 from LoopKit/fix/localization-script-projects…
marionbarker Sep 5, 2026
4c51291
Merge branch 'dev' into update_dev_to_3.14.5
marionbarker Sep 5, 2026
f1a7522
fix typo in Script/manual_cleanup
marionbarker Sep 5, 2026
3336cd2
update submodules: Updated translations from lokalise on Fri Sep 4 2…
marionbarker Sep 5, 2026
751c186
Merge pull request #488 from LoopKit/update_dev_to_3.14.5
marionbarker Sep 7, 2026
536303d
Bump version to 3.14.6
marionbarker Sep 9, 2026
e914902
Provide the BLE heartbeat for DASH pods not using a RileyLink (#153)
marionbarker Sep 9, 2026
19871ab
update Loop: Increase spacing and size of main screen Liquid Glass to…
marionbarker Sep 9, 2026
5b5f922
update submodules: Updated translations from lokalise on Thu Sep 10 1…
marionbarker Sep 11, 2026
d6f8eeb
update MedtrumKit: Updated translations from lokalise on Fri Sep 11 0…
marionbarker Sep 12, 2026
be19dc0
update EversenseKit: fix to prevent app crashes
marionbarker Sep 12, 2026
6366917
Merge pull request #493 from LoopKit/update_dev_to_3.14.6
marionbarker Sep 12, 2026
15a883a
Bump version to 3.14.7
marionbarker Sep 13, 2026
a89e370
update OmnipodKit: fix disconnect mid-command when app background
marionbarker Sep 14, 2026
2643b21
Merge pull request #496 from LoopKit/update_dev_to_3.14.7
marionbarker Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
jobs:
build_and_test:
macos:
xcode: 16.4
xcode: 26.4
steps:
- checkout
- run:
name: Checkout submodules
command: git submodule update --init --recursive --depth 1
- run:
name: Install xcbeautify
command: brew list xcbeautify >/dev/null 2>&1 || brew install xcbeautify
- run:
name: Build Loop
command: set -o pipefail && time xcodebuild -workspace LoopWorkspace.xcworkspace -scheme 'LoopWorkspace' -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.5' build | xcpretty
command: set -o pipefail && time xcodebuild -workspace LoopWorkspace.xcworkspace -scheme 'LoopWorkspace' -destination 'platform=iOS Simulator,name=iPhone 17' build | xcbeautify
- run:
name: Run Tests
command: set -o pipefail && time xcodebuild -workspace LoopWorkspace.xcworkspace -scheme 'LoopWorkspace' -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.5' test | xcpretty
command: set -o pipefail && time xcodebuild -workspace LoopWorkspace.xcworkspace -scheme 'LoopWorkspace' -destination 'platform=iOS Simulator,name=iPhone 17' test | xcbeautify --report junit --report-path test-results/results.xml
- store_test_results:
path: test-results
workflows:
version: 2
build_and_test:
Expand Down
12 changes: 4 additions & 8 deletions .github/workflows/build_loop.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
name: 4. Build Loop
run-name: Build Loop (${{ github.ref_name }})
name: 4. Build Loop Manual
run-name: Build Loop Manual (${{ github.ref_name }})
on:
workflow_dispatch:
schedule:
# Check for updates every Sunday
# Later logic builds if there are updates or if it is the 2nd Sunday of the month
- cron: "33 7 * * 0" # Sunday at UTC 7:33

env:
GH_PAT: ${{ secrets.GH_PAT }}
Expand Down Expand Up @@ -175,7 +171,7 @@ jobs:
(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' )
steps:
- name: Select Xcode version
run: "sudo xcode-select --switch /Applications/Xcode_26.4.app/Contents/Developer"
run: "sudo xcode-select --switch /Applications/Xcode_26.5.app/Contents/Developer"

- name: Checkout Repo for building
uses: actions/checkout@v5
Expand Down Expand Up @@ -260,4 +256,4 @@ jobs:
name: build-artifacts
path: |
artifacts
buildlog
buildlog
287 changes: 287 additions & 0 deletions .github/workflows/build_loop_auto.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,287 @@
name: 4. Build Loop Auto
run-name: Build Loop Auto (${{ github.ref_name }})
on:
workflow_dispatch:
schedule:
# Check for updates every Sunday
# Later logic builds if there are updates or if it is the 2nd Sunday of the month
- cron: "33 7 * * 0" # Sunday at UTC 7:33

env:
GH_PAT: ${{ secrets.GH_PAT }}
UPSTREAM_REPO: LoopKit/LoopWorkspace
UPSTREAM_BRANCH: ${{ github.ref_name }} # branch on upstream repository to sync from (replace with specific branch name if needed)
TARGET_BRANCH: ${{ github.ref_name }} # target branch on fork to be kept in sync

jobs:
# use a single runner for these sequential steps
check_status:
runs-on: ubuntu-latest
name: Check status to decide whether to build
permissions:
contents: write
outputs:
NEW_COMMITS: ${{ steps.sync.outputs.has_new_commits }}
IS_SECOND_IN_MONTH: ${{ steps.date-check.outputs.is_second_instance }}

# Check GH_PAT, sync repository, check day in month
steps:

- name: Access
id: workflow-permission
run: |
# Validate Access Token

# Ensure that gh exit codes are handled when output is piped.
set -o pipefail

# Define patterns to validate the access token (GH_PAT) and distinguish between classic and fine-grained tokens.
GH_PAT_CLASSIC_PATTERN='^ghp_[a-zA-Z0-9]{36}$'
GH_PAT_FINE_GRAINED_PATTERN='^github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59}$'

# Validate Access Token (GH_PAT)
if [ -z "$GH_PAT" ]; then
failed=true
echo "::error::The GH_PAT secret is unset or empty. Set it and try again."
else
if [[ $GH_PAT =~ $GH_PAT_CLASSIC_PATTERN ]]; then
provides_scopes=true
echo "The GH_PAT secret is a structurally valid classic token."
elif [[ $GH_PAT =~ $GH_PAT_FINE_GRAINED_PATTERN ]]; then
echo "The GH_PAT secret is a structurally valid fine-grained token."
else
unknown_format=true
echo "The GH_PAT secret does not have a known token format."
fi

# Attempt to capture the x-oauth-scopes scopes of the token.
if ! scopes=$(curl -sS -f -I -H "Authorization: token $GH_PAT" https://api.github.com | { grep -i '^x-oauth-scopes:' || true; } | cut -d ' ' -f2- | tr -d '\r'); then
failed=true
if [ $unknown_format ]; then
echo "::error::Unable to connect to GitHub using the GH_PAT secret. Verify that it is set correctly (including the 'ghp_' or 'github_pat_' prefix) and try again."
else
echo "::error::Unable to connect to GitHub using the GH_PAT secret. Verify that the token exists and has not expired at https://github.com/settings/tokens. If necessary, regenerate or create a new token (and update the secret), then try again."
fi
elif [[ $scopes =~ workflow ]]; then
echo "The GH_PAT secret has repo and workflow permissions."
echo "has_permission=true" >> $GITHUB_OUTPUT
elif [[ $scopes =~ repo ]]; then
echo "The GH_PAT secret has repo (but not workflow) permissions."
elif [ $provides_scopes ]; then
failed=true
if [ -z "$scopes" ]; then
echo "The GH_PAT secret is valid and can be used to connect to GitHub, but it does not provide any permission scopes."
else
echo "The GH_PAT secret is valid and can be used to connect to GitHub, but it only provides the following permission scopes: $scopes"
fi
echo "::error::The GH_PAT secret is lacking at least the 'repo' permission scope required to access the Match-Secrets repository. Update the token permissions at https://github.com/settings/tokens (to include the 'repo' and 'workflow' scopes) and try again."
else
echo "The GH_PAT secret is valid and can be used to connect to GitHub, but it does not provide inspectable scopes. Assuming that the 'repo' and 'workflow' permission scopes required to access the Match-Secrets repository and perform automations are present."
echo "has_permission=true" >> $GITHUB_OUTPUT
fi
fi

# Exit unsuccessfully if secret validation failed.
if [ $failed ]; then
exit 2
fi

- name: Checkout target repo
if: |
steps.workflow-permission.outputs.has_permission == 'true' &&
(vars.SCHEDULED_BUILD != 'false' || vars.SCHEDULED_SYNC != 'false')
uses: actions/checkout@v5
with:
token: ${{ secrets.GH_PAT }}

# This syncs any target branch to upstream branch of the same name
- name: Sync upstream changes
if: | # do not run the upstream sync action on the upstream repository
steps.workflow-permission.outputs.has_permission == 'true' &&
vars.SCHEDULED_SYNC != 'false' && github.repository_owner != 'LoopKit'
id: sync
uses: aormsby/Fork-Sync-With-Upstream-action@v3.4.2
with:
target_sync_branch: ${{ env.TARGET_BRANCH }}
shallow_since: 6 months ago
target_repo_token: ${{ secrets.GH_PAT }}
upstream_sync_branch: ${{ env.UPSTREAM_BRANCH }}
upstream_sync_repo: ${{ env.UPSTREAM_REPO }}

# Display a sample message based on the sync output var 'has_new_commits'
- name: New commits found
if: |
steps.workflow-permission.outputs.has_permission == 'true' &&
vars.SCHEDULED_SYNC != 'false' && steps.sync.outputs.has_new_commits == 'true'
run: echo "New commits were found to sync."

- name: No new commits
if: |
steps.workflow-permission.outputs.has_permission == 'true' &&
vars.SCHEDULED_SYNC != 'false' && steps.sync.outputs.has_new_commits == 'false'
run: echo "There were no new commits."

- name: Show value of 'has_new_commits'
if: steps.workflow-permission.outputs.has_permission == 'true' && vars.SCHEDULED_SYNC != 'false'
run: |
echo ${{ steps.sync.outputs.has_new_commits }}
echo "NEW_COMMITS=${{ steps.sync.outputs.has_new_commits }}" >> $GITHUB_OUTPUT

- name: Show scheduled build configuration message
if: steps.workflow-permission.outputs.has_permission != 'true'
run: |
echo "### :calendar: Scheduled Sync and Build Disabled :mobile_phone_off:" >> $GITHUB_STEP_SUMMARY
echo "You have not yet configured the scheduled sync and build for Loop's browser build." >> $GITHUB_STEP_SUMMARY
echo "Synchronizing your fork of <code>LoopWorkspace</code> with the upstream repository <code>LoopKit/LoopWorkspace</code> will be skipped." >> $GITHUB_STEP_SUMMARY
echo "If you want to enable automatic builds and updates for your Loop, please follow the instructions \
under the following path <code>LoopWorkspace/fastlane/testflight.md</code>." >> $GITHUB_STEP_SUMMARY

# Set a logic flag if this is the second instance of this day-of-week in this month
- name: Check if this is the second time this day-of-week happens this month
id: date-check
run: |
DAY_OF_MONTH=$(date +%-d)
WEEK_OF_MONTH=$(( ($(date +%-d) - 1) / 7 + 1 ))
if [[ $WEEK_OF_MONTH -eq 2 ]]; then
echo "is_second_instance=true" >> "$GITHUB_OUTPUT"
else
echo "is_second_instance=false" >> "$GITHUB_OUTPUT"
fi

# When a scheduled run finds nothing new to build, cancel the run so it shows
# as "cancelled" instead of "success" — a green check should always mean a
# new build was made.
cancel_when_no_build:
needs: check_status
name: Cancel run when there is nothing to build
runs-on: ubuntu-latest
permissions:
actions: write
if: |
github.event_name == 'schedule' &&
!(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') &&
!(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true')
steps:
- name: Cancel the run
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "Repository is up to date and no monthly build is due — cancelling this run so it is not reported as a successful build." >> "$GITHUB_STEP_SUMMARY"
gh run cancel ${{ github.run_id }} --repo ${{ github.repository }}
# Keep the job alive until the cancellation lands, so the run ends as
# "cancelled" rather than completing successfully first.
sleep 300

# Checks if Distribution certificate is present and valid, optionally nukes and
# creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true'
# only run if a build is planned
check_certs:
needs: [check_status]
name: Check certificates
uses: ./.github/workflows/create_certs.yml
secrets: inherit
if: |
github.event_name == 'workflow_dispatch' ||
(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') ||
(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' )

# Builds Loop
build:
name: Build
needs: [check_certs, check_status]
runs-on: macos-26
permissions:
contents: write
if:
| # builds with manual start; if scheduled: once a month or when new commits are found
github.event_name == 'workflow_dispatch' ||
(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') ||
(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' )
steps:
- name: Select Xcode version
run: "sudo xcode-select --switch /Applications/Xcode_26.5.app/Contents/Developer"

- name: Checkout Repo for building
uses: actions/checkout@v5
with:
token: ${{ secrets.GH_PAT }}
submodules: recursive
ref: ${{ env.TARGET_BRANCH }}

# Customize Loop: Download and apply patches
- name: Customize Loop
run: |

# LoopWorkspace patches
# -applies any patches located in the LoopWorkspace/patches/ directory
if $(ls ./patches/* &> /dev/null); then
git apply ./patches/* --allow-empty -v --whitespace=fix
fi

# Submodule Loop patches:
# Template for customizing submodule Loop (changes Loop app name to "CustomLoop")
# Remove the "#" sign from the beginning of the line below to activate:
#curl https://github.com/loopnlearn/Loop/commit/d206432b024279ef710df462b20bd464cd9682d4.patch | git apply --directory=Loop -v --whitespace=fix

# Submodule LoopKit patches:
# General template for customizing submodule LoopKit
# Copy url from a GitHub commit or pull request and insert below, and remove the "#" sign from the beginning of the line to activate:
#curl url_to_github_commit.patch | git apply --directory=LoopKit -v --whitespace=fix

# Submodule xxxxx patches:

# Add patches for customization of additional submodules by following the templates above,
# and make sure to specify the submodule by setting "--directory=(submodule_name)".
# Several patches may be added per submodule.
# Adding comments (#) may be useful to easily tell the individual patches apart.

# Patch Fastlane Match to not print tables
- name: Patch Match Tables
run: |
TABLE_PRINTER_PATH=$(ruby -e 'puts Gem::Specification.find_by_name("fastlane").gem_dir')/match/lib/match/table_printer.rb
if [ -f "$TABLE_PRINTER_PATH" ]; then
sed -i "" "/puts(Terminal::Table.new(params))/d" "$TABLE_PRINTER_PATH"
else
echo "table_printer.rb not found"
exit 1
fi

# Install project dependencies
- name: Install Project Dependencies
run: bundle install

# Sync the GitHub runner clock with the Windows time server (workaround as suggested in https://github.com/actions/runner/issues/2996)
- name: Sync clock
run: sudo sntp -sS time.windows.com

# Build signed Loop IPA file
- name: Fastlane Build & Archive
run: bundle exec fastlane build_loop
env:
TEAMID: ${{ secrets.TEAMID }}
GH_PAT: ${{ secrets.GH_PAT }}
FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}

# Upload to TestFlight
- name: Fastlane upload to TestFlight
run: bundle exec fastlane release
env:
TEAMID: ${{ secrets.TEAMID }}
GH_PAT: ${{ secrets.GH_PAT }}
FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}

# Upload Build artifacts
- name: Upload build log, IPA and Symbol artifacts
if: always()
uses: actions/upload-artifact@v6
with:
name: build-artifacts
path: |
artifacts
buildlog
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Loop is a collaborative project, and contributions of all kinds are welcome. Whe

- 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.
- Documentation contributions are just as valuable as code contributions.

## Branches, commits, and pull requests

Expand Down
2 changes: 1 addition & 1 deletion EversenseKit
Submodule EversenseKit updated 51 files
+353 −0 Common/AES+CCM.swift
+6 −4 Common/EversenseKitDispatchGroup.swift
+151 −74 Common/OSLog.swift
+7 −29 EversenseKit.xcodeproj/project.pbxproj
+2 −3 EversenseKit/API/AuthenticationApi.swift
+25 −18 EversenseKit/API/DMSApi.swift
+10 −9 EversenseKit/API/KeyVaultApi.swift
+20 −25 EversenseKit/Encryption/CryptoUtil.swift
+83 −7 EversenseKit/EversenseCGMManager.swift
+14 −4 EversenseKit/EversenseCGMState.swift
+60 −0 EversenseKit/Models/EversenseApiZone.swift
+27 −6 EversenseKit/Packets/Enums/Alarm.swift
+1 −1 EversenseKit/Packets/Eversense365/GetGlucoseLogValuesPacket.swift
+2 −2 EversenseKit/Packets/Eversense365/PushAlarmWithDataPacket.swift
+1 −1 EversenseKit/Packets/Eversense365/SetVibrateMode365Packet.swift
+7 −4 EversenseKit/Packets/EversenseE3/SetBloodGlucosePointPacket.swift
+2 −2 EversenseKit/Packets/Transmitter365.swift
+21 −21 EversenseKit/Packets/TransmitterE3.swift
+81 −34 EversenseKit/PeripheralManager.swift
+2 −2 EversenseKitTests/CryptoUtilTests.swift
+95 −0 EversenseKitTests/DispatchGroupLifecycleTests.swift
+20 −0 EversenseKitTests/NotificationHeaderTests.swift
+25 −14 EversenseKitTests/PackageTests.swift
+34 −0 EversenseKitTests/PacketLengthGuardTests.swift
+65 −0 EversenseKitTests/ReceivedChunkTests.swift
+4 −0 EversenseKitUI/EversenseCGMManager+UI.swift
+124 −80 EversenseKitUI/EversenseUIController.swift
+1,248 −284 EversenseKitUI/Localizable.xcstrings
+15 −13 EversenseKitUI/ViewModels/Onboarding/Eversense365AuthViewModel.swift
+3 −14 EversenseKitUI/ViewModels/Onboarding/EversenseScanViewModel.swift
+33 −0 EversenseKitUI/ViewModels/PickerGenerator.swift
+44 −50 EversenseKitUI/ViewModels/Settings/AlertHistoryViewModel.swift
+8 −1 EversenseKitUI/ViewModels/Settings/CalibrationHistoryViewModel.swift
+55 −41 EversenseKitUI/ViewModels/Settings/CalibrationViewModel.swift
+46 −36 EversenseKitUI/ViewModels/Settings/DMSSettingsViewModel.swift
+14 −14 EversenseKitUI/ViewModels/Settings/EversenseSettingsViewModel.swift
+2 −6 EversenseKitUI/ViewModels/Settings/InviteNowViewModel.swift
+2 −6 EversenseKitUI/ViewModels/Settings/PlacementGuideViewModel.swift
+4 −8 EversenseKitUI/ViewModels/Settings/TransmitterInfoViewModel.swift
+35 −29 EversenseKitUI/ViewModels/Settings/TransmitterSettingsViewModel.swift
+37 −5 EversenseKitUI/Views/Onboarding/EversenseAuthView.swift
+0 −1 EversenseKitUI/Views/Onboarding/EversenseOnboardingStartView.swift
+0 −1 EversenseKitUI/Views/Onboarding/EversenseScanView.swift
+1 −2 EversenseKitUI/Views/Settings/AlertHistoryView.swift
+0 −1 EversenseKitUI/Views/Settings/CalibrationHistoryView.swift
+5 −2 EversenseKitUI/Views/Settings/CalibrationView.swift
+52 −9 EversenseKitUI/Views/Settings/DMSSettingsView.swift
+0 −1 EversenseKitUI/Views/Settings/EversenseSettingsView.swift
+0 −3 EversenseKitUI/Views/Settings/PlacementGuideView.swift
+0 −1 EversenseKitUI/Views/Settings/TransmitterInfoView.swift
+9 −5 EversenseKitUI/Views/Settings/TransmitterSettingsView.swift
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
source "https://rubygems.org"
gem "fastlane", "2.235.0"
gem "fastlane", "2.237.0"
Loading