ammadakhtar / LeatherTV

LeatherTV inspired application using CLEAN Architecture + MVVM with Custom Transition animation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LeatherTV

Platform Languages

A leatherTV inspired app created with custom transitions

Demo

Features

  • Image Caching
  • Mocked Data Parsing
  • URL / JSON Parameter Encoding
  • Network Requests using URLSession (Mocked Only)
  • HTTP Response Validation (Network Layer)

Cool Features

  • Custom Transition Animation 😉
  • Custom Circular Progress Bar
  • AutoLayout without Storyboards/Xib

Requirements

  • iOS 15.0 (Change this to a lower version in project settings if you are not on latest xcode IDE)
  • Xcode 13
  • Swift 5+

Clean Architecture using MVVM

in Clean Architecture, we have different layers in the application. The main rule is not to have dependencies from inner layers to outers layers. The arrows pointing from outside to inside is the Dependency rule. There can only be dependencies from outer layer inward After grouping all layers we have: Presentation, Domain and Data layers.

  • Domain Layer

    • Domain Layer (Business logic) is the inner-most part of the onion (without dependencies to other layers, it is totally isolated). It contains Entities(Business Models)
  • Presentation Layer

    • Presentation Layer contains UI (UIViewControllers or SwiftUI Views). Views are coordinated by ViewModels (Presenters). Presentation Layer depends only on the Domain Layer
  • Data Layer

    • Data Layer contains Repository Implementations and one or many Data Sources. Repositories are responsible for coordinating data from different Data Sources. Data Source can be Remote or Local (for example persistent database). Data Layer depends only on the Domain Layer. In this layer, we can also add mapping of Network JSON Data (e.g. Decodable conformance) to Domain Models
  • Dependency Direction

    • Presentation Layer -> Domain Layer <- Data Repositories Layer
    • Presentation Layer (MVVM) = ViewModels(Presenters) + Views(UI)
    • Domain Layer = Entities
    • Data Repositories Layer = Repositories Implementations + API(Network) + Persistence DB

Dependencies

  • None 😉.

Installation

  • Clone the repo and open the .xcodeProj file

About

LeatherTV inspired application using CLEAN Architecture + MVVM with Custom Transition animation


Languages

Language:Swift 100.0%