Files
BalanceWatch/README.md
T
wtandClaude Opus 5.5 9cfac1797c
Build / Build (watchOS Simulator) (push) Canceled after 0s
Build / Build (watchOS Device) (push) Canceled after 0s
Restyle the watch app in the «Лес» palette with the Flutter app icon
- BalancePalette (Shared/AppTheme.swift): the palette of BalanceFlutter's
  default preset. Balance card in a green gradient with mint text, income
  teal (↙) and expense deep orange (↗) as in the Flutter app, mint accent
  and a forest «Добавить операцию» button instead of indigo/purple.
- Money shows no kopecks when whole, otherwise exactly two decimals
  («8 480,50 ₽»), like the Flutter client.
- App icon: same artwork as BalanceFlutter (branding/icon.svg), every
  size of AppIcon.appiconset rendered by the new branding/render.sh
  (resvg, bundled Roboto fonts).
- Repository avatar and README banner redrawn in the same style as the
  BalanceFlutter banner, with real simulator screenshots (docs/).

Checked on the watchOS 27.2 simulator (icon in the app grid, home and
accounts screens). Builds for simulator and device.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 02:11:00 +07:00

5.4 KiB
Raw Permalink Blame History

BalanceWatch — личные финансы на Apple Watch

BalanceWatch

Самостоятельное (watch-only) приложение Balance для watchOS 10+, выделенное из монорепозитория Balance (Balance/BalanceWatch + общий код).

Стек: SwiftUI + SwiftData, синхронизация через self-hosted BalanceServer.

Структура

BalanceWatch/
├── branding/             # иконка, аватар и баннер (SVG-исходники, PNG, render.sh)
├── docs/                 # скриншоты для баннера
├── docs/CONTRACT_V2.md   # общий контракт экосистемы v2 (копия, одинаковая во всех репозиториях)
├── BalanceWatch.xcodeproj/
└── BalanceWatch/
    ├── App/              # точка входа и экраны часов
    ├── Models/           # SwiftData-модели (копия из монорепы)
    ├── Shared/           # контейнер SwiftData, тема, ServerSync
    ├── Utilities/        # FinanceCalculations, Money (сотые, курсы), форматирование валют
    ├── Views/Components/ # CategoryIconView
    └── Assets.xcassets   # иконка приложения

Проект использует папки, синхронизируемые с файловой системой (Xcode 16+): любой .swift-файл, положенный в BalanceWatch/, автоматически попадает в таргет — править project.pbxproj вручную не нужно.

Контракт v2

Часы реализуют клиентскую часть docs/CONTRACT_V2.md в компактном виде:

  • синхронизируются и хранятся счета, переводы, курсы и настройка baseCurrency; общий баланс, аналитика и бюджеты считаются в базовой валюте, при отсутствии курса показывается «нет курса C→B»;
  • экран «Счета» (только чтение) с балансами счетов и «Без счёта»; при добавлении операции можно выбрать счёт, валюта следует за счётом;
  • общие бюджеты: в «Настройки → Сервер → Бюджет» выбирается личное или общее пространство, можно присоединиться по коду; данные каждого пространства лежат в отдельном хранилище;
  • регулярные операции, цели, долги, вложения и теги хранятся и не теряются при пересохранении, но интерфейса для них нет; регулярные операции часы не создают;
  • если GET /v1/capabilities отвечает 404 (сервер v1), счета и общие бюджеты скрыты, новые сущности не отправляются.

Сборка

  1. Открыть BalanceWatch.xcodeproj в Xcode 16 или новее.
  2. Выбрать схему BalanceWatch и симулятор Apple Watch.
  3. В Signing & Capabilities при необходимости поменять Team и bundle id (com.tolamironcenko.Balance.watchkitapp).

Из командной строки:

xcodebuild -project BalanceWatch.xcodeproj -scheme BalanceWatch \
  -destination 'generic/platform=watchOS Simulator' build

CI

GitHub Actions (.github/workflows/build.yml) собирает проект на macos-15 с последним стабильным Xcode для двух назначений — watchOS Simulator и watchOS device (без подписи). Запускается на push в main/develop, на pull request и вручную (Run workflow). При падении лог xcodebuild прикладывается к запуску как артефакт.

Важно

Модели, FinanceCalculations.swift и ServerSync.swift — копии общего кода из монорепозитория. Протокол синхронизации и правила расчётов должны совпадать с остальными клиентами Balance: при изменении контракта на сервере переносите правки и сюда.

Оформление

Палитра «Лес» — та же, что у пресета по умолчанию в BalanceFlutter: карточка баланса в зелёном градиенте, доходы бирюзовые (↙), расходы оранжевые (↗), мятный акцент (BalancePalette в Shared/AppTheme.swift). Иконка — тот же рисунок, что у Flutter-приложения (branding/icon.svg).

После правки SVG или скриншотов в docs/ выполни bash branding/render.sh (нужен resvg): скрипт перерисует все размеры иконки в Assets.xcassets/AppIcon.appiconset, branding/avatar.png (512×512) и branding/banner.png (1280×640). Шрифты Roboto лежат в branding/fonts.