KacperWybranski / SpeedcubeTimer

Speedcubing timer built with SwiftUI and Redux pattern

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SpeedcubeTimer

Speedcubing timer built with SwiftUI and Redux pattern.

Table of contents

About

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.

Screenshots

Results View Timer View Settings View
IMG_3772 IMG_3768 IMG_3867
IMG_3769 IMG_3774 IMG_3771

Features

  • 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.

Future plans:

  • Add storing data in user defaults.
  • Add support for more cubes.

About

Speedcubing timer built with SwiftUI and Redux pattern


Languages

Language:Swift 100.0%