Skip to content

Нативное iOS‑приложение для ведения списка задач, полностью работающее офлайн после первичного импорта.

Notifications You must be signed in to change notification settings

freegatik/To-Do

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Логотип To-Do

To-Do

Нативное 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 симуляторах).

Сборка и запуск

  1. Клонируйте репозиторий и откройте To-Do.xcodeproj.
  2. Выберите схему To-Do и симулятор iOS 18.0+.
  3. Запустите приложение (⌘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-синхронизацию между устройствами.
  • Настроить локальные уведомления по срокам задач.
  • Вынести голосовые сценарии в отдельный сервис для переиспользования.

About

Нативное iOS‑приложение для ведения списка задач, полностью работающее офлайн после первичного импорта.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages