Tally is a local-first SwiftUI app for tracking subscriptions from manual entries and imported transaction files. It is designed for personal finance workflows: see what renews soon, spot price changes, audit overlap, and keep the data on devices the user controls.
- No hosted Tally backend.
- No third-party analytics, ad SDKs, or telemetry SDKs.
- Transaction and subscription data are stored with SwiftData.
- CloudKit sync is optional and uses the user's own Apple/iCloud account when a valid container is configured.
- CSV/XLS/XLSX imports are read from user-selected files.
- Optional local Gemma support downloads
gemma-4-E4B-it-Q4_K_M.gguffrom Hugging Face, then runs inference locally on macOS.
See PRIVACY.md for the full data-flow notes.
Install the macOS app with Homebrew:
brew install --cask chountalas/tap/tallyUpdate it later with:
brew update
brew upgrade --cask tally- Current Xcode with Swift 6 and the Apple platform SDKs used by
project.yml - XcodeGen
- Optional: SwiftLint
Clone with submodules so the legacy XLS importer sources are present:
git clone --recurse-submodules https://github.com/chountalas/tally.git
cd tallyGenerate the project:
xcodegen generateOpen Tally.xcodeproj in Xcode, or build from the command line:
xcodebuild build -project Tally.xcodeproj -scheme Tally -destination 'platform=macOS' -derivedDataPath .build/derivedRun tests:
xcodebuild test -project Tally.xcodeproj -scheme Tally -destination 'platform=macOS' -derivedDataPath .build/derivedThe repo ships local-only public defaults in Config/Tally.xcconfig. The macOS target signs to run locally and keeps App Sandbox enabled. For a real device build or CloudKit sync, copy the example config and set values owned by your Apple developer account:
cp Config/Local.xcconfig.example Config/Local.xcconfigThen edit Config/Local.xcconfig:
TALLY_BUNDLE_IDENTIFIER = com.example.Tally
TALLY_DEVELOPMENT_TEAM = ABCDE12345
TALLY_ICLOUD_CONTAINER_IDENTIFIER = iCloud.com.example.Tally
Config/Local.xcconfig is intentionally ignored by git.
CloudKit entitlements are intentionally not enabled in the public defaults because they require a real Apple developer team and container. If you want iCloud sync, add the iCloud capability in Xcode using your own container, or copy the example entitlement files in Tally/Resources/*.iCloud.*.entitlements.example and point CODE_SIGN_ENTITLEMENTS at your local copies.
If CloudKit is not configured or cannot start, Tally falls back to local-only storage.
- Do not commit real bank exports or screenshots containing personal finance data.
- Do not commit provisioning profiles, certificates, local xcconfig overrides, or API credentials.
- Regenerate
Tally.xcodeprojwithxcodegen generateafter changingproject.yml. - Keep third-party notices current when changing dependencies or bundled assets.
Tally is available under the MIT License. Third-party libraries, assets, models, and trademarks remain under their respective licenses and owner terms; see NOTICE.md.