Tram schedule with actual route highlighted on the map
Tram schedule with disturbance notes and alerts
Station amenities description
Ride on demand (the bus will only go on the line if there is a request)
Form to book a ride on demand
Parking lot with live count of available spaces and business statistics
Charging station with live count of free spots (two green dots next to the icon)
Map is simplified when the user zooms out
And even more simplified when the user zooms out further
Itinerary search mode
Displaying itinerary on the map
In-app language switch
Public transit app for the German city Halle.
March 2021 - March 2022
Swift 5.3, iOS 13.0+
iPhone app with autolayout.
Full accessibility support. People with disabilities can navigate the city with help of this app. Application announces in loud approaching trams/busses route numbers and destination station name (detected via iBeacon).
Backend: REST API split into microservices mostly implemented in ruby. Websockets implemented in ruby.
SnapshotTesting, and SwiftyMocky for UI & logic tests. AccessibilitySnapshots for accessibility testing. OHHTTPStubs, Swift-Nio for network layer testing and UI tests.
SwiftFormat, SwiftLint and R.swift for code quality control.
Mint for managing Swift dependencies
Live updates for vehicles positions and map data (like number of available spots on the parking) via websockets. Some application data is updated via simple http polling.
Caching and offline mode support. Most of the data is cached and available in offline mode. The data is automatically updated when the app becomes online again.
3rd party services
Mapbox SDK for rendering the map. Intensively patched C++ and shaders code to implement custom transit lines and crossovers on the map.
TestFlight for the beta distribution.
Continuous delivery via fastlane.tools.
My role in project
Sole iOS developer in a fantastic team of backend developers, android developers, designers, QA and managers. I developed the app from scratch and lead it to publishing in the AppStore. Helped Android developer with some pitfalls and complicated points.