This iOS project was created as a challenge for Fuze.cc interview process, but I decided to leave it public as an example of my work. I also intend to update it every so often to test or play around with some things, including Github features.
Important
Due to equipment's limitations this project was developed using Xcode 14.2, which means I was unable to use some modern features like Swift Macros.
The candidate must build an app that will display a list of Counter-Strike matches happening across several worldwide tournaments.
- There are 3 screens:
- Splash Screen - This screen will show the app logo, and should be displayed every time the app is launched for a given amount of time before the main screen is shown.
- Main Screen (Matches List) - This screen will display a list of matches, beginning from the current date. The list should be sorted so that currently playing matches will appear on top. Each match will show basic data like the League, Teams, date and time, as well as its status. The status can be: Ended, In Progress, and Scheduled.
- Match Detail Screen - This screen will appear when the user selects a match from the main screen. Aside from the data shown in the matches list, this will also display the players from each team, with their respective names, nicknames, and pictures.
- UI must follow the Figma spec. Attention to detail is a must.
- The PandaScore API will be used for listing the matches as well as fetching match details.
- Dates shown should follow the device local time.
- The app must have pull-to-refresh in the main screen to reload the matches list.
- Usually expected to be finished within one week.
- Optionals:
- Unit tests
- MVVM architecture
- Pagination support
- Reactive programming (RxSwift / Combine)
- Responsiveness
Content of the Figma file added here for easy of access.
I implemented the project using SwiftUI with MVVM. It fulfils all requirements except for pagination support because I lacked the time to properly implement it.
Some other details:
- The app is localized in English and Portuguese and should show the correct date format for any region.
- As stated above, I had to use Xcode 14.2 due to my equipments limitations, it's possible that there will be some differences when running on a newer version.
- I would usually use a tool like SwiftLint for keeping the code style consistent, but I decided to not use any dependencies in this project. For the same reason I ended up not using SwiftGen for generating code related to the resources, instead I wrote my own code to access them and included Unit Tests to avoid problems.
- Unfortunately the image available on Figma for the splash screen was not a vector and pretty small, so it ends up looking a little weird.
- I usually prefer to use merge commits when merging branches, but due to my mistake while using Xcode's Git tools, the branches were effectively rebased on top of main.
- To run the app properly you'll need to set your PandaScore API token on PandaEndpoint.accessToken.
- Since the Figma specs didn't include details on how to display errors, I left the error treatment very basic.
- Sometimes the API does not have a valid
URL
for an image, so the grey placeholder is kept.
You can check the code as it was at the time of delivery with the tag v1.0.0.
Below is a video demo of the app running, the language was set to English and region to United States through the scheme.