DeFilms

DeFilms — Movie Discovery for iOS

DeFilms DeFilms

iOS 16+ Swift 6 Architecture TMDB API Localization Tests Apple Intelligence

DeFilms is a SwiftUI movie discovery app built with the TMDB API. Designed as a small product rather than a one-off demo — stable navigation, testable state, careful persistence, polished localization, and a user flow that holds together across edge cases.


Architecture

DeFilms/
├── App/                  # Composition root, lifecycle, routing, root views
├── Core/                 # Shared infrastructure
│   ├── Foundation/       # Extensions, validation, utilities
│   ├── Localization/     # L10n manager (EN/TR/AR)
│   ├── Logging/          # Structured logging
│   ├── Navigation/       # Coordinator + router
│   ├── Network/          # Endpoints, network manager, monitoring
│   ├── Security/         # Keychain, biometric auth
│   ├── Settings/         # App settings
│   ├── Storage/          # Core Data models + stack
│   └── UI/               # Theme, reusable components
├── Features/             # Vertical slices
│   ├── Auth/             # Local sign up/sign in, account management
│   ├── Lists/            # Custom movie lists
│   ├── Movies/           # Browse, search, detail, AI picks
│   ├── Onboarding/       # First-run flow
│   └── Settings/         # Preferences, privacy, account
├── DeFilmsTests/         # Unit tests (72 tests)
└── DeFilmsUITests/       # UI tests (16 tests)

Key Design Decisions

Principle Implementation
MVVM + Coordinator ViewModels own screen state, coordinators own navigation — views stay lean
Protocol-driven Networking Repository abstractions with mockable protocols
Feature-oriented Slices Each feature is a vertical slice: models, services, view models, views
Apple Intelligence On-device AI picks via Foundation Models — graceful fallback when unavailable
RTL-aware Localization Full Arabic support with layout-direction handling, not just translated strings
Deterministic UI Tests Seeded launch arguments for consistent test flows
Stale Response Protection Search and pagination guard against out-of-order async responses

Features

Movies

AI Picks

Lists

Settings


Tech Stack

Layer Technology
UI SwiftUI
Concurrency Swift async/await
Networking URLSession + custom network layer
Persistence Core Data + Keychain + CryptoKit
AI Apple Foundation Models
Auth Local (Biometric + Keychain)
Testing XCTest / XCUITest

Testing

Test Suite 'DeFilmsTests' passed
Test Suite 'DeFilmsUITests' passed
Executed 88 tests, with 0 failures

Coverage weighted toward regressions: view model state transitions, validation rules, persistence behavior, navigation-critical flows, async loading and error handling.


Installation

Requirements

Setup

git clone https://github.com/burak-bilgen/DeFilms.git
cd DeFilms
cp Config/Secrets.xcconfig.example Config/Secrets.xcconfig
# Set TMDB_API_KEY in Config/Secrets.xcconfig
open DeFilms.xcodeproj

Select the DeFilms scheme, build and run on iOS 16+ simulator or device.

Config/Secrets.xcconfig is git-ignored. Rotate any TMDB key that was ever committed before public use.


Project Statistics

Metric Value
Swift files ~96 (production)
Unit tests 72
UI tests 16
Localized languages 3 (EN, TR, AR)
Minimum deployment iOS 16.0
External dependencies TMDB API only

Localization

Language Layout
English LTR
Turkish LTR
Arabic RTL

License

MIT License — see LICENSE for details.


Built with SwiftUI + TMDB API by Bilgen Works