A professional iOS companion app for DJI drones
Telemetry logging, flight analytics, and pilot utilities
SkyTools is a production-ready iOS application designed as a companion tool for DJI Mini/Mavic series drones. Unlike DJI Fly, SkyTools focuses on telemetry logging, flight analytics, and post-flight analysis rather than FPV control.
- β Real-time Telemetry Logging - Battery, GPS, altitude, speed, heading, RC signal
- β Flight Session Management - Automatic session tracking with persistent storage
- β Interactive Flight Map - Visualize flight paths with MapKit (start/finish/home markers)
- β Event Markers - Mark interesting shots, problems, wind conditions during flight
- β Flight Analytics - KPI cards (max altitude, max speed, distance, battery drop)
- β Multi-format Export - JSON, CSV, GPX export for analysis
- β Mock Drone Mode - Test and develop without a physical drone
- β Privacy-First - No user location tracking, all data stored locally
- Language: Swift 5.9+
- UI Framework: SwiftUI
- SDK: DJI Mobile SDK iOS
- Maps: MapKit / CoreLocation
- State Management: Combine + ObservableObject
- Persistence: FileManager + UserDefaults
SkyTools/
βββ SkyTools/ # Main application code
β βββ SkyToolsApp.swift # App entry point + DJI SDK registration
β βββ ContentView.swift # Main TabView (4 tabs)
β βββ DashboardView.swift # Live telemetry + KPI cards
β βββ FlightMapView.swift # Interactive map with flight track
β βββ LogsView.swift # Session history + export
β βββ SystemView.swift # SDK status + settings
β βββ OnboardingView.swift # First launch experience
β βββ SettingsView.swift # App settings
β βββ DroneStore.swift # Central state management (ObservableObject)
β βββ TelemetryLogger.swift # Telemetry logging service
β βββ TelemetryRecord.swift # Telemetry data model
β βββ FlightSummary.swift # Flight analytics
β βββ SessionManager.swift # Session persistence
β βββ ExportManager.swift # CSV/GPX export
β βββ EventManager.swift # Event markers management
β βββ AppSettings.swift # Settings singleton
β βββ MockDroneService.swift # Mock drone for testing
βββ docs/ # Documentation
β βββ DJI_CONNECTION.md # DJI connection guide
β βββ LOCALIZATION.md # Localization settings
β βββ PRIVACY.md # Privacy policy
β βββ PROJECT_REPORT.md # Project report
βββ screenshots/ # App screenshots
βββ Pods/ # CocoaPods dependencies
βββ README.md # Main documentation
βββ LICENSE # MIT License
βββ Podfile # CocoaPods configuration
MVVM-like with centralized state management:
- Model:
TelemetryRecord,FlightEvent,FlightSummary - View: SwiftUI views (
DashboardView,FlightMapView, etc.) - ViewModel:
DroneStore(single source of truth),TelemetryLogger,EventManager
- Xcode 15.0+
- iOS 15.0+ device or simulator
- CocoaPods installed
- DJI Developer Account (for real drone connection)
-
Clone the repository:
git clone https://github.com/Bogdusik/SkyTools.git cd SkyTools -
Install dependencies:
pod install
-
Open the workspace:
open SkyTools.xcworkspace
-
Configure DJI SDK:
- Register your app at DJI Developer
- Add your App Key to
Info.plist(if using real drone) - Set
USE_MOCK_DRONE = falseinSkyToolsApp.swiftfor production
-
Build and run:
- Select your target device
- Build (β+B) and Run (β+R)
SkyTools connects to your DJI drone through the DJI Mobile SDK:
-
Physical Connection:
- Connect your iPhone/iPad to the drone's remote controller via USB cable
- Or connect via Wi-Fi (for supported models like DJI Mini 3 Pro)
-
SDK Connection Flow:
App Launch β DJI SDK Registration β Product Detection β Telemetry Subscription -
Automatic Telemetry:
- Once connected, SkyTools automatically subscribes to telemetry callbacks
- Data flows:
DJI SDK β DroneStore β TelemetryLogger β UI - No manual configuration needed
- DJI Mini series (Mini 2, Mini 3, Mini 3 Pro, Mini 4 Pro)
- DJI Mavic series (Mavic Air 2, Mavic 3, etc.)
- Any DJI drone compatible with DJI Mobile SDK iOS
-
Enable Mock Mode (for testing):
- Set
USE_MOCK_DRONE = trueinSkyToolsApp.swift - App will simulate drone telemetry without hardware
- Set
-
Use Real Drone:
- Set
USE_MOCK_DRONE = false - Connect iPhone to remote controller via USB
- Launch SkyTools
- App will automatically detect and connect to the drone
- Check System tab for connection status
- Set
-
Start Flight Session:
- Connection is automatic (if "Auto Start Session" is enabled in Settings)
- Or manually start from Dashboard
- Telemetry begins logging immediately
- Live Metrics: Battery, altitude, speed, heading, GPS satellites
- Signal Quality: Visual indicators for GPS and RC signal strength
- KPI Cards: Max altitude, max speed, flight distance, battery drop
- Flight Summary: Duration, average speed, total distance
- Flight Track: Visual path of the entire flight
- Markers:
- π’ Start Point - Where the flight began
- π΄ End Point - Final position (for saved sessions)
- π Home Point - Takeoff location
- π Max Distance - Furthest point from home
- π― Event Markers - Custom markers (interesting shot, problem, wind)
- Interactive Controls:
- Pan, zoom, rotate, pitch
- "Follow Drone" button to return to automatic tracking
- Quick Actions: Mark interesting shots, problems, wind conditions
- Custom Events: Add notes and custom event types
- Context: Events are saved with GPS coordinates and timestamps
- Visualization: Displayed on map and in logs
- Automatic Sessions: Start/end based on drone connection (configurable)
- Persistent Storage: All sessions saved to
Documents/Sessions/ - Session History: Browse past flights with date/time
- Export Options: JSON (full telemetry), CSV (tabular), GPX (route)
- Logging Frequency: 1 Hz / 2 Hz / 5 Hz
- Units: Speed (m/s β km/h), Altitude (m β ft)
- Auto Session: Enable/disable automatic session start/end
- Event Markers: Toggle event marker functionality
SkyTools includes a Mock Drone Service for development and testing:
- No Hardware Required: Test all features without a physical drone
- Realistic Simulation: Generates realistic telemetry data
- Full Feature Access: All features work identically to real drone mode
To enable:
let USE_MOCK_DRONE = true // In SkyToolsApp.swiftSkyTools is privacy-first:
- β
No User Location Tracking - App does NOT access device GPS via
CLLocationManager - β Drone Data Only - Only reads drone position from DJI SDK
- β Local Storage - All data stored locally on device
- β No Cloud Sync - No automatic data transmission
- β User-Controlled Export - You decide when to share data
See PRIVACY.md for full privacy policy.
Complete telemetry log with all fields:
{
"sessionId": "...",
"timestamp": "2026-01-08T10:30:00Z",
"battery": 85,
"altitude": 45.2,
"speed": 8.5,
"latitude": 55.8642,
"longitude": -4.2518,
...
}Tabular format for spreadsheet analysis:
timestamp,battery,altitude,speed,latitude,longitude,heading
2026-01-08 10:30:00,85,45.2,8.5,55.8642,-4.2518,180.5
...Flight route for Google Earth / QGIS:
<gpx>
<trk>
<trkseg>
<trkpt lat="55.8642" lon="-4.2518">
<ele>45.2</ele>
<time>2026-01-08T10:30:00Z</time>
</trkpt>
...
</trkseg>
</trk>
</gpx>-
CocoaPods:
pod install pod update
-
Xcode Configuration:
- Open
SkyTools.xcworkspace(not.xcodeproj) - Select your development team
- Configure signing & capabilities
- Open
-
DJI SDK:
- Register at DJI Developer
- Add App Key to
Info.plist(for production)
- Architecture: MVVM-like with centralized state
- Error Handling: Comprehensive error states and user feedback
- Performance: Fixed-rate logging (1/2/5 Hz), memory management (max 1000 records)
- Documentation: Key components have inline comments
- Mock Mode: Full feature testing without hardware
- Real Drone: Field testing with actual DJI drone
- Edge Cases: Empty states, disconnection handling, error recovery
This is a portfolio project, but contributions are welcome:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- DJI - For the Mobile SDK
- Apple - For SwiftUI and iOS frameworks
- Open Source Community - For inspiration and tools
Bohdan Bozhenko
- Portfolio: GitHub
- Email: bogdyn6@gmail.com
SkyTools v1.1 - Production Ready β
- β All core features implemented
- β UI polished and user-friendly
- β Privacy-first architecture
- β Ready for real-world use
- β Portfolio-ready codebase
Built with β€οΈ using Swift & SwiftUI
For DJI drone pilots who want more control over their flight data




