- Fetching and parsing data from API.
- Listing Data.
- Navigation to Details view.
- Search
- Scalability:
- Modularity.
- Performance:
- Adding debounce to avoid misusing the search APIs.
-
IDE & Deployment target:
- XCode 15.3
- Deployment target: 17.2
-
UI:
- UIKit - Programmatic UI
- MVVM with Clean Architecture (UseCase & Router)
-
Principals and Patterns:
- SOLID conformance:
- Features are separated into modules.
- Factory pattern to create each module.
- Repository for formatting backend data.
- Shared Repository to manage communication among modules.
- UseCases for business logic.
- Router for navigation
- SOLID conformance:
-
Dependency Manager:
- Swift Package Manager
-
Dependencies:
Kingfisher: Downloading and caching images from the web.
- Communication among modules is being done using SharedRepository which is being implemented using singleton.
- Caching is not implemented inside the code cause of the time interval for the task.
- All print statements are being wrapped inside
#if DEBUG
to avoid having it printed in production, it's done one time inside an extension. - The errors are being printed just for now, Suppose to handle them in functions and dedicated views for each.
- I didn't focus on the design as was mentioned to be able to finish ASAP.
- Creating caching layer to cache the data.
- Adding pagination for better performance.
- Adding Loading for better UX.
- Be more secure and include the API keys in keychain ot external tool.
- Implement the needed UI formatting in the viewModel not in the View.
- Seperated branch for each feature.
- Unit testing.
- Caching images.
- CI/CD