Skip to content

SubjectSp1rit/Financify

Repository files navigation

Financify 🐷

iOS-приложение для учета финансов

Swift 6.1 Platform iOS 15+ Architecture MVVM & VIP UI SwiftUI & UIKit SPM

Alamofire SwiftData Animation


О проекте

Financify — это iOS-приложение для управления личными финансами, разработанное с применением современного стека технологий. Проект демонстрирует реализацию сложных технических решений, таких как Offline-First архитектура, гибридный UI на SwiftUI и UIKit, а также продвинутую работу с графикой и анимацией.


Технические особенности и архитектурные решения

1. Offline-First Архитектура и Интеллектуальная Синхронизация

Приложение спроектировано для обеспечения полной функциональности в условиях нестабильного или отсутствующего интернет-соединения.

  • Локальное хранилище на SwiftData: Все данные (счета, транзакции, категории) сохраняются в локальной базе данных SwiftData, что обеспечивает мгновенный доступ и возможность работы в оффлайн-режиме.
  • Очередь отложенных операций: Любые изменения, сделанные в оффлайн-режиме, не теряются, а добавляются в очередь PendingOperation. Каждая операция содержит HTTP-метод, endpoint и payload запроса.
  • Умная синхронизация: SynchronizationService автоматически обрабатывает очередь при восстановлении соединения. Сервис анализирует ответы сервера:
    • Клиентские ошибки (4xx): Считаются неисправимыми (например, невалидные данные) и удаляются из очереди.
    • Серверные ошибки (5xx) или сбои сети: Операция остается в очереди для повторной попытки.
  • Вычисляемый баланс в оффлайн-режиме: BankAccountService обеспечивает актуальность данных даже без сети. При запросе баланса он берет последнее синхронизированное состояние счета и последовательно применяет к нему все операции из очереди, динамически вычисляя текущий баланс.

2. Гибридный UI: Интеграция SwiftUI и UIKit

Проект использует преимущества обоих фреймворков для создания UI.

  • Основной UI на SwiftUI: Большинство экранов реализовано на SwiftUI с использованием архитектуры MVVM для четкого разделения логики и представления.
  • VIP-модуль на UIKit: Экран "Анализа" (AnalysisViewController) построен на UIKit с использованием архитектуры VIP (Clean Swift). Это демонстрирует способность интегрировать модули с разной архитектурой в единое приложение.
  • Бесшовная интеграция: Переход между фреймворками реализован с помощью UIViewControllerRepresentable (AnalysisViewControllerWrapper), что обеспечивает нативную навигацию и гладкий пользовательский опыт.

3. Продвинутая визуализация данных

Графики в приложении являются не статичными изображениями, а интерактивными инструментами анализа.

  • График баланса (Swift Charts): На экране "Счёт" (BalanceView) реализован кастомный график на базе Swift Charts.
    • Интерактивность: Поддерживается скраббинг (DragGesture) с отображением деталей во всплывающем окне и детальная информация по долгому нажатию (LongPressGesture), реализованная в ChartInteractionOverlay.swift.
  • Анимированная круговая диаграмма (Custom UIView): Для экрана "Анализ" была создана собственная PieChartView, вынесенная в локальный Swift-пакет Utilities. Она поддерживает плавные анимированные переходы между различными состояниями данных при фильтрации.

4. Нечеткий поиск (Fuzzy Search)

Поиск по категориям (CategoriesView) устойчив к опечаткам и ошибкам ввода.

  • Алгоритм Дамерау-Левенштейна: В CategoriesViewModel.swift реализован алгоритм нечеткого поиска, который находит релевантные категории, даже если поисковый запрос содержит ошибки. Это значительно улучшает пользовательский опыт.

5. Дополнительные технические решения

  • Анимация запуска (Lottie): Вместо стандартного LaunchScreen используется красивая и плавная анимация, реализованная с помощью Lottie и вынесенная в отдельный локальный пакет LaunchAnimation.
  • Кастомные UI-модификаторы:
    • SpoilerView: Скрывает баланс с эффектом распадающихся частиц на основе CAEmitterLayer (как спойлер в Telegram).
    • ShakeGestureModifier: Позволяет скрывать/показывать баланс по встряхиванию устройства.
  • Сетевой слой (Alamofire): Вся работа с сетью инкапсулирована в NetworkClient, который использует Alamofire для выполнения запросов. Эндпоинты типизированы через enum APIEndpoint.
  • Безопасное хранение ключей: Секретный API_KEY вынесен в файл .xcconfig, который исключен из системы контроля версий (.gitignore).

📦 Зависимости

  • Alamofire: Работа с сетью в Swift.
  • Lottie for iOS: Рендеринг After Effects анимаций.

Сделано с ❤️ и Swift

About

Проект в рамках Летней Школы Мобильной Разработки Яндекса (ШМР) 2025 - 1 этап

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages