Weather-Sample CodeChallenge for XXXXXXX

by Dmitrii Zverev. 7 Feb 2021 (updated 23 March 2021 with MVVM + Coordinator)

Coding Assignment

Implement an iOS native app using Swift 5.2 to demonstrate your skills, ability to write clean and maintainable code and attention to details.

Given Instructions:

Use a UITableViewController to display weather information of Sydney, Melbourne and Brisbane as start.

  • Provide a way to add more cities using another modal view controller which includes a search functionality to find a city by name or location.
  • City IDs o Sydney, Melbourne and Brisbane are: 4163971, 2147714, 2174003 o More city can be found from the following link: http://bulk.openweathermap.org/sample
  • Each cell should display at least two pieces of info: Name of city on the left, temperature on the right.
  • Get real time weather information using https://openweathermap.org/current - You can register and get your API key for free.
  • A sample request to get weather info for one city: o http://api.openweathermap.org/data/2.5/weather?id=4163971&units=metri c&APPID=your_registered_API_key
  • Weather should be automatically updated periodically.
  • Use Storyboard and Autolayouts.
  • It is fine to use 3rd party libraries via CocoaPods or by other means, but try to avoid using 3rd party library for Networking.
  • Please commit your code as you proceed with appropriate commit message.

Brownie Points:

  • MVVM.
  • Coordinator.
  • Unit tests and try to avoid using 3rd library like RxSwift.
  • Use an activity indicator to provide some feedback to user while waiting for network response.
  • Allow user to tap on a cell to open a new “Detail view”, to show more information about the city such as current weather summary, min and max temperature, humidity, etc.
  • Try to use table view or collection view to display details.
  • In the “Detail view”, implement animations to enhance the user experience.
  • Support all different dimensions of the devices.
  • Support landscape and portrait view together.