Overview

A Netflix-style movie browsing app built entirely with UIKit and Swift. Created as a learning project to understand iOS development with UIKit. The app lets users browse movies and watch trailers from YouTube - basically Netflix but you can’t actually watch the movies, just the trailers. Which, if you think about it, is like going to a restaurant and only being allowed to smell the food. But hey, it works!

This project helped me learn the fundamentals of UIKit, API integration, CoreData, and building polished iOS user interfaces from scratch. Also learned that making a “Netflix clone” sounds way cooler than it actually is when you can only show trailers.

Key Features

  • Movie Discovery: Browse popular, trending, and top-rated movies (just like Netflix!)
  • YouTube Trailers: Watch movie trailers directly in the app (unlike Netflix… you only get trailers here)
  • Movie Details: View information about movies including synopsis, ratings, and release dates
  • Smart Search: Find movies with debounced search that doesn’t spam the API with every keystroke
  • Favorite Movies: Save your favorite movies locally using CoreData (because who doesn’t need a list of movies they can’t watch?)
  • Image Caching: Store movie posters in CoreData so you don’t download them over and over again
  • Category Browsing: Explore movies by different categories
  • Clean UI: Netflix-inspired interface design (I tried my best, okay?)

Technical Highlights

UIKit Development

Built from scratch using UIKit to learn iOS development:

  • UIKit Framework: Used UIKit components for all UI elements and navigation
  • Programmatic UI: Built the interface programmatically without storyboards
  • Table Views & Collection Views: Implemented scrollable movie lists and grids
  • View Controllers: Organized app flow with multiple view controllers
  • Auto Layout: Created responsive layouts that work on different iPhone sizes

API Integration

  • The Movie Database API: Fetched movie data including titles, posters, ratings, and descriptions
  • Network Requests: Made HTTP requests to get movie information
  • JSON Parsing: Processed API responses to display movie data
  • Search Debouncing: Added delay to search input so the API doesn’t get hit with every single letter typed (learned this the hard way after probably making thousands of unnecessary API calls during testing)
  • Image Loading: Downloaded movie poster images and cached them

Data Persistence with CoreData

Implemented CoreData for the first time, which was an adventure:

  • Image Caching: Saved downloaded movie posters in CoreData to avoid re-downloading the same images
  • Favorite Movies: Stored user’s favorite movies locally using CoreData
  • Data Models: Created CoreData entities for movies and cached images
  • CRUD Operations: Implemented Create, Read, Update, Delete operations for favorites
  • Memory Management: Learned that storing too many images in CoreData can make your app slower (whoops)

YouTube Integration

  • Trailer Playback: Embedded YouTube videos to play movie trailers
  • Video Player: Integrated YouTube player for in-app video viewing
  • Trailer Search: Found relevant trailers for each movie

Technical Challenges Solved

  1. Learning UIKit: First time building an iOS app with UIKit, which meant lots of Stack Overflow visits and “why is my UI not updating?” moments
  2. API Data Handling: Managed asynchronous network requests and error handling (after breaking things multiple times)
  3. Search Debouncing: Implemented debounce pattern to prevent API spam - turns out making an API call for every letter someone types is not a good idea. The API would probably ban me if I didn’t fix this.
  4. CoreData Image Caching: Learned CoreData by storing images in it, then learned that maybe CoreData isn’t the best place for lots of large images. But it works!
  5. Favorite System: Built a favoriting system with CoreData that actually persists data between app launches (small wins!)
  6. Responsive Layouts: Made layouts work smoothly across different iPhone screen sizes (after much Auto Layout struggle)

Implementation Details

  • Built with Swift and UIKit framework
  • Programmatic UI development without Interface Builder (because I wanted to suffer a bit more)
  • The Movie Database (TMDB) API for movie information
  • YouTube API for trailer integration
  • Model-View-Controller (MVC) architecture
  • Asynchronous networking with URLSession
  • CoreData for favorites and image caching
  • Debounce pattern for search optimization
  • Timer-based debouncing to reduce API calls during user typing

Lessons Learned

This project was my introduction to serious iOS development with UIKit. Building a complex app like this taught me how iOS apps are structured and how different components work together. Also taught me that calling it a “Netflix clone” when you can only watch trailers is technically accurate but slightly misleading.

I learned about view controllers, table views, collection views, and how to organize code in the MVC pattern. Working with APIs taught me about networking, JSON parsing, and handling asynchronous operations. More importantly, I learned about debouncing search inputs after my initial implementation probably made the TMDB API servers cry.

CoreData was interesting to learn. I used it to cache images and store favorite movies. Looking back, using CoreData for image caching might not be the smartest choice (FileManager exists for a reason), but it worked and I learned a lot about CoreData in the process. Sometimes the “wrong” solution teaches you more than the “right” one.

The favorite movies feature with CoreData taught me about persistent storage and data modeling. It’s oddly satisfying when your data actually survives app restarts - like magic, but with code.

The most fun part was making the UI look and feel like Netflix. It taught me that good design is about the details - animations, spacing, colors, and smooth interactions all matter. My version is like “Netflix at home” but I’m proud of it.

Even though SwiftUI is becoming more popular, learning UIKit gave me a strong foundation in iOS development. Understanding how UIKit works helps me appreciate what SwiftUI does automatically and makes me a better iOS developer overall. Plus, now I can read UIKit code without crying, which is a valuable skill.