0% found this document useful (0 votes)
17 views

IOS Coding Assignment

The assignment requires the development of a modular Swift app that connects to the GitHub API to display public repositories of a user, utilizing architectures like Clean Swift, MVVM, or VIPER. Key tasks include implementing modular architecture, lazy loading for repository data, a circular scrolling CollectionView, and a detail screen overlay, along with data persistence using Core Data. The app must adhere to best practices in OOP and POP, include unit tests, and avoid layout warnings.

Uploaded by

Nikhil Sahu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

IOS Coding Assignment

The assignment requires the development of a modular Swift app that connects to the GitHub API to display public repositories of a user, utilizing architectures like Clean Swift, MVVM, or VIPER. Key tasks include implementing modular architecture, lazy loading for repository data, a circular scrolling CollectionView, and a detail screen overlay, along with data persistence using Core Data. The app must adhere to best practices in OOP and POP, include unit tests, and avoid layout warnings.

Uploaded by

Nikhil Sahu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Swift Modular App - Coding Assignment

Objective:
The goal of this assignment is to develop a modular, native Swift app that connects to the GitHub
API and displays public repositories of a speci c user. The app should be cleanly structured using
one of the following architectures:

• Clean Swift (VIP)


• MVVM or MVVM-C
• VIPER
The app should support iOS 13 and later and must be submitted as a .zip le upon completion
along with README le with Instructions.

Kindly do not submit incomplete assignment. It will be rejected for review

Task 1: Modular Architecture & GitHub API Integration

Requirements:

1. Modular Architecture
◦ Implement separate frameworks to organize different functionalities (e.g.,
Networking, Data, UI, and Features).

2. GitHub API Integration


◦ Fetch public repositories from the GitHub API.
◦ You may use your own account or this sample endpoint:
https://api.github.com/users/mralexgray/repos

3. TableView with Lazy Loading


◦ Display repositories in a UITableView.
◦ Implement lazy loading (background API calls) to fetch repository details
ef ciently.
◦ Only fetch and display the latest 3 commits for each repository after the cell is
expanded.

4. CollectionView Inside TableView (Circular Scrolling)


◦ The rst 5 repositories should be shown inside a horizontally scrollable
CollectionView (inside TableView).
◦ The CollectionView should have circular scrolling:
▪ Scrolling left from the rst cell should navigate to the last cell.
▪ Scrolling right from the last cell should loop back to the rst cell.
◦ No third-party libraries should be used for circular scrolling.
fi
fi
fi
fi
fi
fi
fi
5. Commit Data Fetching via Lazy Loading
◦ Do not fetch all commit data at once. Implement background API calls to fetch
commits of only visible cells and show latest 3 commits per repository if available

6. Detail Screen Overlay


◦ Implement a detail screen overlay (instead of navigating to a new screen).
◦ The detail screen should open with a drag gesture and have a close button.

Figma Wireframe for Reference

• Use the provided Figma design to align the UI:


https://www.figma.com/proto/UDfGri4wc6qesEFhY3pDGi/Untitled?node-
id=1-96&scaling=min-zoom&page-id=0%3A1&starting-point-node-
id=1%3A204
SCREEN 1:

Scenario1: Scenario2:
Repo fetched without commits After Commits Fetched with Lazy/ Async API call.
Expand the same cell once you get the commit
list and show latest 3 commits
SCREEN 2:
Detail Screen: Open the screen as overlay on the same list screen with drag gesture or close button
to close the overlay
Task 2: Data Persistence with Core Data
Requirements:

1. Implement a Core Data Persistence Layer



Store repository data locally using Core Data.
2. Modify Data Flow for Of ine Mode

◦ When the app starts:


▪ First, load data from Core Data.
▪ Then, fetch fresh data from GitHub API and update the local storage.
◦ On app relaunch:
▪ Display stored data rst.
▪ Then, request fresh data from GitHub and update the UI accordingly.

What We Care About:


✅ OOP (Object-Oriented) & POP (Protocol-Oriented) principles
✅ Clean Swift (VIP), MVVM-C, or VIPER architecture
✅ Unit Tests & Code Coverage (mandatory)
✅ No Auto Layout constraint warnings or code warnings
✅ Plus Point: If you use the Combine framework for data handling
fi
fl

You might also like