- also widget data is stored in a new userDefaults variable based upon the app bundle to avoid cross-contamination if various versions are installed on the same device
removed widget/watch specific/duplicated extensions, moved common data models to xDrip target and made sure targets are set correctly for all common files.
- Libre 3 or Dexcom G7 as heartbeat
- Libre 3 as heartbeat: avoids the need for audioPlayer that keeps the app alive in the background. When Libre 3 sends data, xDrip4iOS will wake up and fetch a reading from LibreView
- Dexcom G7 as heartbeat: only useful in combination with Loop. Loop must read the Dexcom G7 readings and upload to NightScout. xDrip4iOS will wake up when G7 sends data and will fetch the latest reading from NightScout. This occurs with a delay (Thread.sleep) of 1 second, to give time to loop to upload the reading to NightScout. Sometimes xDrip4iOS is still to early to fetch the reading. In that case, it may help to delete the heartbeat and recreate it.
- OmniPod as heartbeat: for OmniPod users, this is a useful additional heartbeat. OmniPod has the interesting 'feature' to disconnect and reconnect every few minutes. Which allows to call the heartbeat function.
- M5Stack as heartbeat: this is implemented as part of the M5Stack transmitter, it does not appear in the list of heartbeat devices. M5Stack will wake up xDrip4iOS if it didn't receive a reading from xDrip4iOS for more than 5 minutes. This allows xDrip4iOS to download the latest reading and send it to the M5Stack. Needs the latest release of M5stack or M5Stick-C software : https://github.com/JohanDegraeve/M5_NightscoutMon or https://github.com/JohanDegraeve/M5_StickC_xdrip_iOS
- the change required also to re-enable alarms, notifications, badge counter, ... when user has chosen followerBackgroundKeepAliveType disabled
- To use Libre 3 has heartbeat:
- First connect to Libre 3 with official Libre 3 app
- when connected, go to the iOS settings and read and note the name of the Libre (it's not something with ABBOTT in it, it's more like a random string)
- force close the Libre 3 app
- in xDrip4iOS, go to the bluetooth section
- add a new transmitter of type HeartBeat
- select Libre 3
- as transmitter id, fill in the name you read in the iOS settings, just 4 or 5 characters is enough. It's case insensitive.
- click the scan button. (you will not be asked to do NFC scan)
- wait till connected
- now reopen the official Libre 3 app
- To use Dexcom G7 as heartbeat:
- make sure you connected at least once to the Dexcom G7 with the official Dexcom app and/or Loop.
- Not necessary to force close other apps (like Official Dexcom G7 app and Loop)
- go to the iOS settings and read and note the name of the Dexcom G7. It's case insensitive.
- in xDrip4iOS, go to the bluetooth section
- add a new transmitter of type HeartBeat
- select Dexcom G7
- as transmitter id, fill in the name you read in the iOS settings.
- click the scan button. (you will not be asked to do NFC scan)
- wait till connected
- To use OmniPod as heartbeat:
- Force close any other app that connects to the OmniPod (that should only be Loop)
- - in xDrip4iOS, go to the bluetooth section
- add a new transmitter of type HeartBeat
- select OmniPod
- click the scan button
- wait till connected
- you can now reopen Loop
- remove old widget target
- remove references
- remove files
- keep a copy of the localized text files and extensions used by the old widget as they can be re-used (stored in TodayWidgetSaved folder)
- app builds cleanly without anything left of old widget
to avoid adding extra menu lines, use an enum to track the TIR type chosen and allow the user to just chose directly, or cycle through by double-tapping the statistics view
Removed old TIR option based on user-set values in favor of the newer "Time in Tight Range" method.
Two options are now:
- standardized TIR (70-180mg/dL)
- newer TITR (70-140mg/dL)
- https://diatribe.org/time-tight-range-new-diabetes-goal
- added double tap gesture to the statistics view to quickly change between both types.
-
- added transition so that the user is visually shown which limits are changed when changing types
- added localization. Initial translations for EN, ES.
- changed many of the settings menu row descriptions to remove the "?" from them to clean up the look of them.
- initial translations added (EN, ES)
- server connectivity indicator for follower modes to indicate when there is a working connection to the server
- data source URL for Nightscout follower can be hidden during 20 seconds by double-tapping it (for posting screenshots)
- ConstantsDexcomFollower.swift renamed to ConstantsFollower.swift (as it was never related to Dexcom Follower anyway :) )
- replaces the old image-based sensor countdown (only for Libre)
- will now work for all CGM systems that report a sensor start date (or sensor age in the case of Libre)
- if no current/valid data is found, the view remains hidden
- currently showing for Libre 2 EU BLE (14.5 days), compatible Libre via external transmitter (14.5 days), Dexcom G5/G6/One (10.0 days) and LibreLinkUp follower (14.0 days)
- starts at 0% progress for 0d and finishes at 100% progress for maxAge as per above line
- To simply UI, sensor countdown options are removed completely
- All maxAge values are in Constants file for easy updating if ever needed
Reencode all sound files as .caf files with PCM mono LIE16 to prevent AVAudioPlayer() from crashing on locally installed instances via Xcode. This stops AVAudioPlayer from crashing in iOS17.
* Copy FastLane and GitHub Actions for Mac-free install
Copied from FreeAPS-X, not yet adapted to Xdrip4iOS. Originally based on FastLane and GitHub Actions from LoopKit/LoopWorkspace
* Adapt Fastfile and workflow file, rename workflow file to build_xdrip.yml
* Adapt instructions to Xdrip4iOS
* Fastfile: fix scheme (xdrip)
* xDrip.xcconfig: MAIN_APP_BUNDLE_IDENTIFIER = com.$(DEVELOPMENT_TEAM).xdripswift
* Add CURRENT_PROJECT_VERSION = $(CURRENT_PROJECT_VERSION) to xDrip and xdrip4iOS Widget targets
* testflight.md instructions: Add NFC Tag Reading to xdripswift App ID
-and some adjustments to identifier names
* Validate repository secrets
Copied from https://github.com/LoopKit/LoopWorkspace/pull/36
Validate repository secrets (#36)
* Validate repository secrets
Adds support for validation of repository secrets.
* Validate $FASTLANE_KEY as unencrypted PKCS#8
* Number workflows to guide sequential exection
* Add commented-out template for automated builds on push and on schedule (every two months)
Users must uncomment (remove "#") from the start of the lines indicated in the workflow to enable automated builds.
* testflight.md: Add Validate Secrets
instructions, and add numbered workflows.
* testflight.md: Add info about TestFlight on a child’s phone
* testflight.md: add info about steps to re-use for "Browser Builds" of other apps
* Add NFC tag reading capability to TestFlight app from Fastfile
Remove step for manual setup of NFC tag reading capability from testflight.md
* Always upload artifacts
* build_xdrip.yml: remove "secrets" job
No need to validate secrets for every build. This can be done by running Validate secrets manually.
- remove "with: submodules: recursive" from Checkout action
* build_xdrip.yml: Add branch name to run-name
* testflight:md: update instructions
* Build on macos-13 and Xcode 14.3
macos-13 is still in beta as GitHub Actions runner, but works well.
Available Xcode versions are listed here, Xcode 14.2 is currently the default:
https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#xcode
* Remove $(SRCROOT)/ from INFOPLIST_FILE due to build error with Fastlane
INFOPLIST_FILE = "$(SRCROOT)/xdrip/Supporting Files/Info.plist"
Fastlane error:
-Cannot set build number with plist path containing $(SRCROOT)
-Please remove $(SRCROOT) in your Xcode target build settings
More info: https://github.com/fastlane/fastlane/issues/329
* build_xdrip.yml: correct app name (xDrip4iOS) in workflow name
* Sync changes from upstream, and keep repository "alive"
The keep alive action allow scheduled runs beyond the 60 day repo inactivity limit for scheduled GitHub Actions
* build_xdrip: SYNC_UPSTREAM: 'true' / 'false'