Контракт экосистемы v2 (docs/CONTRACT_V2.md): счета, переводы, курсы и базовая валюта в балансе и аналитике; экран «Счета»; выбор счёта при добавлении операции; общие бюджеты (выбор пространства, вход по коду); незнакомые поля и сущности сохраняются без потерь
Исправлено падение при запуске (свойство SyncRecord.entity конфликтовало с CoreData)
ID записей сохраняются в точности как с сервера — нет дублей при правке чужих записей
Оформление в палитре «Лес» и иконка как у BalanceFlutter; суммы с двумя знаками
Новые аватар и баннер, branding/render.sh
Проверено в симуляторе watchOS 27.2 против BalanceServer 1.1.0. Сборка для симулятора и устройства — успешна.
Релиз 3.2.0 (сборка 15).
- Контракт экосистемы v2 (`docs/CONTRACT_V2.md`): счета, переводы, курсы и базовая валюта в балансе и аналитике; экран «Счета»; выбор счёта при добавлении операции; общие бюджеты (выбор пространства, вход по коду); незнакомые поля и сущности сохраняются без потерь
- Исправлено падение при запуске (свойство `SyncRecord.entity` конфликтовало с CoreData)
- ID записей сохраняются в точности как с сервера — нет дублей при правке чужих записей
- Оформление в палитре «Лес» и иконка как у BalanceFlutter; суммы с двумя знаками
- Новые аватар и баннер, `branding/render.sh`
Проверено в симуляторе watchOS 27.2 против BalanceServer 1.1.0. Сборка для симулятора и устройства — успешна.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Sync and store accounts, transfers, rates and the baseCurrency setting;
keep recurring, goal, debt and attachment records as raw payloads.
- Skip unknown entities on pull; preserve unknown payload fields of
transactions, categories and budgets and send them back on re-save.
- Compute balances in integer cents: total balance, analytics and budgets
in the base currency, per-account balances in the account currency,
"нет курса C→B" warning when a rate is missing.
- Read-only accounts screen and an optional account picker when adding a
transaction (currency follows the account).
- Shared ledgers: choose personal or shared in settings, join by code,
separate SwiftData store, cursor and deletion journal per ledger,
X-Balance-Ledger header on sync.
- Hide v2 features and do not push new entities when
GET /v1/capabilities returns 404.
- Keep the wire id of records (lowercase UUID for new ones) so edits of
records created by other clients do not create duplicates.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CoreData treats `entity` as the managed object's entity, so the predicate
`entity == "setting"` became a fetch of an entity named "setting" and the
app aborted at launch ("setting" is not a valid entity name). The model is
new in the unreleased contract v2 change, so no migration is needed.
Verified on the watchOS 27.2 simulator: launch, login to a local
BalanceServer v2, total balance 57 800 ₽ with a USD account converted at
the synced rate and a cross-currency transfer, per-account balances
39 800 ₽ and $200.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Релиз 3.2.0 (сборка 15).
docs/CONTRACT_V2.md): счета, переводы, курсы и базовая валюта в балансе и аналитике; экран «Счета»; выбор счёта при добавлении операции; общие бюджеты (выбор пространства, вход по коду); незнакомые поля и сущности сохраняются без потерьSyncRecord.entityконфликтовало с CoreData)branding/render.shПроверено в симуляторе watchOS 27.2 против BalanceServer 1.1.0. Сборка для симулятора и устройства — успешна.
🤖 Generated with Claude Code
CoreData treats `entity` as the managed object's entity, so the predicate `entity == "setting"` became a fetch of an entity named "setting" and the app aborted at launch ("setting" is not a valid entity name). The model is new in the unreleased contract v2 change, so no migration is needed. Verified on the watchOS 27.2 simulator: launch, login to a local BalanceServer v2, total balance 57 800 ₽ with a USD account converted at the synced rate and a cross-currency transfer, per-account balances 39 800 ₽ and $200. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>