This challenge is designed to assess your iOS engineering skills through the development of a simple weather forecast application. We're looking for innovative solutions that demonstrate strong architectural thinking, clean code principles, an eye for design,and a deep understanding of iOS development best practices.
Implement the requirements below to create a weather forecast application using the OpenWeatherMap API to showcase your ability to design scalable, maintainable, and high-quality iOS software.
Endpoint | Remarks |
---|---|
5 day weather forecast | Note the 3 hour time period in forecast data, this must be aggregated to get daily min/max values. |
GeoCoding API | Fetch coordinates for a text based search term to use in forecast/current weather API calls. |
Current Weather | Fetch current conditions for the given coordinates. |
- Visit OpenWeatherMap
- Sign up for a free account
- Generate an API key from your account dashboard
IMPORTANT: Never commit API keys directly to source control
- In the project root directory, run
cp .env.example .env
. - Add your OpenWeatherMap API key to the copied
.env
file. - Build the project in Xcode to copy the
.env
file to the build directory.
An APIKeyManager
helper is provided for you to access the API key. If the previous two steps are followed then the API key can simply be accessed via APIKeyManager.weatherAPIKey
anywhere in the project.
Important: Pay close attention to the requirement to aggregate 3 hour forecast windows in the 5 day forecast data to get daily min/max forecast values.
These are the general requirements that apply broadyly to the specific functional requirements that are to be implemented.
Important: The project must use Swift & SwiftUI
- Show weather in metric units
- Use provided OpenWeatherMap icons (or SF Symbols).
- Gracefully manage:
- Network connectivity issues
- API errors
- Location permissions
Complete the functional requirements in the order specified below. If all the requirements cannot be implemented in the recomended timeframe we will complete our evaluation based on the completed requirements.
- Automatically fetch and display current weather for the user's current location
- Display 5-day forecast for current location
- Handle location services unavailability gracefully
- Implement city search functionality
- Allow searching locations by city name
- Display search results
- Select a search result to view current weather and five day forecast
- Show 5-day forecast for selected location
- Save favorite locations
- Display a list of saved locations
- Switch between saved locations
- Add unit tests
- Implement offline caching
- Support for multiple temperature units
- Implement a homescreen widgets
- Provide any additional setup instructions
- Include comments explaining complex logic
- Advise our talent acquisition team once you have completed the assessment so that our team can begin their evaluation.
- Estimated completion time: 6 hours
- Focus on quality over complete feature set
If you have any questions or need any clarifications, please reach out to your hiring manager or our talent acquisition team.