Planzo is a modern iOS & iPadOS task management application built with SwiftUI and Core Data. It provides a clean, intuitive interface for managing tasks, notes, and checklists with features like local notifications, task organization, and data persistence. Find it in App Store.
- Overview of all tasks and folders
- Quick access to important and pinned tasks
- Search functionality for finding tasks quickly
- Tasks due today
- Upcoming deadlines
- Priority tasks for the day
- Monthly calendar view
- Task distribution visualization
- Easy date-based task creation
- Create, edit, and delete tasks with detailed information
- Organize tasks into different folders (Tasks, Lists, Reminders, Other)
- Mark tasks as important or pin them for quick access
- Add checklists to tasks for better organization
- Duplicate tasks with all their properties
- Set up localized local notifications for task deadlines
- Multiple notification types (On time, 5 minutes before, 30 minutes before, 1 hour before, 1 day before)
- Notification management to prevent duplicates
- Notification status tracking and restoration
- Sort tasks by different criteria
- Search functionality for quick task finding
- Folder-based organization
- Pinned and important task highlighting
- Core Data persistence for reliable data storage
- Batch operations for efficient data handling
- Data cleanup and maintenance features
- Secure data handling and validation
- SwiftUI: Powers the modern, responsive UI components
- Core Data: Handles data persistence and management
- UserNotifications: Manages local notifications
- Combine: Handles reactive data flow and state management
- Core Data: Provides robust data persistence and relationships
NSManagedObjectContext: Manages object lifecycle and changesNSFetchRequest: Handles data queries and filteringNSPredicate: Enables complex data filtering
- SwiftUI Views: Modern, declarative UI components
- Custom Animations: Smooth transitions and interactions
UNUserNotificationCenter: Manages local notificationsUNNotificationRequest: Handles notification schedulingUNCalendarNotificationTrigger: Sets up time-based notifications- Notification Extensions: Custom notification handling
- OSLog: Integrated for logging essential app data, system events, and debugging information, making it easier to track performance and bugs.
The Planzo app follows the MVVM (Model-View-ViewModel) architecture pattern, providing a clean separation of concerns and maintainable code structure.
The Model layer represents the data and business logic:
TaskEntity: Core Data entity for task storageNotificationEntity: Handles notification dataChecklistEntity: Manages checklist itemsTaskService: Provides data operations and business logic
The View layer handles UI presentation. Examples:
TaskManagementView: Main task management interfaceDateSelector: Date and time selection componentsNotificationAlert: Notification management UI- Custom UI Components: Reusable SwiftUI views
The ViewModel layer manages the presentation logic:
TaskManagementViewModel: Handles task-related logic- Notification Management: Manages notification scheduling
- Data Validation: Ensures data integrity
- State Management: Handles UI state
TaskManagementViewModelTests: Tests for task management operationsMainViewModelTests: Tests task filtering, folder selection, search bar toggling, and task creation workflows.SettingsViewModelTests: Tests initialization, toggling view states, theme changes, notification management, and task creation mode settings.
The project uses comprehensive documentation following Apple's DocC format:
/// Compares a folder with the currently selected folder
/// - Parameter folder: The folder to compare with the selected folder
/// - Returns: Boolean indicating if the provided folder matches the selected folder
///
/// This method is used to determine if a folder is currently selected in the UI,
/// enabling proper highlighting and state management in the folder list.
internal func compareFolders(with folder: Folder) -> Bool {
// code implementation
}- Xcode 15.0+
- Swift 5.0+
- iOS 17.0+
