Hydra is an unofficial iOS client app for GitHub. I use it to keep practicing various technologies I learned in community.
- 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.
- Xcode 10
- Swift 4.2
- Graffle.app to do concept designing, like class hierarchies, reactive data flow of view models, dependencies graphs etc.
- Sketch.app for static scene & artwork design.
- Principle.app for dynamic UI design.
- MVVM with RxSwift
- Flow
Simply put, flow + view model + view controller + view.
- RxSwift the Swift implementation of ReactiveX.
- RxSwiftExt as extension library for RxSwift.
- RxDataSources + RxRealmDataSources to drive table views and collection views.
- Action to bridge between background transactions and UI states.
- RxGesture to install and use gesture recognizers reactively.
- RxTheme to implement theme switching.
The network stack listed from bottom to top:
- URLSession Foundation URL loading system.
- Alamofire + RxAlamofire for simple request case.
- Moya to construct network abstraction layer.
- RxSwift to provide reactive interface.
- 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.
- Kingfisher + RxKingfisher to manage images loading.
- Texture to optimize essential UI components.
- IGListKit for a better UICollectionView.
- Hero to provide vivid transitions between view controllers.
- Swinject + SwinjectAutoregistration to inject dependencies.
- OHHTTPStubs to stub network requests.
- Quick + Nimble + RxNimble to as basic unit testing frameworks.
- RxTest + RxBlocking to write view model white tests.
- EarlGrey to write in-process integration tests.
- SwiftFormat to prettify Swift code.
- SwiftLint to keep code's quality.
- fastlane to automate development steps.
- Travis CI as CI provider.
- codecov.io as code coverage service.
- Code Climate to keep code maintainability.
- Danger to automate pull request managements and other developing chores.
- 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.
- Sourcery to get rid of flow boilderplates.
Mudox
Hydra is available under the MIT license. See the LICENSE file for more info.