https://github.com/zweigraf/mimi-test
Repository for the Mimi Coding Challenge
https://github.com/zweigraf/mimi-test
Last synced: 6 months ago
JSON representation
Repository for the Mimi Coding Challenge
- Host: GitHub
- URL: https://github.com/zweigraf/mimi-test
- Owner: zweigraf
- License: mit
- Created: 2019-11-06T17:45:40.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-11-14T08:25:24.000Z (over 6 years ago)
- Last Synced: 2024-12-30T00:15:25.526Z (over 1 year ago)
- Language: Swift
- Size: 136 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mimi-test
Repository for the Mimi Coding Challenge
## Scope
- Localization is not taken under consideration. All strings are hardcoded in English.
- Error Handling is limited to alerts shown to the user.
- Tested on Xcode 11.2.1, macOS 10.14.6, iPhone X, iOS 13.2.
- No loading state is implemented.
## Architecture
The architecture is VIPER-ish. Some ideas have been taken but some decisions have been made to reduce the amount of code for this small app. There is no presenter. The PRESENTER's tasks are distributed between the VIEW and the INTERACTOR. Also, there is only one ROUTER for the whole application, whereas in proper VIPER each module would get its own.
Entry point of the application is in SceneDelegate. It creates all dependencies and asks the router to create the main screen. Router injects the dependencies into the screen, creating them (Interactor) when necessary.
## Notes
- I built my own `UITableViewCell` subclass `TableViewCell` due to not getting the image view layouted correctly without glitches when using my async loading class `ImageLoader`.
- I prefer to do all my UI in code.
- All dependencies are created in `SceneDelegate` and injected into places where it's needed via constructor injection.
- Due to the Top Songs info not containing all information about the artist, esp. the track count, there is a ShortArtist and a FullArtist model. The view model that is responsible for the artist information on the top artists page then fetches the detailed information about the artist lazily.
- The player is *very* minimalistic. It only displays the song title & artist name. Obviously it could be extended to show the current AVPlayer state, but I was out of time. And speaking from experience, handling & showing all AVPlayer states gets a bit cumbersome at times.
- No third party code was used.
- No optional task was implemented.