Skip to content
/ splito Public

An open-source iOS group expense management app employing MVVM architecture and SwiftUI. Alternative of popular https://www.splitwise.com

Notifications You must be signed in to change notification settings

canopas/splito

This branch is up to date with main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4b3fcdd Β· Jan 27, 2025

History

87 Commits
Jan 8, 2025
Sep 5, 2024
Jan 22, 2025
Jan 22, 2025
Jan 27, 2025
Jan 22, 2025
Mar 5, 2024
Jan 23, 2025
Feb 6, 2024
Feb 6, 2024
Jul 5, 2024
Jan 23, 2025
Jan 22, 2025
Jul 5, 2024
Jul 26, 2024
Dec 23, 2024
Nov 22, 2024
Nov 22, 2024
Jan 22, 2025
Sep 11, 2024
Sep 5, 2024
Jan 16, 2025
Dec 3, 2024
Dec 3, 2024

Repository files navigation

Splito - Divide, Conquer & Enjoy Together! πŸ’°

Simplifying group expense management is easy and fair among friends and family with advanced tracking, splitting, and settlement features.

Overview

Splito is an open-source expense tracking and splitting application inspired by Splitwise. It simplifies the management of shared expenses πŸ’°, making it easy for users to track πŸ“ˆ, split, and settle costs among friends, family, or group members πŸ‘«.

Whether it's a group trip 🌍, shared household bills 🏠, or any other collective expense, Splito ensures fairness and transparency in cost-sharing with its user-friendly interface and robust features. Users can effortlessly manage debts and settle up πŸ’³ payments within their groups πŸ‘₯.

Download App

Features 🌟

  • Group Management: Create and manage multiple expense groups πŸ‘₯ for different purposes (e.g., games, trips, shared bills).
  • Expense Tracking: Add expenses πŸ’° with relevant details such as description, amount, payer, date, attachments, and notes.
  • Expense Splitting: Split expenses fairlyβš–οΈ among group members or use customizable ratios for precise cost-sharing.
  • Payment Settlement: Simplify πŸ’³ payment settlements to clear outstanding balances with group members.
  • Log History: For complete transparency, Keep track of all past transactions, expenses, and activities within the group.
  • Data Restoration: Recover accidentally deleted data πŸ”„ with the restoration feature, ensuring nothing important is lost.
  • Due Payments Reminders: Get timely notifications πŸ”” for unpaid balances to help you stay on top of your financial commitments.
  • Expense Comments: Add comments πŸ—¨οΈ to individual expenses for additional context or notes.
  • Group Expense Report: Generate detailed reports πŸ“„ for groups, summarizing spending patterns and balances.
  • Multiple Currency Support: Handle expenses and payments with multiple currencies 🌍 for seamless international group usage.

Upcoming Features 🚧

Splito is currently in active development, with exciting new features planned:

  • Expense Categories: Organize expenses into predefined categories πŸ“‚ such as food, travel, or utilities for better clarity.
  • Friends List: Add and manage a list of friends πŸ‘―β€β™‚οΈ to streamline group creation and expense tracking.
  • Custom Filters for Groups: Apply filters πŸ” to sort and view groups based on specific criteria.
  • Spending Charts: Visualize spending habits πŸ“Š with intuitive charts for better financial insights.
  • Group Wallet Support: Introduce a shared group wallet πŸ’Ό for easy contribution and expense deduction.
  • Public Contribution Poll: Allow group members to vote πŸ—³οΈ on contributions for events or shared purchases.
How to Use Splito

How to Use Splito

  • Create a Group βž•:
    • Start by creating a new expense group for your specific need (e.g., a trip to Goa, monthly utilities).
  • Add Members πŸ‘₯:
    • Invite friends, family, or colleagues to join the group.
  • Track Expenses πŸ“ˆ:
    • Add expenses as they occur, detailing the amount, who paid, and any relevant notes.
  • Split Costsβš–οΈ:
    • It uses flexible splitting options to divide expenses fairly among group members.
  • Payment Settlements πŸ’³:
    • Settle up the payment with any other group member as any payment occurs.

Screenshots

Group List Group Expense List Expense Add/Update
Expense Split Options Expense Detail Group Balance
Group Summary Payment Add/Edit Payment Details
Payment List Activity Log History

Project Setup βš™οΈ

Make sure you have the latest stable version of Xcode installed. Then, you can clone this repository to Xcode.

Notes πŸ“

  • If you're contributing to the project, make sure to create your own Firebase project and follow the steps above to configure the required files.
  • Ensure that you update the GoogleService-Info.plist and Secrets.xcconfig file with your own Firebase project values to build and run the app successfully.
  • Sensitive data such as REVERSE_CLIENT_ID and other keys are not included in the repository for security purposes.

To clone and run the Splito project locally, please follow these steps:

1. Requirements βœ…

  • Xcode: Version 15.4 or higher.
  • iOS: Version 16.4 or higher.
  • Firebase: A Firebase project set up in the Firebase Console.

2. Creating the Config Settings File πŸ› οΈ

  • Create a Secrets.xcconfig File.
  • Add the following configuration values to a new file named Secrets.xcconfig in the Splito directory:
// APP INFO
app_name = Splito
app_bundle = com.*****.splito // as per your choice.
app_version_name = 1.0.0
app_version_code = 1000000

3. Firebase Setup πŸš€

  • Create a Firebase Project:

    • Go to the Firebase Console.
    • Create a new project and configure it with the same bundle ID used in the project.
  • Enable Firebase Services:

    • Authentication (Phone, Google, and Apple login).
    • Firestore (For storing user data).
  • Download GoogleService-Info.plist:

    • After setting up Firebase, download the GoogleService-Info.plist file from the Firebase Console.
    • Add this file to the project directory under Splito/Plist/GoogleService-Info.plist.

4. Configuring Reverse Client ID πŸ”‘

  • Set Up Google Login:
    • Obtain the REVERSE_CLIENT_ID from your Firebase project's Google Sign-In setup.
    • Add this value to the Secrets.xcconfig file in the following format:
  GOOGLE_REVERSE_CLIENT_ID = com.googleusercontent.apps.************-********.....
  • Reference in Info.plist:
    • The project is configured to use environment variables for sensitive data.
    • The REVERSE_CLIENT_ID is dynamically added to Info.plist during the build process.

5. Environment Variable for Deployment 🌐

  • The Secrets.xcconfig file and GoogleService-Info.plist are base64-encoded and stored securely in GitHub secrets for CI/CD purposes.
  • During deployment, these files are decoded and added to the project.
  • For more detail, you can check this deployment script.

Tech stack πŸ“š

Splito utilizes the latest iOS technologies and adheres to industry best practices. Below is the current tech stack used in the development process:

  • MVVM Architecture
  • SwiftUI
  • Concurrency
  • Combine + Swift
  • Swinject for DI
  • SwiftLint for Lint
  • Cloud Functions
  • Firebase Firestore
  • Firebase Authentication
  • CocoaLumberjack for Logging

Contribution 🀝

The Canopas team enthusiastically welcomes contributions and project participation! There are a bunch of things you can do if you want to contribute! The Contributor Guide has all the information you need for everything from reporting bugs to contributing entire new features. Please don't hesitate to jump in if you'd like to, or even ask us questions if something isn't clear.

Credits

Splito is owned and maintained by the Canopas team. You can follow them on X at @canopassoftware for project updates and releases. If you are interested in building apps or designing products, please let us know. We'd love to hear from you!

License πŸ“„

Splito is licensed under the Apache License, Version 2.0.

Copyright 2024 Canopas Software LLP

Licensed under the Apache License, Version 2.0 (the "License");
You won't be using this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.