Main app screen with live trams & buses positions
Station details screen with live-updated schedule
The bottom sheet can be resized
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
Search feature
Settings screen
In-app language switch

Description 

Public transit app for the German city Halle with live vehicles position on the map and online schedule.

When

March 2021 - March 2022

App features

  • 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).
  • Localization with dynamic language switch support
  • 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.
  • Carthage, SMP for managing Swift dependencies, Mint for managing CLI 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 long 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.
    • Kontakt.io beacons integration (via CoreLocation and Bluetooth)
    • 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.