← Alle projekter

uddannelse

Birdie

Registrér fugle, hvor du står; se alles observationer på et kort

En SwiftUI-app til fuglekiggere - registrér en art med noter og GPS med ét tryk, og se observationer som liste eller på et interaktivt MapKit-kort. Firebase-backend, MVVM med @Observable.

Den fulde case er skrevet på engelsk.

Highlights

  • MVVM with iOS 17 @Observable view-models and a Contracts/ layer of protocols around Firebase and Core Location
  • async/await throughout; Firebase Auth, Firestore and Storage
  • Filter by species, distance or your own entries; reverse-geocoded place names
  • A custom SwiftUI splash animation (a flock of birds and a rising sun)
README.md - birdie-ios▼

Birdie

A birdwatching iOS app built with SwiftUI and Firebase. Log bird sightings at your current location, browse them in a list or on a map, and filter by species, distance, or your own entries.

Features

  • Authentication - Register and log in via Firebase Auth
  • Log sightings - Record a bird species, optional notes, and your GPS location with one tap
  • Sightings list - Scrollable list of all sightings with swipe-to-delete for your own entries
  • Map view - See all sightings plotted on an interactive map
  • Filters - Filter by species, distance from your current location, or show only your own sightings
  • Profile - View and edit your display name and photo

Supported species

Robin, Sparrow, Eagle, Bald Eagle, Hawk, Owl, Blackbird, Finch, Woodpecker, Duck, Swan, Pigeon, Parrot, Falcon, Pelican, Kingfisher, Heron, Toucan

Tech stack

  • SwiftUI + Swift Concurrency
  • Firebase (Auth, Firestore, Storage)
  • MapKit
  • OpenCage Geocoding API - reverse geocoding coordinates to readable locations
  • AlertToast - in-app toast notifications
  • Swift Package Manager

Requirements

  • Xcode 16+
  • iOS 17+
  • A Firebase project with Auth and Firestore enabled
  • An OpenCage API key

Setup

  1. Clone the repo

    git clone https://github.com/CMaintz/Birdie.git
    cd Birdie
  2. Add your Firebase config

    cp Birdie/GoogleService-Info.plist.example Birdie/GoogleService-Info.plist

    Replace the placeholder values with your own from the Firebase console.

  3. Add your OpenCage API key

    cp Birdie/Secrets.plist.example Birdie/Secrets.plist

    Replace YOUR_OPENCAGE_API_KEY with your key from opencagedata.com.

  4. Open in Xcode

    open Birdie.xcodeproj

    Swift Package Manager will resolve dependencies automatically.

  5. Build and run on a simulator or device.

Secrets.plist and GoogleService-Info.plist are listed in .gitignore and will never be committed.

Project structure

Birdie/
├── BirdieApp.swift          # App entry point, dependency wiring
├── Contracts/               # Protocols for services and repositories
├── Controllers/             # Business logic (Auth, BirdSpot, Location, User)
├── Models/                  # Data models (BirdSpot, BirdSpecies, etc.)
├── Services/                # Firebase, Auth, Location, and seeder services
└── Views/
    ├── Auth/                # Login and registration screens
    ├── BirdSpot/            # Sighting list, map, detail, add, filter views
    ├── Misc/                # Root view, splash, empty state, user image
    └── Profile/             # Profile and edit profile views
command.exeesc

↑↓ vælg · Tab udfyld · Enter kør · Esc luk

doom.exe

WASD move · ←→ turn · Space fire · E use · Shift run · Enter menu · licences