Weather Forecast Assigment – iOS – MVP + Clean Architecture
Description
Weather Forecast Assigment is an iOS application built to highlight MVP (Model View Presenter) and Clean Architecture concepts
Run Requirements
- Xcode 12+
- Swift 5
High Level Layers
MVP Concepts
Presentation Logic
View– delegates user interaction events to thePresenterand displays data passed by thePresenterPresenter– contains the presentation logic and tells theViewwhat to presentConfigurator– injects the dependency object graph into the scene (view controller)
Clean Architecture Concepts
Application Logic
UseCase / Interactor– contains the application / business logic for a specific use case in applicationEntity– plainSwiftclasses / structs
Gateways & Framework Logic
Gateway– contains actual implementation of the protocols defined in theApplication LogiclayerPersistence / API Entities– contains framework specific representations
Assignment Application Details
- Overview what I have to do in the assignment application:
- Load data weather, display on view.
- Check search input to make sure the keywords more than three characters berfore trigger search request.
- Check if search request have from Cache (CoreData) before request to the server. This to prevent the request calling to the server at the same time with same request.
- Make new search request to get newest data from server.
- Hande error from server response.
- Store the request & response to CoreData.
- Accessibility supports:
- Scaling text if supported to change the font size.
- The screen reader is enable by VoiceOver.
- Following MVP-Clean Architecture, I have been written:
WeatherPresenter– Return weather data to display on screen, valid input,…SearchWeatherUserCase– Referenced withWeatherPresenterto process the search weather by city name feature, it manipulatesWeathers Entityand comunicates withWeatherGatewayto retrive / persist the weathers entity.WeatherGateway– Implementation of the protocols defined from Use Cases layer.ApiWeatherGateway– Using URLSession to request data from server.LocalPersitenceWeatherGateway– Using CoreData to fetch weather data storaged.
Weatherentity – Contains specific representations, includes:ApiWeatherRequest,ApiWeatherResponse,Weather Entityfrom CoreData.
ToDo
- Unit Tests
- UI Tests
Check List
- The application is a simple iOS application that is written by Swift.
- The application is able to retrieve the weather information from OpenWeatherMaps API.
- The application is able to allow user to input the searching term.
- The application is able to proceed searching with a condition of the search term length must be from 3 characters or above.
- The application is able to render the searched results as a list of weather items.
- The application is able to support caching mechanism so as to prevent the app from generating a bunch of API requests.
- The application is able to manage caching mechanism & lifecycle.
- The application is able to handle failures.
- The application is able to support the disability to scale large text for who can’t see the text clearly
- The application is able to support the disability to read out the text using VoiceOver controls.