In this lab, you will be implementing common iOS view structures to create something that
feels like a “real app”. Navigation bars, tab bars, and collection views are built-in ways to
structure your app’s content. As for the content itself, you will be hitting a remote API for JSON
data to parse into your application. This is a common structure which is used by many popular
apps on the App Store.
Please read this entire PDF prior to starting work on your lab. Every section contains
information relevant to how you will be graded, not just the Requirements section.
This lab requires you to create your own app from scratch, and will take a considerable
amount of time to complete. Begin early and get help as you run into issues.
The goal of this project is to create a movie-searching app, which allows users to find
information about movies. Data will be pulled from The Movie Database’s (TMDb) API (http://
www.themoviedb.org). Users should be able to search for movies, see the results populated in
a collection view, and select a movie to view more details. They should also be able to favorite
a movie, and view all of their saved favorites on a different tab.
[10 points] The app implements a tab bar with at least two tabs: one to search for movies, and
the other for their saved favorites. Each tab should have a custom image (no built-in images).
[15 points] Data is pulled from the API and populated in a collection view with multiple
columns. Each search should return at least 20 movies (less if there aren’t 20 results). JSON
results are processed using the Codable protocol.
[10 points] Users can see the title and an image for each movie.
[10 points] Images are cached to allow for smooth scrolling. This means don’t make a network
request for an image every time a new cell appears on screen. Reuse the cells instead of
creating new ones.
[20 points] Selecting a movie pushes a new view controller onto the navigation stack with a
larger (higher resolution) image and at least 3 additional pieces of information about the movie
(hint: you might have to make an additional API request to get this data).
[10 points] The user can change the search query by editing a text field.
[10 points] A spinner is shown when the data is being pulled from the API, and the request is
done in the background, not locking up the user interface.
[10 points] Users can save a movie to their favorites.
[5 points] Users can delete a movie from their favorites.