Building a full-stack medical drone app
In the first semester of this year, I took a software-engineering project oriented course at university. The premise was to build a REST-based API for medical drone usage using Java Spring Boot (you could query available drones, their base points, constraints, etc.), and then use that API to build whatever you liked.
The design and building of the REST API was a largely onerous experience due to the formulaic nature of 200-odd students engineering the exact same thing. However, past that point, the course became a lot more enjoyable.
I decided to make an iOS-based app where a user could assign package deliveries to drones which would subsequently be illustrated on Apple Maps. In this way, the user could see a drone’s current location and thus progress in a delivery. Screenshots from the app are shown below.

This app works by first querying the university API for drones, service points and restricted areas. Functions fetching this data are called by respective Views (the Map and Assignment views). Then, with this data, queries can be made to the REST server about the availability of drones for requests.
SwiftUI makes it incredibly easy to make use of Apple’s software libraries, for instance utilising MapKit requires only a few lines of code to get an interactive map view. Adding features such as the restricted areas and service points was fairly straightforward as well; Swift provides various built in classes (e.g Annotation) to do this.
Equivalently, Swift makes HTTP requests straightforward using the JSONEncoder() and JSONDecoder() classes. Swift’s MVVM architecture (Model-View-View Model) is easy to understand and pretty comparable to Spring’s MVC pattern.
The most difficult part of this project was animating and maintaining a stateful representation of moving drones. When a delivery was scheduled, an independent Timer needed to be set up for a drone. I used a dictionary to store current deliveries, which was be updated per tick. Updating this also involved incrementing the drone’s currentIndex by a set amount each move. A check was performed on every tick to determine if the delivery had been completed. Engineering this took longer than I had anticipated, however it was great to see it work.
Overall this was a very enjoyable project to do and a great way to build my skill building apps!
Thanks for reading!
Home