Skip to content

Latest commit

 

History

History
60 lines (50 loc) · 2.2 KB

File metadata and controls

60 lines (50 loc) · 2.2 KB

Tech Stack — Pok-API

Platform

  • iOS 15.0+ (minimum deployment target)
  • Swift 5.9+ / Xcode 15+
  • UIKit (pure, no SwiftUI)

Architecture

  • MVVM + Clean Architecture
  • Layers: Domain → Data → Presentation
  • Constructor-based dependency injection (no heavy DI frameworks)

Dependencies (SPM)

Library Purpose Version
SnapKit Programmatic Auto Layout latest
Kingfisher Image loading + caching (Combine support) latest

Native Frameworks

  • Combine — Reactive data binding, networking pipelines
  • URLSession — HTTP networking (via dataTaskPublisher)
  • Foundation — JSON decoding, caching

Dependency Management

  • Swift Package Manager (SPM) — Apple-native, Xcode-integrated

API

  • PokeAPI v2https://pokeapi.co/api/v2/
  • No auth required, GET-only, fair use policy

Local Storage

  • UserDefaults — Favorites list (simple key-value)

Project Structure

Pok-API/
├── Application/          # AppDelegate, SceneDelegate, DI Container
├── Domain/
│   ├── Entities/         # Pokemon, PokemonSpecies, EvolutionChain
│   ├── UseCases/         # FetchPokemonListUseCase, FetchPokemonDetailUseCase
│   └── Repositories/     # Repository protocols
├── Data/
│   ├── Network/          # APIClient, Endpoints
│   ├── DTOs/             # API response models
│   └── Repositories/     # Repository implementations
├── Presentation/
│   ├── PokemonList/      # VC, ViewModel, Cells
│   ├── PokemonDetail/    # VC, ViewModel, Views
│   ├── Search/           # Search VC, ViewModel
│   └── Common/           # Base classes, Extensions, Reusable views
└── Resources/            # Assets, LaunchScreen

Design Decisions

  1. URLSession + Combine over Alamofire — Native, zero-deps, better for learning Combine
  2. Kingfisher over SDWebImage — Native Combine support, cleaner API
  3. SPM over CocoaPods — Apple standard, no extra tooling
  4. Feature-based folder structure — Each screen self-contained under Presentation/
  5. No heavy DI — Simple constructor injection, YAGNI