ReminderWave is a modern task reminder and management application developed using SwiftUI and Swift Data. Following the MVVM architecture, this app allows users to organize their tasks, categorize them by priority, and receive reminders when due.
The application is built with modern iOS technologies and includes features such as multilingual support (English and Turkish), persistent data storage, local notifications, and filtering options.
Architecture diagram showing the MVVM structure and relationships between components of the ReminderWave app.
- Task Management: Create, edit, delete, and complete tasks
- Priority Setting: Assign low, medium, or high priority to each task
- Scheduling: Set date and time for tasks
- Notifications: Receive local notifications when tasks are due
- Filtering: View all, active, or completed tasks
- Multilingual Support: English and Turkish languages
- Color Coding: Visualize approaching deadlines with color codes
- Persistent Storage: Securely store data on the device using SwiftData
- SwiftUI: Modern, declarative UI design
- Swift Data: Database management
- MVVM Architecture: Modular and testable code structure
- Protocol-Oriented Design: Extensible and flexible structure
- Local Notifications: UserNotifications framework integration
- Localization: Full multilingual support
- Accessibility: Compliance with iOS accessibility features
- Task.swift: Task data model
- RWTaskPriority.swift: Task priority enum
- TaskServiceProtocol & SwiftDataTaskService: Service interface and implementation for data operations
- NotificationServiceProtocol & LocalNotificationService: Notification management
- TaskListViewModel: Data and logic management for the main list screen
- AddTaskViewModel: Form management for the new task addition screen
- ContentView: Main entry point
- TaskListView: Task list screen
- TaskRowView: Individual task row component
- AddTaskView: New task addition form
- iOS 18.0 or higher
- Xcode 16.0 or higher
- Swift 6.0 or higher
- Clone or download the project
- Open the
ReminderWave.xcodeproj
file with Xcode - Select your target device (simulator or physical iOS device)
- Build and run the application (⌘+R)
- On the main screen, you will see a list of your tasks
- Tap the + button in the bottom right corner to add a new task
- For each task, you can specify title, notes, due date, time, and priority
- If desired, you can receive notifications when the task is due
- Use swipe actions to mark tasks as completed or delete them
- Use the segments at the top of the screen to filter tasks
- Tap the globe icon in the upper right corner to change the language
This app is being developed as an example project showcasing modern iOS technologies. While the core features are complete, the following enhancements are planned:
Future developments planned for the project:
- Firebase Integration: Cloud synchronization for data
- Category System: Categorize tasks
- Recurring Tasks: Daily, weekly, monthly recurring tasks
- Widget Support: Home screen widgets
- Statistics: Task completion statistics and graphs
- Theme Support: Light/dark and custom themes
- Comprehensive Tests: Unit tests and UI tests
- Sharing Features: Share tasks with other apps or people
- iOS Live Activities: Real-time notifications on the Lock Screen, in Dynamic Island, and as interactive notifications on the device screen
- Data Storage: Object graph and relational data management with SwiftData
- UI: Fully declarative user interface with SwiftUI
- Asynchronous Operations: Swift's async/await features
- Architecture: MVVM (Model-View-ViewModel) pattern
- Dependency Injection: Manual DI approach
- Modularity: Modular design for easy extensibility
This project uses GitHub Actions for automated builds and releases. The workflow is triggered when a new tag (v*) is pushed to the repository.
- The workflow uses Xcode 15.0 to build the application
- Creates an archive of the app
- Exports the app as an IPA file
- Automatically creates a new release on GitHub
- Attaches the IPA file to the release
- Includes build information in the release notes
To create a new release:
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
- A valid Apple Developer Team ID (configured in
exportOptions.plist
) - GitHub Personal Access Token with appropriate permissions
Contributions are welcome! To add new features, fix bugs, or make improvements, follow these steps:
- Fork this repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Create a Pull Request