Skip to content

A SwiftUI project that apply Modular Architect & Clean Architect & MVVM-C.

License

Notifications You must be signed in to change notification settings

hoangatuan/iMovie

Repository files navigation

🎬 iMovie

Static Badge

This is a SwiftUI project that applies Modular Architect & Clean Architect. For the presentation layer, I'm using MVVM-C.
Supports iOS 16+

Preface

The purpose I developing this project is I want it to be used as a reference for large scale production apps. Because of that, I don't spend too much efforts in building UI, so the UI is not fancy 😛

Key Features

  • Presentation layer: SwiftUI + MVVM-C + Modern concurrency
  • Clean architecture: Decoupled Presentation, Business Logic, and Data Access layers
  • Modular architecture
  • Navigation using NavigationStack
  • Dependency Injection using CompositionRoot approach, DIContainer & constructor injection to support testing.
  • Cover with unit tests
  • Designed for scalability. It can be used as a reference for building large production apps

Inovates 💡

  • Use Swift Macros to remove duplicate codes

Modular Architecture Diagram

Clean Architecture Diagram

For Clean Architecture, theoratically we should have UseCaseInterface and UseCaseImplementation. However, at this point I feel like bringing Usecase as an extra layer is unncessary.
If we feel like need Usecase layer in future, we will add it.

Why MVVM but not TCA, Redux, ... ?

Please read this great article from @Michael Long. I pretty much agreed with his thoughts.

Getting Started

Set up project

After clone the project, navigate to the project directory, then run this command:

    make

And that's all you need to do to set up the project 🚀

Contribute ⚙️

Feel free to contribute for the project if you want. Here is the figma & api reference:

There are some ways you can contribute to the project:

  1. I've created some tasks under Issues tab. There are bugs, features, ... there. If you want to pick a task, just need to comment on the issue.
  2. If you want to work on a new issue, you can go to Issues tab, and create a new issue to describe what you want to do.

References

These are articles I've written about the process building this project:

  1. How I build Navigation

These are articles that I used as references while developing this project:

  1. Choosing SwiftUI Architecture

About

A SwiftUI project that apply Modular Architect & Clean Architect & MVVM-C.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages