iOS-приложение для управления напоминаниями с поддержкой Live Activities, виджетов и синхронизацией через iCloud.
Напоминания
- Создание, редактирование и удаление напоминаний
- Три уровня приоритета: низкий, средний, высокий (с цветовой маркировкой)
- Повторяющиеся напоминания: ежедневно, еженедельно, ежемесячно, ежегодно
- Поиск по названию и описанию
- Фильтрация по приоритету
- Группировка по дате: сегодня, завтра, на этой неделе, по месяцам
Live Activities
- Живой счётчик обратного отсчёта на экране блокировки и в Dynamic Island
- Цветовые статусы: ожидание (синий), скоро (оранжевый), истекло (красный)
- Автообновление каждые 30 секунд
- Запуск и остановка прямо из списка напоминаний
Уведомления
- Локальные уведомления со звуком и бейджем
- Поддержка повторяющихся расписаний
Виджет
- Виджет на рабочем столе с ближайшим напоминанием
- Поддержка Live Activity через расширение виджета
Синхронизация и экспорт
- Синхронизация через CloudKit / iCloud
- Экспорт напоминаний в текстовый файл
- Локальное хранение в JSON-файле (без потери данных при отсутствии сети)
Локализация
- Поддержка английского и русского языков
- Выбор языка на экране онбординга
| Слой | Что используется |
|---|---|
| UI | SwiftUI, MVVM |
| Live Activities | ActivityKit (iOS 16.2+) |
| Виджеты | WidgetKit, AppIntents |
| Уведомления | UserNotifications |
| Хранение | FileManager (JSON) |
| Синхронизация | CloudKit |
| Асинхронность | Swift Concurrency (async/await), Combine |
- iOS 16.2 или новее
- Xcode 15+
- Swift 5.9+
- Для Live Activities — реальное устройство (симулятор не поддерживается)
notifications/
├── RemindersLiveApp.swift # Точка входа
├── ReminderActivityAttributes.swift # Атрибуты Live Activity
├── Models/
│ └── Reminder.swift # Модель данных
├── Views/
│ ├── ReminderListView.swift # Главный экран со списком
│ ├── ReminderEditorView.swift # Создание / редактирование
│ └── LanguageStartView.swift # Онбординг (выбор языка)
├── ViewModels/
│ ├── ReminderListViewModel.swift # Логика списка, фильтрация, синк
│ └── ReminderEditorViewModel.swift # Состояние формы редактора
├── Services/
│ ├── StorageService.swift # Локальное JSON-хранилище
│ ├── NotificationService.swift # Планирование уведомлений
│ ├── LiveActivityService.swift # Управление Live Activities
│ └── CloudKitService.swift # Синхронизация iCloud
├── Utils/
│ ├── AppLocalization.swift # Строки EN/RU
│ ├── RemindersExportDocument.swift # Экспорт в файл
│ ├── DateFormatters.swift # Форматирование дат
│ └── Calendar+Week.swift # Расширения календаря
└── RemindersLiveWidget/ # Расширение виджета
├── RemindersLiveWidget.swift
├── RemindersLiveWidgetLiveActivity.swift
├── RemindersLiveWidgetBundle.swift
├── RemindersLiveWidgetControl.swift
└── AppIntent.swift
- Клонируй репозиторий
- Открой
notifications.xcodeprojв Xcode - Выбери команду (Team) в настройках Signing & Capabilities
- Для CloudKit: добавь идентификатор контейнера в Info.plist — ключ
CloudKitContainerIdentifier(например,iCloud.com.yourteam.notifications) - Запусти на реальном устройстве для тестирования Live Activities
Приложение построено по паттерну MVVM:
- View — SwiftUI-экраны, не содержат бизнес-логики
- ViewModel (
@MainActor,@Published) — состояние UI и операции с данными - Services — изолированные сервисы для хранения, уведомлений, Live Activities и синхронизации
- Model —
Reminder: UUID, приоритет, дата, повтор, статус (waiting/due/done)
CloudKit-синхронизация автоматически отключается, если контейнер не настроен — приложение продолжает работать только с локальными данными.