Vitals Sync is a native iOS SwiftUI app for moving personal vitals from Apple Health into Garmin Connect. It reads weight and blood pressure measurements from HealthKit, checks Garmin Connect for matching records in the selected month, and lets the user upload only measurements that are not already present.
The app runs entirely on-device. It does not use an intermediate server, external database, or cloud sync service.
- Reads weight and blood pressure data from Apple Health.
- Lets the user review one calendar month at a time.
- Compares Apple Health measurements with Garmin Connect records before upload.
- Labels measurements as new, uploaded, or conflicting based on Garmin data.
- Uploads selected new measurements to Garmin Connect.
- Stores Garmin session data only in the iOS Keychain.
- Includes unit tests for Garmin parsing and duplicate detection behavior.
Vitals Sync is designed to keep data local to the user's device.
- Health data is read directly from Apple Health using HealthKit.
- Garmin authentication/session data is stored in the iOS Keychain.
- No personal health data is sent anywhere except Garmin Connect when the user chooses to upload it.
- The project does not include analytics, tracking SDKs, or a backend service.
Garmin Connect does not provide a public consumer API for this use case. Vitals Sync uses private Garmin Connect endpoints observed from Garmin's own clients, including endpoints for weight and blood pressure data.
That means:
- Garmin can change or remove these endpoints at any time.
- Sign-in may be rate-limited by Garmin.
- Upload or lookup behavior may break without notice.
- This project is experimental and intended for personal use.
Use it at your own risk and respect Garmin's terms of service.
- macOS with Xcode
- iOS 18 or later
- An Apple Developer account with HealthKit capability enabled
- A Garmin Connect account
- HealthKit permissions for weight and blood pressure
Open the checked-in Xcode project:
open "Vitals Sync.xcodeproj"Then select the VitalsSync scheme and run on an iPhone. HealthKit access is only useful on a real device with Apple Health data.
The project was generated from project.yml, but the .xcodeproj is checked in so XcodeGen is not required for normal development.
Run the unit tests from Xcode, or with xcodebuild:
xcodebuild test -project "Vitals Sync.xcodeproj" -scheme VitalsSync -destination "platform=iOS Simulator,name=iPhone 16"The app icon is generated by:
swift Tools/generate_app_icon.swiftThe generated asset is stored in VitalsSync/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png.
This is an early personal project. The core workflow is implemented, but Garmin compatibility should be treated as fragile because it depends on private endpoints.