finds.dev← search

// the find

Dimillian/MovieSwiftUI

★ 6,526 · Swift · Apache-2.0 · updated Jan 2024

SwiftUI & Combine app using MovieDB API. With a custom Flux (Redux) implementation.

MovieSwiftUI is a demo movie browser app (TheMovieDB API) built entirely in SwiftUI with a hand-rolled Flux/Redux state container. It's aimed at iOS/macOS developers who want to see what a non-trivial, real-world-shaped SwiftUI app looks like, not people who want a TMDB client to actually use.

The Flux implementation is small and readable — a single ObservableObject root state injected via environment, actions dispatched through a reducer, no third-party state library to learn. It's genuinely multi-target (iPhone, iPad, macOS, tvOS) sharing one codebase, which is a decent reference for SwiftUI's cross-platform story circa 2020. Splitting Backend and UI into separate Swift Packages keeps networking/image-loading logic testable and decoupled from views, which a lot of SwiftUI sample apps don't bother with.

Last commit is from January 2024 and it's built against pre-Observation-framework SwiftUI/Combine — the patterns here (ObservableObject, @Published state blobs, manual Flux) are exactly what Apple's newer @Observable macro was designed to replace, so it reads as dated rather than current practice. No tests anywhere in the tree despite the architecture being reducer-based, which is normally the easiest part of an app to unit test. The Flux store is a single monolithic state object with no apparent reducer composition, which won't scale past demo-app size without becoming a bottleneck for unrelated view updates. It depends on a hardcoded TMDB API key setup with no documented way to configure your own without digging through source.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →