Income & Expense tracker – iOS App Source Code

Description

Income & Expense tracker – iOS App Source Code

Money- income & expense tracker

Money is a basic income & expense tracker, a budget manager focused on simplicity. The app helps users record their daily transactions and review their financial data daily, weekly, and monthly. Adding transactions is extremely fast and fun because of the excellent animations.

The app is focused on privacy. It stores the data safely in Apple servers using iCloud and it offers secure access using technologies like Keychain, Face ID and Touch ID provided by the system (iOS/iPadOS). Unlike many other financial apps, the app doesn’t require account creation. The user “account” is the Apple ID that’s already signed into the device.

 

Key features

  • NEW iOS 14 configurable widget: Financial Insights.
  • NEW iOS 13 Dark mode.
  • Intuitive and easy to use interface.
  • Categorize transactions and mark them using hashtags.
  • Basic analytics.
  • Search transactions effectively by name, notes or hashtags.
  • System currency and regional settings support.
  • iCloud sync support.
  • Privacy-Focused.
  • Dynamic type accessibility support.
  • Screen lock (Keychain Passcode + Touch ID + Face ID).
  • App Icon shortcut’s.

Future features

Roadmap:

  • macOS and iPadOS support.
  • Export data as a .pdf, image or text (.csv).
  • Receipt reader using CoreVision.
  • Monthly and/or weekly budgets.
  • Better analytics and monthly reports.
  • Track subscriptions (for apps, services, gyms, etc.).
  • Support different currencies than the system.
  • Add images, location, rich links and more to transactions for more detailed information.

Implementation details

  • Code: the app is 4 years old and is implemented in Swift. The IDE used is Xcode.
  • Architecture: follows a Reactive MVVM architecture where each screen has its own view model decoupled from the model and the view.
  • Database: initially, the data was stored locally using Realm but, since we wanted to enable iCloud synchronization, we decided to upgrade the whole app and use CoreData with CloudKit support.
  • Database model:
    • Category (has a name, icon and color)
    • Transaction (can only be assigned to one Category but can handle multiple Article’s and multiple Tag’s)
    • Article (i.e.: transaction X is a Amazon purchase, then the article is what was bought: SSD disk 512GB)
    • Tag (i.e.: #vacations2020)
  • Localization: includes English and Portuguese, and the project is prepared to receive other translations.
  • Interface: some parts of the UI is implemented using SwiftUI and others using Interface Builder.
  • Dependencies:
    • CocoaPods:
      • SwiftDate (used to manipulate the date interval for each filter, i.e., current week based on the device time zone)
      • STRegex (easy to use regular expression parser used in storing a custom date interval in the UserDefaults)
      • PremierKit (a bunch of reusable system helpers)
      • SwiftyAttributes (a convenience NSAttributedString helper)
      • Dodo (used to display error messages)
      • QuickActions (used to setup the app icon shortcut to create transactions)
      • WSLogger (used to log messages with level of severity, i.e., debug, info, warning, error)
      • WSPopup (used to show popups, flexible way to show a view to the screen)
  • Test suite: the project includes unit tests and integration tests of the business logic and core functionalities.

Stack

  • Swift 5.3
  • SwiftUI 2.0
  • Minimum deployment target is iOS 14
  • iCloud
  • CoreData
  • Keychain
  • Widgets
  • Siri Intent Extension

Requirements

  • Apple Developer account.
  • CocoaPods v1.8 or greater.
  • SwiftGen v6.0 or greater.
  • Xcode 12+
  • iOS 14+