YamamotoDesu / iMovie

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

๐ŸŽฌ 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.

License:Apache License 2.0


Languages

Language:Swift 94.4%Language:Python 5.3%Language:Makefile 0.3%Language:Shell 0.1%