🍺 Brew Finder

A native iOS application built with SwiftUI that helps users discover local breweries through location-based search and real-time filtering.

πŸ”— OpenBreweryDB APIπŸ“± Native iOSπŸ—ΊοΈ MapKit Integration

App Screenshots

app main screen
search by name of app
brewery details screen

πŸ”§ Key Technical Features

Architecture & Design Patterns

MVVM Architecture

Clean separation with @ObservedObject ViewModels for reactive UI updates

NavigationStack

Modern SwiftUI navigation with programmatic routing

Custom Networking Layer

Dedicated NetworkManager with async/await API calls to OpenBreweryDB

Advanced Location Services

Custom LocationManager

CLLocationManager wrapper with delegate pattern implementation

Geocoding Integration

Address-to-coordinate conversion using CLGeocoder for brewery locations

Real-time Location Updates

Dynamic brewery fetching based on user's current GPS coordinates

Interactive Mapping Features

Custom MapKit Integration

Native map view with custom SwiftUI-based annotations

Address Geocoding

Automatic coordinate resolution from brewery street addresses

Custom Map Markers

Branded beer glass icons with brewery information overlays

Real-time Search Implementation

Live Search

Instant brewery filtering with onChange modifier implementation

API Optimization

Space-to-underscore conversion for proper OpenBreweryDB URL encoding

Asynchronous Processing

Task-based API calls preventing UI blocking during network requests

πŸš€ Technical Challenges Solved

Geocoding Pipeline

Built custom address-to-coordinate conversion system using CLGeocoder

Location Permission Flow

Implemented robust authorization handling with proper delegate patterns

Error Handling

Comprehensive error management for location services and geocoding failures

External Integration

Seamless handoff to Apple Maps for turn-by-turn navigation

Live API Integration

Real-time brewery search with proper string formatting and encoding

Async/Await Pattern

Modern Swift concurrency for non-blocking OpenBreweryDB API calls

Dynamic UI Updates

Reactive list updates using Combine's @Published properties

Custom MapKit Implementation

Dynamic annotation system with branded icons and 0.01-degree precision

πŸ› οΈ Technologies Used

SwiftUICore DataCore LocationMapKitURLSessionCombineOpenBreweryDB API

✨ Development Highlights

βœ“Modern Swift concurrency patterns with async/await implementation
βœ“Custom location services with geocoding and external maps integration
βœ“Real-time search with OpenBreweryDB API integration and proper error handling
βœ“Custom MapKit annotations with branded UI components
βœ“Reactive programming with Combine framework for live UI updates
πŸ“±View Source Code on GitHub