Skip to content

savnick/FoodScan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FoodScan 📱

Приложение для сканирования штрих-кодов и QR-кодов продуктов с получением информации о пищевой ценности.

🚀 Возможности

  • Сканирование штрих-кодов - распознавание продуктов по штрих-коду
  • Сканирование QR-кодов - чтение QR-кодов с возможностью настройки имени
  • Информация о продуктах - получение данных через OpenFoodFacts API
  • Пищевая ценность - отображение Nutri-Score с цветовой индикацией
  • Ингредиенты - список ингредиентов с поддержкой структурированных данных
  • История сканирования - сохранение всех отсканированных продуктов
  • Поделиться - отправка информации о продукте через стандартные приложения iOS
  • Редактирование названий - возможность изменить название продукта или QR-кода

🏗️ Архитектура проекта

Диаграмма архитектуры

┌─────────────────────────────────────────────────────────────┐
│                        UI Layer                             │
├─────────────────────────────────────────────────────────────┤
│  MainView  │  BarcodeScannerView  │  ProductDetailView     │
│            │                      │                        │
│  ProductRowView  │  ScanningComponents  │  ShareSheet      │
└─────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────┐
│                    Business Logic Layer                     │
├─────────────────────────────────────────────────────────────┤
│  ProductService  │  CoreDataManager  │  CameraManager      │
└─────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────┐
│                      Data Layer                             │
├─────────────────────────────────────────────────────────────┤
│  Product Model  │  Ingredient Model  │  Core Data          │
│                 │                    │  OpenFoodFacts API  │
└─────────────────────────────────────────────────────────────┘

Структура папок

FoodScan/
├── Views/                    # Основные экраны приложения
│   ├── MainView.swift       # Главный экран с историей
│   ├── BarcodeScannerView.swift # Экран сканирования
│   └── ProductDetailView.swift  # Детальная информация о продукте
├── Components/              # Переиспользуемые UI компоненты
│   ├── ProductRowView.swift # Строка продукта в списке
│   ├── ScanningComponents.swift # Компоненты сканирования
│   └── ShareSheet.swift     # Компонент поделиться
├── Services/                # Бизнес-логика и сервисы
│   └── ProductService.swift # Сервис работы с продуктами
├── Managers/                # Менеджеры и контроллеры
│   ├── CoreDataManager.swift # Менеджер Core Data
│   └── CameraManager.swift  # Менеджер камеры
├── Models/                  # Модели данных
│   └── ProductModel.swift   # Модели Product и Ingredient
├── Utils/                   # Утилиты и хелперы
│   └── Utils.swift          # Вспомогательные функции
└── ProductCacheModel.xcdatamodeld/ # Core Data модель

🛠️ Технологии

  • SwiftUI - современный UI фреймворк
  • AVFoundation - работа с камерой и сканирование
  • Core Data - локальное хранение данных
  • Combine - реактивное программирование
  • URLSession - сетевые запросы к API

📱 Основные экраны

Главный экран (MainView)

  • Отображение истории сканированных продуктов
  • Кнопка "Сканировать" для перехода к сканеру
  • Кнопка "Очистить" для удаления всей истории
  • Список продуктов с возможностью просмотра деталей

Сканер (BarcodeScannerView)

  • Камера с областью сканирования
  • Поддержка штрих-кодов и QR-кодов
  • Результаты сканирования с возможностью редактирования названия
  • Анимации и визуальные эффекты

Детали продукта (ProductDetailView)

  • Полная информация о продукте
  • Пищевая ценность (Nutri-Score)
  • Список ингредиентов
  • Возможность редактирования названия
  • Кнопка "Поделиться"

🔧 Компоненты

ProductRowView

Компонент для отображения продукта в списке с иконкой типа (штрих-код/QR-код) и основной информацией.

ScanningComponents

Набор компонентов для сканирования:

  • ScanningArea - область сканирования с рамкой
  • ScannerCorner - углы рамки
  • ScannerLine - анимированная линия сканирования
  • InfoRow - строка информации
  • CustomButtonStyle - кастомный стиль кнопок

ShareSheet

Компонент для поделиться информацией о продукте через стандартные приложения iOS.

🗄️ Модели данных

Product

struct Product: Codable, Identifiable {
    let id: String
    let productName: String?
    let brands: String?
    let ingredients: [Ingredient]?
    let nutriscoreGrade: String?
    let imageUrl: String?
    let categories: String?
    let nutritionGrades: String?
    
    // Computed properties
    var displayName: String
    var brandName: String
    var ingredientsString: String
    var structuredIngredients: [Ingredient]
    var nutritionScore: String
    var nutritionScoreColor: String
}

Ingredient

struct Ingredient: Codable, Identifiable {
    let id: String
    let text: String
}

🔄 Поток данных

  1. Сканирование → CameraManager обрабатывает камеру
  2. Распознавание → AVFoundation определяет тип кода
  3. API запрос → ProductService получает данные о продукте
  4. Сохранение → CoreDataManager сохраняет в локальную базу
  5. Отображение → SwiftUI обновляет интерфейс

🎨 Дизайн

  • Цветовая схема: Синий для штрих-кодов, фиолетовый для QR-кодов
  • Nutri-Score: Цветовая индикация от зеленого (A) до красного (E)
  • Анимации: Плавные переходы и анимации сканирования
  • Карточки: Современный дизайн с тенями и скругленными углами

📊 API

Приложение использует OpenFoodFacts API для получения информации о продуктах:

  • Endpoint: https://world.openfoodfacts.org/api/v0/product/{barcode}.json
  • Поддержка структурированных данных об ингредиентах
  • Информация о пищевой ценности (Nutri-Score)

🔒 Безопасность

  • Запросы к API через HTTPS
  • Локальное хранение данных в Core Data
  • Обработка ошибок сети и API
  • Валидация данных перед сохранением

🚀 Установка и запуск

  1. Откройте проект в Xcode
  2. Выберите симулятор или устройство
  3. Нажмите ⌘+R для запуска
  4. Предоставьте разрешение на использование камеры

📝 Требования

  • iOS 15.0+
  • Xcode 14.0+
  • Swift 5.7+
  • Устройство с камерой (для сканирования)

🤝 Вклад в проект

  1. Fork репозитория
  2. Создайте feature branch
  3. Внесите изменения
  4. Создайте Pull Request

📄 Лицензия

Этот проект распространяется под лицензией MIT.


Создано с ❤️ для здорового питания

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages