This is the repository regarding Jobsity's iOS coding challenge.
Screen.Recording.2022-11-27.at.12.17.42.mov
- List all of the series contained in the API used by the paging scheme provided by the API.
- Allow users to search series by name.
- The listing and search views must show at least the name and poster image of the series.
- After clicking on a series, the application should show the details of the series, showing the following information: Name, Poster, Days and time during which the series air, Genres, Summary, List of episodes separated by season
- After clicking on an episode, the application should show the episode’s information, including: Name, Number, Season, Summary, Image (if there is one)
- Allow the user to save a series as a favorite.
- Allow the user to delete a series from the favorites list.
- Allow the user to browse their favorite series in alphabetical order, and click on one to see its details.
- Create a people search by listing the name and image of the person.
- After clicking on a person, the application should show the details of that person, such as: Name, Image, Series they have participated in (with a link to the series details)
In order to build this application, you'll need 🛠 Xcode 14+
The project itself doesn't use any external package/dependency, so in order to build on a simulator, the Xcode 14+ requirement is sufficient.
If you want to build it on device, iOS 16 is also a requirement (the deployment target of this project is set to iOS 16). You'll also need a Provisioning Profile to run on device.
I'm also exporting a signed .ipa
file under the distribution
folder case the tester wants to sideload the application on their phones.
This project uses Swiftlint for linting in build scripts and Fastlane as a mean to build the project, test and lint it in pre-commit and pre-push actions.
To install swiftlint
, from the command line, do:
brew install swiftlint
NOTE: This is assuming 🍺 Homebrew as your MacOS
package manager of choice.
fastlane
in this project is run through Bundler. To install Bundler
, do:
gem install bundler
To install fastlane
and its dependencies, from the project's root directory, do:
cd JobsityChallenge && bundle install
To run fastlane
before every commit and push action, from the project's root directory, do:
chmod ug+x .git/hooks/*
echo "cd JobsityChallenge && bundle exec fastlane ci_check" > .git/hooks/pre-commit
echo "cd JobsityChallenge && bundle exec fastlane ci_check" > .git/hooks/pre-push
To add swiftlint
as a build script of the project, on Xcode
, under JobsityChallenge>Build Phases
, add the following Run Script Phase
:
export PATH="$PATH:/opt/homebrew/bin"
if which swiftlint > /dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
This already accounts for known issues with Apple Silicon (M1) Machines (see https://github.com/realm/SwiftLint#xcode)
This project uses a very straightforward, simple and scalable approach of MVVVM-C
(Model - View - ViewModel - Coordinator), using SwiftUI
as its main UI framework.
The main target of the app is JobsityChallenge
, but there's a unit test target as well, named JobsityChallengeTests
.
The application's entry point is when the AppCoordinator
takes hold of the application's window rootViewController
in SceneDelegate
. From there, things should be very easy to follow.