Як розробити мобільний додаток для рецептів
Рецептний додаток — оманливо просте завдання. Список рецептів, детальний екран, список покупок. Але користувач відкриває додаток на кухні: руки в борошні, телефон на відстані витягнутої руки — і екран гасне на 30-й секунді відео з інструкцією. Ось із цього й почнемо. Ми — команда мобільних розробників із досвідом понад 5 років і десятками випущених додатків. Беремося за проєкти будь-якої складності: від MVP до повноцінних продуктів із синхронізацією, соціальними функціями та кастомними UI.
Як Keep Screen Awake впливає на користувацький досвід? — розробка мобільного додатку
Зазначимо: коли користувач на екрані рецепту переходить у режим готування, екран не повинен гаснути. iOS: UIApplication.shared.isIdleTimerDisabled = true при вході на екран, false при виході. Android: window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) у ViewModel через DisposableEffect у Compose або у Fragment. Без цього — найчастіша скарга у відгуках. Додаємо налаштування «завжди ввімкнено в режимі готування» — користувач може вимкнути вручну.
Чому масштабування інгредієнтів потребує точності?
Рецепт — не просто текст. Інгредієнти повинні масштабуватися під кількість порцій, кроки — містити таймери, зображення та вбудоване відео окремих технік.
Модель інгредієнта: quantity: Fraction, unit: MeasurementUnit, name: String, optional: Bool. Тип Fraction важливий — «1 і 1/2 склянки» при множенні на 3 має давати «4 і 1/2», не «4.5 склянки». Реалізуємо як numerator/denominator зі спрощенням через НСД. Це критично для точності: дробові інгредієнти (1/3 чайної ложки) при масштабуванні можуть дати періодичні дроби, які ми зберігаємо як раціональні числа.
Одиниці виміру: підтримуємо конвертацію cups/tablespoons/teaspoons → ml → g (через Measurement<UnitVolume> на iOS, UnitConverter на Android). Користувач обирає систему (метрична/імперська) в налаштуваннях — всі рецепти перераховуються автоматично. У нашому проєкті ми реалізували кешування конвертованих значень, щоб не перераховувати при кожному відображенні.
Пошук і фільтрація: що приготувати з того, що є
Пошук за назвою — мінімум. Корисний пошук: за інгредієнтами («що приготувати з курки та лимона»), за тегами (вегетаріанське, без глютену), за часом готування. На iOS — CoreData з NSPredicate для складних запитів. Повнотекстовий пошук через SQLite FTS5 якщо обсяг рецептів >500. На Android — Room з @Query і FTS4/FTS5 таблицею (@Fts4 entity). Flutter: sqflite + FTS або isar з вбудованим пошуком.
Фільтри комбінуються (І): час ≤ 30 хв + вегетаріанське + є в наявності. «Є в наявності» — користувач вказує, що лежить у холодильнику; додаток шукає рецепти, де всі інгредієнти позначені як available. Цей функціонал потребує грамотної нормалізації БД та індексації — ми використовуємо складені індекси в Room або CoreData.
| Тип пошуку | Інструмент | Продуктивність |
|---|---|---|
| Текстовий | CoreData, Room | Добра до 500 рецептів |
| Повнотекстовий | FTS5 | Відмінна при будь-якому обсязі |
| За інгредієнтами | Зв'язок багато-до-багатьох | Потребує нормалізації |
Покрокові інструкції та вбудовані таймери
Кожен крок рецепту може містити таймер: «варити 8 хвилин». Парсимо числа та одиниці часу з тексту кроку при імпорті. Тап на таймер — запускаємо UNUserNotificationCenter сповіщення через N секунд + локальний countdown. Сповіщення спрацьовує навіть якщо додаток у фоні — це важливо для безпеки (не дати їжі пригоріти).
Кілька таймерів одночасно: користувач готує три страви. Зберігання активних таймерів у UserDefaults/SharedPreferences з точним часом закінчення — при відновленні з фону перераховуємо час, що залишився. У нашому кейсі для одного клієнта ми додали сортування таймерів за часом, що залишився, та вібрацію при завершенні.
Підтримка кількох таймерів реалізується так: зберігайте кожен активний таймер як об'єкт з полями identifier, endTime, recipeId, stepId. Використовуйте UserDefaults або SharedPreferences для персистентності. При отриманні сповіщення відміняйте таймер і оновлюйте UI через спостерігачі. Для відображення використовуйте список, відсортований за часом, що залишився.
Список покупок і синхронізація
Додавання інгредієнтів з рецепту — одним тапом. Об'єднання дублів: «200г борошна» з рецепту 1 + «150г борошна» з рецепту 2 = «350г борошна». Агрегація за одиницями з конвертацією. Групування за категоріями (молочне, овочі, м'ясо) — ручне або автоматичне через простий словник. Синхронізація між пристроями: iCloud NSUbiquitousKeyValueStore (iOS) або Firebase Realtime Database (Android/Flutter).
Процес роботи
Ми працюємо за ітеративною моделлю:
- Аналітика: уточнюємо вимоги, складаємо user stories, проєктуємо екрани у Figma.
- Проєктування: обираємо архітектуру (MVVM+Combine для iOS, MVI+Coroutines для Android), продумуємо модель даних.
- Реалізація: пишемо код, використовуємо SwiftUI/Jetpack Compose для UI, CoreData/Room для зберігання. Паралельно налаштовуємо CI/CD.
- Тестування: unit-тести для бізнес-логіки, UI-тести для критичних сценаріїв. Випускаємо beta через TestFlight/Google Play Console.
- Деплой: публікуємо в App Store та Google Play. Допомагаємо пройти модерацію (політика конфіденційності, ATT для iOS).
- Підтримка: гарантійне обслуговування 30 днів після здачі. Далі — за SLA.
Що входить у роботу
- Вихідний код додатку (репозиторій Git).
- Схема бази даних та документація API.
- Доступи до App Store Connect/Google Play Console.
- Навчання команди замовника (до 2 годин онлайн).
- Технічна підтримка протягом 30 днів.
Строки
Базовий додаток (каталог, пошук, таймери, список покупок) — від 3 тижнів. Повний (соціальна мережа, синхронізація, власні рецепти) — до 8 тижнів. Точні строки розраховуємо після брифу.
Порівняння підходів: iOS vs Android
| Критерій | iOS | Android |
|---|---|---|
| Мова | Swift 5.9+ | Kotlin 1.9+ |
| UI | SwiftUI | Jetpack Compose |
| База даних | CoreData, CloudKit | Room, Firebase |
| Push-сповіщення | APNs (UNUserNotificationCenter) | FCM |
| Фонові задачі | Background Task (BGTaskScheduler) | WorkManager |
| Магазин | App Store | Google Play |
Чому обирають нас?
Ми маємо 5+ років досвіду в мобільній розробці, випустили понад 20 додатків у App Store та Google Play. Гарантуємо якість: кожен білд проходить автоматичне тестування. Використовуємо сучасні підходи: SwiftUI, Jetpack Compose, Combine, Coroutines — ваш додаток буде актуальним ще кілька років. Основні принципи UI беремо з Apple Human Interface Guidelines та Google Material Design.
FTS5 перевершує звичайний SQLite LIKE-пошук у 100 разів для записів із 1000+ рецептів.
Замовте розробку вашого кулінарного додатку — ми підготуємо детальне комерційне пропозицію. Зв'яжіться з нами, щоб обговорити проєкт. Оцінимо ваш проєкт безкоштовно, відповімо протягом доби.







