Skip to content

Modular MoviesList App using SwiftUI, combine and MVVM with clean architecture.

Notifications You must be signed in to change notification settings

AhmedMenaim/Modular-MoviesList-SwiftUI-MVVM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

Branches

  • Main: All in one, That's consider to be the main branch which holds the base modules, No modularization as everything in the same project.
  • Modularization-Caching-Testing: Recommended to use this branch which contains the complete app with modularization, Testing for movie details module and applying the caching logic on movies module.

Demo

DarkMode + Pagination Search + Details
DarkMode+Pagination Search + Details
Genres Filter LightMode + OfflineState
Genres-Filter LightMode+OfflineState

Requirements:

Functional

  • Fetching and parsing data from API.
  • Listing Data.
  • Navigation to Details view.
  • Search
  • Fetching Genres
  • Filter by Genre
  • Dark mode

Non-Functional:

  • Scalability:
    • Modularity.
  • Performance:
    • Caching.
    • Pagination
    • Handling offline state
  • Reliability:
    • Unit tests.

Diagrams

  • High-Level Diagram High-Level Diagram

  • Low-Level Diagram - MVVM with clean architecture MVVM

Decisions

  • IDE & Deployment target:

    • XCode 15.3
    • Minimum Target: iOS(15)
  • UI:

    • SwiftUI
    • UIKit - Used in Navigation
    • MVVM with Clean Architecture (UseCase & Coordinator)
  • Principals and Patterns:

    • SOLID conformance:
      • Features are separated into modules.
      • Factory pattern to create each module.
      • Repository for formatting backend data.
      • Coordinator to manage navigation & communication among modules.
      • UseCases for business logic.
  • Dependency Manager:

    • Swift Package Manager
  • Dependencies:

    Kingfisher: Downloading and caching images from the web.

    Realm: for chaching the list.

What could be improved

  • Be more secure and include the API keys in keychain or external tool.
  • Pass the parameters in the parameters not the URL
  • Implement the needed UI formatting in the viewModel not in the View.
  • Spliting the logic more in the usecase.
  • Unit testing for the MoviesList.
  • Caching for MovieDetails.
  • CI/CD

About

Modular MoviesList App using SwiftUI, combine and MVVM with clean architecture.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages