Skip to content

iOSMahmoudSaad/QPN_Task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

31 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎬 Movie List App

A simple yet clean Movie Listing iOS application built with Swift, using UIKit - SwiftUI and ** Clean Architecture (MVVM) with Coordinator pattern**. It integrates with the TMDB API to fetch and display movie data and allows users to mark movies as favorites using Core Data for local persistence.


πŸ“± Features

  • βœ… Fetch and display a list of popular movies from TMDB.
  • πŸ“ Each movie item in the list shows:
    • Title
    • Release date
    • Rating (average vote)
    • Vote count
    • Favorite button (toggle and persist)
  • πŸ“„ Tap on a movie to view a detail screen showing:
    • Movie poster
    • Release date
    • Original language
    • Full description (overview)
  • 🌐 Network calls are handled using async/await with Combine for reactivity.
  • πŸ“¦ Offline Support:
    • Popular movies are cached locally to allow viewing without internet.
    • Uses User Default to persist movie lists and details.
    • App automatically falls back to cached data when offline.

🧱 Architecture

The app is structured using Clean Architecture (MVVM) with the Coordinator pattern to handle navigation and separation of concerns.

Main Technologies:

  • UIKit: Interface and view building.
  • SwiftUI: Declarative UI framework for building modern, reactive user interfaces across all Apple platforms.
  • MVVM: architecture for separation of UI and business logic.
  • Clean Architecture: Layered architecture to separate concerns and promote testability, scalability, and maintainability.
  • Coordinator Pattern: For decoupling navigation logic.
  • Combine: For reactive data binding and state management.
  • Async/Await: For modern and clean asynchronous code.

πŸ“¦ Dependencies

  • Combine (built-in)
  • TMDB REST API (via URLSession)

πŸ“Έ Screenshots

Movie List Movie Details
List Detail

πŸ› οΈ Setup Instructions

  1. Clone the repository:

    git clone https://github.com/iOSMahmoudSaad/QPN_Task.git
  2. Open the .xcodeproj or .xcworkspace file.

  3. Insert your TMDB API key in the appropriate configuration (usually in a Secrets.plist or constant file):

    let apiKey = "YOUR_TMDB_API_KEY"
  4. Build and run on simulator or real device.


πŸ§ͺ Future Improvements

  • Search functionality.
  • Add Favourite Screen .

πŸ‘¨β€πŸ’» Author

Mahmoud Saad iOS Engineer Feel free to reach out on LinkedIn

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages