Нативное iOS‑приложение для ведения списка задач, полностью работающее офлайн после первичного импорта. Проект собирает функциональность из UI‑макетов, сопровождается тестами и демонстрирует чистую VIPER‑архитектуру.
- Современный список задач с кастомными ячейками, счетчиком задач и плавными анимациями при обновлениях.
- Мгновенный поиск по названию и описанию, поддерживающий русские и латинские символы без учёта регистра.
- Голосовой ввод поискового запроса через
SpeechиAVFoundationс автообновлением результатов и обработкой отказов в разрешениях. - Контекстное меню задачи в стиле макета: быстрые действия «Редактировать», «Поделиться» и «Удалить», деликатное размытие фона и адаптивное позиционирование.
- Pull-to-refresh и отображение пустых состояний, чтобы пользователь всегда понимал, что происходит.
- Редактор задач с автоподбором высоты полей, валидацией, статусом выполнения и подтверждением выхода при незаполненных данных.
- Шэринг задачи через стандартный
UIActivityViewControllerс заранее подготовленным текстом.
- При первом запуске приложение импортирует задачи с
https://dummyjson.com/todos, сериализует их и сохраняет в Core Data. - Далее используется полностью офлайн-режим: создание, редактирование, удаление и поиск работают поверх Core Data без сетевых запросов.
- Все операции выполняются в фоновых контекстах
CoreDataStack, UI обновляется на главном потоке.
- Два VIPER-модуля:
TodoList(список и контекстное меню) иTodoEditor(создание/редактирование). TodoRepositoryобъединяет сеть, Core Data и бизнес-логику (инициализация, CRUD, поиск).- Доменные модели (
Domain/) изолированы от DTO (Data/Networking) иNSManagedObject. - Роутеры управляют модальностями: список открывает редактор, редактор возвращает события через делегат.
- Общие утилиты (например, цвета) вынесены в
Common/.
- macOS 15.7+ и Xcode 16.1 (Swift 5.10).
- iOS 18.0+ (проект проверен на iPhone 17 Pro, iOS 18.1 и iOS 18.4 симуляторах).
- Клонируйте репозиторий и откройте
To-Do.xcodeproj. - Выберите схему
To-Doи симулятор iOS 18.0+. - Запустите приложение (
⌘R). Если требуется UI-тест, передайте запусковому аргументу--uitest(это пропускает первичный импорт).
- Модульные тесты (
To-DoTests) покрывают репозиторий, интерактор редактора и презентер списка. - UI-тесты (
To-DoUITests) проверяют холодный старт и базовое взаимодействие. - Запуск из терминала:
xcodebuild test \ -project To-Do.xcodeproj \ -scheme "To-Do" \ -destination 'platform=iOS Simulator,name=iPhone 17 Pro,OS=18.1'
Application/— точка входа, сборка корневого модуля.Common/— общие расширения и вспомогательные сущности.Data/— Core Data стек, сетевой слой и репозиторий.Domain/— бизнес-модели без UI-зависимостей.Modules/— VIPER-компоненты экрановTodoListиTodoEditor.Tests/,UITests/— автоматизированные проверки.
- Голосовой поиск аккуратно управляет
AVAudioSession, очищает ресурсы при уходе со страницы. - Контекстное меню динамически рассчитывает позицию и ширину карточек, чтобы без артефактов вписываться в экран.
- Репозиторий использует
performBackgroundTaskи потокобезопасные контексты, что исключает подвисания UI. - Для форматирования дат применяются отдельные
DateFormatter, инкапсулированные в презентерах.
- Добавить iCloud-синхронизацию между устройствами.
- Настроить локальные уведомления по срокам задач.
- Вынести голосовые сценарии в отдельный сервис для переиспользования.
