A modern iOS Todo application built with a strong focus on clean architecture, scalability, and maintainability.
This project was originally created as a test assignment and later refined to demonstrate production-level engineering practices, architectural decisions, and code organization.
- Display todo items in a list
- Create new tasks
- Edit existing tasks
- Delete tasks
- Splash & launch screens
- Initial data loading from network
- Offline persistence using Core Data
- Error handling and recovery
- Structured logging system
- Multiple build environments
- Swift 5
- UIKit (programmatic UI)
- iOS 17+
- VIPER + Clean Architecture
- Dependency Injection with Swinject
- Moya for networking
- Core Data for local persistence
- Async/Await concurrency
- Environment-based configuration
The project follows a modular layered architecture combining VIPER and Clean Architecture principles.
- Separation of concerns
- High testability
- Scalable feature structure
- Clear dependency boundaries
- Maintainable business logic
Contains reusable shared components and cross-cutting concerns:
- Logging system
- Environment configuration
- Error handling
- Shared utilities
- Base abstractions and protocols
Responsible for external and local data sources:
- Network layer (Moya)
- API models
- Repository implementations
- Core Data persistence
- DTO mapping
Contains UI and feature modules:
- VIPER modules
- Presenters
- Interactors
- Routers
- Views
- UI state handling
Application entry point and composition root:
- Dependency registration
- Environment setup
- App lifecycle configuration
Application assets and configuration files.
TodoApp
├── App
├── Core
├── Data
├── Presentation
└── Resources
On first launch, the application loads todo data from a remote source and stores it locally using Core Data.
This approach provides:
- Fast subsequent launches
- Offline support
- Data persistence between sessions
The application includes centralized error handling with proper user feedback and logging.
Handled scenarios include:
- Network failures
- Data loading issues
- Persistence errors
- Unexpected application states
A structured logging system is implemented to simplify debugging and feature tracking.
Logging categories include:
- UI events
- Feature flow
- Network requests
- Data operations
- Errors
The project supports multiple environments:
- Mock
- Development
- Staging
- Release
This allows easy testing and configuration switching during development.
- iOS 17.0+
- Xcode 26
- Swift 5
- Clone the repository
git clone https://github.com/nikolai-eremenko/TaskFlow- Open the project in Xcode
open todo.xcodeproj- Build and run the application.
This project emphasizes:
- Clean code principles
- Architecture consistency
- SOLID principles
- Dependency injection
- Scalable project structure
- Maintainable UIKit codebase
- Explicit error management
- Production-style logging
This repository serves as an example of my iOS engineering approach, architectural decisions, and code organization practices.


