A clipboard-driven time tracking app for macOS that helps you monitor time spent on different tasks. Simply paste your task list and start tracking!
- Clipboard Integration: Paste task lists directly from your clipboard - no manual typing needed
- Time Tracking: Accurate time measurement with live updates
- Auto-Pause: Automatically pauses active tasks when you quit the app
- Data Persistence: Your tasks and elapsed times are automatically saved
- Task Editor Window: Write or edit multiple tasks in a dedicated window (⌘E), including arithmetic expressions such as
Newsletter: 4:29:32 - 2:09:00 - Task Completion: Mark tasks as finished and restart them later if needed
- Clipboard-First Design: Paste task lists from any source (notes, emails, documents)
- One-Click Operation: Start/pause tasks with a single click
- Visual Feedback: Clear indicators for active tasks with blinking colons
- Export to Clipboard: Copy task summaries with total time back to clipboard
- Automatic Saving: All changes are saved instantly to prevent data loss
- App Lifecycle Management: Proper handling of app termination
- State Preservation: Resume exactly where you left off
- macOS 14.1 or later
- Xcode 15.0+ (for development)
-
Clone the repository:
git clone https://github.com/domingogallardo/ClipTimer.git cd ClipTimer -
Open the project in Xcode:
open ClipTimer.xcodeproj
-
Build and run the project (⌘+R)
- Add Tasks: Paste task lists from your clipboard (supports time formats like "Task: 1:30:45")
- Start Tracking: Click the play button next to any task
- Pause/Resume: Click the pause button or start another task
- Finish Tasks: Right-click a task and choose
Finishto mark it completed (useRestartto resume) - Export Summary: Copy all tasks with elapsed times back to clipboard
ClipTimer automatically parses various time formats when pasting tasks or editing them in the Task Editor:
Task name: 1:30:45(H:MM:SS)Task name: 90:30(MM:SS)Task name(starts at 0:00:00)Task name: 4:29:32 - 2:09:00 + 45(add or subtract multiple time fragments)- Multi-line task lists (one task per line)
⌘+V: Paste tasks from clipboard⌘+C: Copy task summary back to clipboard⌘+F: Finish active task⌘+?: Show help overlay⌘E: Open Task Editor window⇧⌘⏎: Add tasks from editor⌘⏎: Replace tasks from editor
ClipTimer is built with modern Swift and SwiftUI, following best practices:
- TaskStore: Centralized state management with
@ObservableObject - Task Model: Codable data structure for persistence
- AppDelegate: Handles app lifecycle events
- UserDefaults: Local data persistence
- Single Source of Truth: Centralized
activeTaskIDmanagement - Reactive UI: SwiftUI with automatic updates
- Separation of Concerns: Clear separation between UI and business logic
ClipTimer includes a comprehensive test suite with 41+ tests covering:
- Task creation and management
- Time tracking accuracy
- Data persistence
- App lifecycle scenarios
- Edge cases and error handling
Run tests in Xcode with ⌘+U or via command line:
xcodebuild test -scheme ClipTimer -destination 'platform=macOS'main: App Store release branch.local: Internal branch that includes beacon-based presence features.
ClipTimer/
├── ClipTimer/ # Main app source
│ ├── ClipTimerApp.swift # App entry point
│ ├── TaskStore.swift # State management
│ ├── Task.swift # Data model
│ ├── ContentView.swift # Main UI
│ └── ...
├── ClipTimerTests/ # Test suite
└── ClipTimer.xcodeproj/ # Xcode project
- SwiftUI: Modern declarative UI framework
- Combine: Reactive programming for state management
- UserDefaults: Local data persistence
- XCTest: Unit and integration testing
- ✅ Auto-pause on app termination (v1.1.0)
- ✅ Enhanced data persistence (v1.1.0)
- ✅ Improved reliability and performance (v1.1.0)
- ✅ Task Editor window (v1.2.0)
- ✅ Arithmetic expressions when updating task times (v1.3.0)
- Follow Swift API Design Guidelines
- Use SwiftUI best practices
- Include tests for new functionality
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with ❤️ using Swift and SwiftUI
- Icons and design inspired by macOS Human Interface Guidelines
- Thanks to the Swift community for excellent tooling and resources
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: Support
Made with ❤️ for the macOS community