Files
BalanceMono/Balance/README.md
T
wt 2c278044bb
Android CI / Build and Test (push) Failing after 21m18s
iOS CI / Build and Test SwiftUI App (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build Unsigned iOS IPA (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build macOS ZIP (push) Canceled after 0s
delete CloudKit and added BalanceFlutter
2026-10-28 15:37:32 +07:00

7.0 KiB

Баланс

Мультиплатформенное приложение для личного бюджета. Apple-клиенты написаны на SwiftUI и SwiftData, Android-клиент находится в соседней папке BalanceAndroid.

Возможности

  • учёт доходов и расходов;
  • редактирование суммы, типа, категории, даты и заметки операции;
  • ручная корректировка общего баланса с сохранением отдельной операции, не искажающей аналитику;
  • категории и заметки к операциям;
  • обзор баланса за текущий месяц;
  • диаграмма расходов по категориям;
  • отдельная аналитика за месяц, 3 месяца или 12 месяцев;
  • график динамики доходов и расходов, структура трат и норма сбережений;
  • месячные лимиты и индикация превышения бюджета;
  • собственные категории с выбором типа, одного из 50 системных значков или эмодзи;
  • ввод собственного эмодзи и расширенная палитра из 24 цветов;
  • редактирование собственных категорий с обновлением связанных операций и бюджетов;
  • поиск и фильтрация операций;
  • выбор валюты: RUB, EUR, USD или SEK;
  • системная, светлая и тёмная тема;
  • экспорт истории в CSV;
  • синхронизация операций, категорий и бюджетов через собственный Go-сервер;
  • регистрация, вход, безопасное хранение сессии в Keychain, ручная и автоматическая синхронизация;
  • смена сервера с обязательной повторной авторизацией;
  • отдельные приложения для iPhone, macOS и Apple Watch;
  • нативное Android-приложение с тем же дизайном, функциями и протоколом синхронизации;
  • Apple Watch: обзор, аналитика, операции с редактированием и удалением, бюджеты, категории, корректировка баланса и настройки;
  • macOS: обзор, полная аналитика, операции, редактирование бюджетов и категорий, корректировка баланса, темы и CSV-экспорт.
  • индивидуальная иконка приложения с единым знаком для iOS, macOS и watchOS.

CSV-экспорт доступен на iPhone и Mac. На Apple Watch доступны все функции управления финансами, адаптированные под компактный экран.

Запуск

  1. Откройте Balance.xcodeproj в Xcode 16 или новее.
  2. Выберите схему Balance, BalanceMac или BalanceWatch.
  3. Выберите подходящий симулятор или устройство.
  4. Нажмите Run (⌘R).

Поддерживаемые системы: iOS 17+, macOS 14+ и watchOS 10+.

Локальное хранение и синхронизация

Проект использует локальное SwiftData-хранилище и собирается с бесплатной Personal Team. Выберите свою Team в Signing & Capabilities и запускайте нужную схему.

Единственный способ синхронизации — собственный Go-сервер. Пока сервер не указан и вход не выполнен, каждое приложение хранит данные только локально.

Собственный сервер

Сервер находится рядом с проектом в папке BalanceServer. Он написан на Go, хранит данные в SQLite и запускается на Linux, Windows и macOS напрямую или через Docker.

  1. Запустите сервер по инструкции BalanceServer/README.md.
  2. Для реального устройства настройте HTTPS. Незащищённый HTTP разрешён приложением только для localhost и 127.0.0.1.
  3. Откройте Настройки → Сервер и синхронизация (на Watch — Настройки → Сервер).
  4. Введите полный адрес, сохраните его и зарегистрируйтесь либо войдите.
  5. Повторите вход на остальных устройствах с тем же адресом и аккаунтом.

При изменении адреса токены и курсор предыдущего сервера удаляются, после чего приложение просит войти заново. Пароли не сохраняются; access/refresh-токены находятся в системном Keychain каждого устройства. В Apple-клиентах синхронизация выполняется сразу после входа, при запуске приложения, затем каждые две минуты. Android использует WorkManager с минимальным системным интервалом 15 минут. Во всех приложениях синхронизацию также можно запустить вручную. Изменения передаются ограниченными пакетами, поэтому большая история операций не загружается в память целиком. Журнал удалений хранится отдельно от SwiftData, чтобы обновления схемы старого локального хранилища не могли аварийно завершить приложение. Клиент и BalanceServer из архива должны обновляться вместе.

Стек

  • SwiftUI
  • SwiftData
  • Swift Charts
  • XCTest
  • собственный Go 1.25 + SQLite сервер
  • Kotlin, Jetpack Compose, Room, WorkManager и Android Keystore

Проект не требует сторонних зависимостей.

Устранение проблем сборки

После перехода с версии 2.0–2.0.2 выполните Product → Clean Build Folder. Если Xcode продолжает использовать старую конфигурацию watchOS target, закройте Xcode и удалите DerivedData для проекта Balance, затем снова откройте проект.