A modern iOS app for controlling your Hyundai or Kia vehicle using BlueLink and Kia Connect services. Built with SwiftUI and powered by BetterBlueKit.
- Lock/Unlock your vehicle remotely
- Climate Control with custom temperature, defrost, and seat heating
- Charging Control for electric and plug-in hybrid vehicles
- Real-time Status monitoring
- Electric Vehicles (BEV) - battery level, range, charging status
- Gas Vehicles - fuel level and range
- Plug-in Hybrids (PHEV) - both electric and gas systems
- Home Screen Widgets - quick vehicle status on your home screen
- Lock Screen Widgets - see battery and range at a glance
- Control Center Widgets - lock, unlock, and control climate from Control Center (iOS 18+)
- Live Activities (Beta) - real-time charging progress on your Lock Screen and Dynamic Island
- Apple Watch App - control your vehicle from your wrist
- Watch Complications - battery percentage on your watch face
- Siri Shortcuts - automate vehicle actions with voice commands
- Dark Mode - full support for light and dark themes
- Multiple Accounts - manage vehicles from different accounts
- MFA Support - seamless multi-factor authentication for Kia accounts
- HTTP Logging - detailed request/response debugging
- SwiftData - modern data persistence
- SwiftUI - native iOS user interface
- Async/Await - modern Swift concurrency
- Fake Vehicle Mode - test the app without a real vehicle
BetterBlue/
├── BetterBlue/ # Main iOS app
│ ├── Views/ # SwiftUI views
│ ├── Models/ # SwiftData models
│ ├── Utility/ # Helper classes
│ └── BetterBlueApp.swift # App entry point
├── BetterBlueWatch Watch App/ # Apple Watch app
├── Widget/ # iOS widgets, Control Center, Live Activities
├── WatchWidget/ # Watch complications
├── LiveActivityBackend/ # Backend for Live Activity push notifications
├── BetterBlueKit/ # Swift package for API communication
└── README.md # This file
- BetterBlueKit: Swift package handling all API communication
- SwiftData: Modern Core Data replacement for persistence
- SwiftUI: Declarative UI framework
- Combine/Async: Reactive programming and concurrency
- CloudKit: iCloud sync for settings and accounts
The project uses SwiftLint for code style enforcement:
swiftlint lint- HTTP requests are logged in the app under Settings > HTTP Logs
- Vehicle status can be monitored in real-time
- Fake vehicles support custom scenarios for testing
Live Activities display real-time charging progress on your Lock Screen and Dynamic Island. This feature is off by default and can be enabled in Settings > Widget Settings.
To keep the Live Activity updated, BetterBlue uses a lightweight backend service that sends silent push notifications to refresh the charging status periodically.
- No vehicle information is sent to the backend
- No account credentials leave your device
- Only your device's push token is stored temporarily
- Tokens are automatically deleted after 8 hours
The backend is fully open source - see LiveActivityBackend/ for the source code.
- Credentials: Stored securely in iCloud with SwiftData
- Network: All API calls use HTTPS encryption
- Live Activities: Only push tokens are sent to the backend (no vehicle data)
- Subscription Required: You need an active BlueLink/Kia Connect subscription
- Battery Impact: Frequent remote commands may drain your vehicle's 12V battery
- Rate Limits: Respect API rate limits to avoid account suspension
- Unofficial: This app is not affiliated with Hyundai or Kia
- Terms of Service: Ensure you comply with your vehicle service terms
This project is licensed under the MIT License - see the LICENSE file for details.

