Приложение для сканирования штрих-кодов и 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
- Отображение истории сканированных продуктов
- Кнопка "Сканировать" для перехода к сканеру
- Кнопка "Очистить" для удаления всей истории
- Список продуктов с возможностью просмотра деталей
- Камера с областью сканирования
- Поддержка штрих-кодов и QR-кодов
- Результаты сканирования с возможностью редактирования названия
- Анимации и визуальные эффекты
- Полная информация о продукте
- Пищевая ценность (Nutri-Score)
- Список ингредиентов
- Возможность редактирования названия
- Кнопка "Поделиться"
Компонент для отображения продукта в списке с иконкой типа (штрих-код/QR-код) и основной информацией.
Набор компонентов для сканирования:
ScanningArea- область сканирования с рамкойScannerCorner- углы рамкиScannerLine- анимированная линия сканированияInfoRow- строка информацииCustomButtonStyle- кастомный стиль кнопок
Компонент для поделиться информацией о продукте через стандартные приложения iOS.
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
}struct Ingredient: Codable, Identifiable {
let id: String
let text: String
}- Сканирование → CameraManager обрабатывает камеру
- Распознавание → AVFoundation определяет тип кода
- API запрос → ProductService получает данные о продукте
- Сохранение → CoreDataManager сохраняет в локальную базу
- Отображение → SwiftUI обновляет интерфейс
- Цветовая схема: Синий для штрих-кодов, фиолетовый для QR-кодов
- Nutri-Score: Цветовая индикация от зеленого (A) до красного (E)
- Анимации: Плавные переходы и анимации сканирования
- Карточки: Современный дизайн с тенями и скругленными углами
Приложение использует OpenFoodFacts API для получения информации о продуктах:
- Endpoint:
https://world.openfoodfacts.org/api/v0/product/{barcode}.json - Поддержка структурированных данных об ингредиентах
- Информация о пищевой ценности (Nutri-Score)
- Запросы к API через HTTPS
- Локальное хранение данных в Core Data
- Обработка ошибок сети и API
- Валидация данных перед сохранением
- Откройте проект в Xcode
- Выберите симулятор или устройство
- Нажмите ⌘+R для запуска
- Предоставьте разрешение на использование камеры
- iOS 15.0+
- Xcode 14.0+
- Swift 5.7+
- Устройство с камерой (для сканирования)
- Fork репозитория
- Создайте feature branch
- Внесите изменения
- Создайте Pull Request
Этот проект распространяется под лицензией MIT.
Создано с ❤️ для здорового питания