Speedcubing timer built with SwiftUI and Redux pattern.
Project was started to learn more about SwiftUI and applying MVVM pattern to it. I decided to change architecture to Redux because it's seems more natural and easier to mantain this particular app where screens are strongly dependent on each other with this approach. MVVM which code is still available to see in 'mvvm' branch.
I decided not to share common data using global variables, so it is shared between screens by passing it to appropriate states when views are created. Redux architecture with any logic happening in reducers make it really easy to write tests for every step when app state is changed.
Data is stored with CoreData.
App is always in dark mode, so it use less energy on devices with OLED screens.
Results View | Timer View | Settings View |
---|---|---|
- Measure your time solving Rubik's cube starting with randomly generated scramble.
- Get new scramble automatically after you finish solve.
- Access details about your previous results by tapping on the list.
- Remove unwanted solves with "edit" button or swipe gesture on row.
- Change cube scramble by selecting different cube in settings (suported: 2x2, 3x3, 4x4).
- Store your results on 10 different session for each cube (ex. one hand, bld)
- Add identifier for each session (ex. "one handed", "bld)
- Turn on preinspection in settings if you need.
- Keep track of your records.
- Add storing data in user defaults.
- Add support for more cubes.