Search and explore movies, TV series, and people β powered by TMDB β with fast results and rich detail pages.
| Media Detail | Person Detail |
|---|---|
![]() |
![]() |
- Multi-search (Movie / TV / Person): One query returns mixed results and routes to the correct detail experience.
- Rich detail screens: Movie/Series pages include metadata, top cast, and a backdrop gallery; Person pages include biography and an image carousel.
- Polished UX: Scroll-to-hide search bar, keyboard dismiss-on-drag, and async image loading for smooth browsing.
- Genre caching: Genre mappings are persisted with Core Data and refreshed periodically to keep lookups fast and offline-friendly.
- Language: Swift 5
- UI Framework: UIKit (programmatic UI + Auto Layout)
- Architecture: MVVM-ish (View Controllers + Views) with a service layer and dependency injection for testability
- Concurrency: Swift Concurrency (async/await +
Task) - Data Persistence: Core Data (plus UserDefaults for last refresh timestamp)
- Networking: URLSession (TMDB v3 API)
- Dependency Manager: None (no SPM/CocoaPods dependencies)
- Challenge: Keeping search + multiple detail screens responsive while fetching extra data (details, credits, images) on-demand.
- Solution: Built a small service layer with async/await endpoints, injected services into the view model for testability, and updated UI via lightweight callbacks.
- Learning: Clear separation (service
βοΈ view modelβοΈ UI) makes it easier to iterate on UI/UX without rewriting networking or persistence.
- iOS 26+
- Xcode 17+
- Clone the repository:
git clone https://github.com/keyursavalia/CineScope.git
- Add your TMDB API token:
- Create
MovieApp/Configuration/APIKey.plist - Add a string key named
TMDB_API_TOKENwith your TMDB v4 access token (without theBearerprefix)
- Create
- Open
MovieApp.xcodeproj - Select a simulator and press Cmd + R
- Keyur Savalia - LinkedIn


