GithubHelp home page GithubHelp logo

hanlinag / spender-ios Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 0.0 161.15 MB

The idea of this app is to manage your money & finances, allows you to see your spending by category, set up bill payments, keep track of your incomes, and plan for savings. Web backend service powered by Golang API.

Swift 99.24% Ruby 0.76%
alamofire ios ios-app ios-swift moya mvvm mvvm-swift realm rxswift uikit

spender-ios's Introduction

Spender-iOS

Expense Tracker

spender-logo

The idea of this app is to manage your money & finances, allow you to see your spending by category, set up bill payments, keep track of your incomes, and plan for savings.>


*Disclaimer: This project and documentation are still under constructions such as refactoring, fixing bug. However, the basic funcationalities should be working properly.*

Requirements Specification

Please check the following link for detail: Requirements

Technology Slack

In here, you can learn the following concepts:

  • Passcode with FaceID [LocalAuth Framework + Encryption (Private + Public)]
  • MVVM Design Pattern
  • RxSwift, RxCocoa, RxAlamofire as possible
  • Storage:
  • Custom buttons, text fields, labels
  • Extension concepts
  • Global API handling
  • Custom ViewControllers [OOP Concept]

Design

Please look at the linked PDF file for Low Fedility Design.


Screenshots

screenshot

Usecase Diagram

usecase

ER Diagram

er

Project Structure

  • Current project tries to fit in MVVM design along with RxSwift and RxCocoa.
  • Alamofire and Moya are being used together in order to simplify Network calls in iOS.
  • Data encryption for PIN codes and user’s sensitive are made with the use of FaceID, Secure Enclave and Keychain as possible.
  • Tries to use third party libraries as less as possible for less dependeincy and easier maintainability.

MVVM Design Pattern

This project tries not to implement the business logic inside the View Controller. View Controller is used only to communicate view and view model. Moreover, view controller is being used for UI manipulation.

  • It has 4 layers:
    • View
    • View Controller
    • View Model
    • Model
  • View: is the storyboard itself. It includes the user interface.
  • View Controller: stays between UI View and View Model and acts as the communicator. UI manipulations with codes are done in these classes.
  • View Model: talks to API calls, DB connections, User Defaults via interfaces like Network calls, and DB schemes. All the business logics regarding the application scopes are made in the VMs for simplification sake. VM talks to view controller and data models while trying to obtain business logic inside it.
  • Data Model: perform the same task as in MVC design. Data manipulation are done in this layer as required by the business logic. Data models are for data passing between UI views, to and from APIs, Database and User Defaults.

Therefore, all the business logics will only be done inside VM layer for simplification and maintainability. MVVM design is achieved by using as much as Reactive programming as well as completion handlers. (RxSwift and RxCocoa in this case.)


  • When the business logic actions are fired inside the VMs, the specific event is triggered. As the required View Controller is listening to the event with Observable objects, VC knows instantly when event is being fired, thus UI changes happen simultaneously.
  • Reactive programming simplifies a lot of things ensuring the less codes of having to write handling for UI changes in some cases. Network calls are now a lot easier with RxAlamofire.

reactive-programming

Image Loading/Caching

  • Kingfisher is a very popular image loading pure-swift library available. It contians all the functionalities about caching, managing time out, retrying, adding tranitions, authentication and so on.
  • As the library is still under maintainance, it’s safe to use. For easier mantainnace, Kingfisher will handle all the image loading in UIImage view in this project.

spender-ios's People

Contributors

hanlinag avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.