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.
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)
| 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 |
| 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 |
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.
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.xcconfigis git-ignored. Rotate any TMDB key that was ever committed before public use.
| 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 |
| Language | Layout |
|---|---|
| English | LTR |
| Turkish | LTR |
| Arabic | RTL |
MIT License — see LICENSE for details.
Built with SwiftUI + TMDB API by Bilgen Works