/hydra

An unofficial GitHub iOS client demo app.

Primary LanguageSwiftMIT LicenseMIT

Hydra

Platform Swift Version GitHub license Travis (.com) codecov Code Climate maintainability

Hydra is an unofficial iOS client app for GitHub. I use it to keep practicing various technologies I learned in community.

Sketch Screenshot

Project Targets

  • Practice UI/UX designing tool (Sketch.app etc.)
  • MVVM (with RxSwift) architecture.
  • Use FRP paradigm as much as possible, use it correctly and efficiently.
  • Stand-alone network abstraction layer (GitHubKit) using state-of-art techniques.
  • Utilize CI automation tools.
  • Experiment IB-less UI developing (i.e. no .xib, .storyboard files, only source code). The key is to draw out design first in dedicated tools (Omini Graffle.app, Sketch.app etc.)
  • Localization for 🇨🇳 , 🇺🇸.
  • Unit & UI tested with decent code coverage.

Technologies

Requirements

  • Xcode 10
  • Swift 4.2

Designing

  • Graffle.app to do concept designing, like class hierarchies, reactive data flow of view models, dependencies graphs etc. Example Data Flow Chart
  • Sketch.app for static scene & artwork design.
  • Principle.app for dynamic UI design.

Architecture

Simply put, flow + view model + view controller + view.

FRP

Network

The network stack listed from bottom to top:

Data Model

  • SwiftyUserDefaults to access UserDefaults type-safely.
  • Realm + RxRealm to construct local data model layer.
  • Valet to store user password and app authorization token into Keychain.

UI

Testing

Code quality

CI

My Own Libraries

  • JacKit for better logging.
  • GitHubKit as main part of data model layer, which is a Swift client of GitHub APIv3.
  • MudoxKit as my own iOS tool belt library.
  • SocialKit for social sharing.

Other

  • Sourcery to get rid of flow boilderplates.

Author

Mudox

License

Hydra is available under the MIT license. See the LICENSE file for more info.