Разработка мобильного приложения для заметок и To-Do
Кажется, что приложение для заметок — это «hello world» мобильной разработки. На самом деле здесь больше нюансов, чем в большинстве B2B-продуктов: синхронизация без конфликтов, rich-text редактор, быстрый поиск по тысячам заметок, виджеты на экране блокировки. Каждый из этих пунктов — отдельная техническая задача.
Локальное хранение: Room или Core Data
На Android — Room с отдельными таблицами для заметок, тегов, задач и вложений. На iOS — Core Data или SwiftData (iOS 17+). SwiftData проще в настройке, но ещё молодой — для продакшена с миграциями пока надёжнее Core Data.
Структура для комбинированного приложения заметок + To-Do:
@Entity data class Note(
@PrimaryKey val id: String = UUID.randomUUID().toString(),
val title: String,
val body: String, // plain text или Markdown
val isPinned: Boolean = false,
val color: Int? = null,
val updatedAt: Long = System.currentTimeMillis()
)
@Entity data class TodoItem(
@PrimaryKey val id: String = UUID.randomUUID().toString(),
val noteId: String?, // связь с заметкой, если вложен
val text: String,
val isDone: Boolean = false,
val dueDate: Long? = null,
val priority: Int = 0
)
FTS5 (Room) / NSPersistentContainer с NSFetchRequest и NSPredicate — для поиска. На 10 000 заметок поиск должен работать мгновенно.
Rich-text или Markdown
Выбор редактора — одно из ключевых решений.
Plain text с Markdown-рендерингом: проще реализовать, легче синхронизировать (diff работает на уровне строк). Рендеринг через Markwon (Android) или AttributedString с кастомным парсером (iOS). Подходит для технических пользователей.
Rich-text (WYSIWYG): на Android — RichEditor или Quill.js внутри WebView; на iOS — RichTextKit или кастомный UITextView с NSTextAttachment. Сложнее в реализации, но привычнее для массовой аудитории.
В обоих случаях содержимое заметки сохраняем в формате, который легко диффить — Markdown или JSON-дельты (Delta format из Quill).
Синхронизация
Для личного приложения без сервера — iCloud через CloudKit (iOS) или Google Drive API (Android/cross-platform). Обе платформы дают автоматическую синхронизацию без собственного backend.
Для собственного backend — CRDT (Conflict-free Replicated Data Types) или operational transforms. Для заметок чаще достаточно last-write-wins по updatedAt с явным merge-конфликтом, показываемым пользователю.
Оффлайн-режим обязателен: все изменения записываются локально, синхронизируются при появлении сети через WorkManager / BGAppRefreshTask.
Виджеты
Виджет с последними заметками или задачами на сегодня — через WidgetKit (iOS 14+) / AppWidgetProvider (Android). Данные для виджета — App Group (iOS) или ContentProvider (Android), чтобы виджет читал из той же базы.
На iOS 16+ — Lock Screen виджеты через WidgetKit с systemSmall конфигурацией.
Что входит в работу
- Локальная база заметок и задач с тегами
- Редактор (plain text / Markdown / rich-text по выбору)
- FTS-поиск по содержимому
- Синхронизация (iCloud / Google Drive / собственный backend)
- Виджеты на главный экран и экран блокировки
- Напоминания через
UserNotifications
Сроки
MVP: заметки + To-Do с локальным хранением и поиском — 2–3 недели. Полноценное приложение с синхронизацией, виджетами и rich-text редактором: 6–8 недель.







