Трекер времени для Mac OS
# MTimer — Нативный трекер времени для macOS
## О проекте
Полнофункциональное нативное приложение для отслеживания времени на macOS. Разработано с использованием PyObjC (AppKit) и SQLite, демонстрирует глубокое понимание экосистемы Apple и создание профессиональных десктоп-приложений на Python.
**Ключевые достижения:**
- 100% нативный UI через AppKit без веб-технологий
- Универсальный бинарный файл (x86_64 + arm64) готов к распространению
- Многоязычность с автоматическим определением системного языка (UK/EN/RU)
- Архитектура, готовая к производству, с чистым разделением логики
## Технический стек
**Основа:** PyObjC (AppKit), SQLite, py2app
**Паттерны:** MVC, Singleton, Observer, State Management
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter
## Основной функционал
**Управление временем**
- Умный таймер с автоматическим разделением сессий в полночь
- Фильтры периодов (Сегодня/Неделя/Месяц) с агрегацией в реальном времени
- Динамический расчет стоимости на основе почасовых ставок
- Автоматическое восстановление активной сессии после перезапуска
**Пользовательский опыт**
- Адаптивный дизайн с поддержкой светлой/темной темы
- Горячие клавиши (⌘ для Настроек, Delete для удаления)
- Нативные уведомления при старте/остановке отслеживания
- Приложение в строке меню с живым таймером и быстрым переключением задач
**Управление данными**
- CRUD операции с проектами и почасовыми ставками
- Редактирование через отдельное окно Настроек
- Безопасное удаление с подтверждением NSAlert
- UI синхронизация в реальном времени и строка меню при изменении данных
## Технические вызовы
**1. Обработка клавиатуры в NSTableView**
Создан подкласс `DeletableTableView` с переопределением `keyDown_` для клавиши Delete, используя `objc.super()` для корректной работы с Objective-C runtime.
**2. Синхронизация UI после редактирования**
Реализована система обратных вызовов с сохранением выбора через project_id, обновление всех компонентов (таблица, строка состояния, фильтры) одновременно.
**3. Локализация в скомпилированном приложении**
Использовано `NSLocale.preferredLanguages()` вместо модуля locale с цепочкой резервирования для максимальной совместимости.
**4. Жизненный цикл приложения**
Переопределение `windowShouldClose_` с `orderOut_`, `setReleasedWhenClosed_(False)` и `applicationShouldHandleReopen_` для корректного скрытия/показа.
## Результаты
✓ Стабильное приложение, готовое к производству, без сбоев
✓ Поддержка Intel Mac и Apple Silicon
✓ Минимальный размер (~50MB автономно)
✓ Мгновенный отклик UI
✓ Полностью документированный код
## Полученные навыки
- **Разработка для macOS:** фреймворк AppKit, NSStatusBar/NSMenu/NSTableView, обработка системных событий, координация нескольких окон
- **Python на продвинутом уровне:** связывание PyObjC, взаимодействие с Objective-C runtime, упаковка py2app, подпись кода
- **База данных:** оптимизация SQLite, агрегатные запросы, управление транзакциями
- **Программная инженерия:** лучшие практики i18n, UX-дизайн для десктопа, обработка ошибок, контроль версий
---
**GitHub:** https://github.com/maciborka/MTimer
**Стек:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Платформа:** macOS 12+ Universal (x86_64 + arm64)
**Лицензия:** MIT
## О проекте
Полнофункциональное нативное приложение для отслеживания времени на macOS. Разработано с использованием PyObjC (AppKit) и SQLite, демонстрирует глубокое понимание экосистемы Apple и создание профессиональных десктоп-приложений на Python.
**Ключевые достижения:**
- 100% нативный UI через AppKit без веб-технологий
- Универсальный бинарный файл (x86_64 + arm64) готов к распространению
- Многоязычность с автоматическим определением системного языка (UK/EN/RU)
- Архитектура, готовая к производству, с чистым разделением логики
## Технический стек
**Основа:** PyObjC (AppKit), SQLite, py2app
**Паттерны:** MVC, Singleton, Observer, State Management
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter
## Основной функционал
**Управление временем**
- Умный таймер с автоматическим разделением сессий в полночь
- Фильтры периодов (Сегодня/Неделя/Месяц) с агрегацией в реальном времени
- Динамический расчет стоимости на основе почасовых ставок
- Автоматическое восстановление активной сессии после перезапуска
**Пользовательский опыт**
- Адаптивный дизайн с поддержкой светлой/темной темы
- Горячие клавиши (⌘ для Настроек, Delete для удаления)
- Нативные уведомления при старте/остановке отслеживания
- Приложение в строке меню с живым таймером и быстрым переключением задач
**Управление данными**
- CRUD операции с проектами и почасовыми ставками
- Редактирование через отдельное окно Настроек
- Безопасное удаление с подтверждением NSAlert
- UI синхронизация в реальном времени и строка меню при изменении данных
## Технические вызовы
**1. Обработка клавиатуры в NSTableView**
Создан подкласс `DeletableTableView` с переопределением `keyDown_` для клавиши Delete, используя `objc.super()` для корректной работы с Objective-C runtime.
**2. Синхронизация UI после редактирования**
Реализована система обратных вызовов с сохранением выбора через project_id, обновление всех компонентов (таблица, строка состояния, фильтры) одновременно.
**3. Локализация в скомпилированном приложении**
Использовано `NSLocale.preferredLanguages()` вместо модуля locale с цепочкой резервирования для максимальной совместимости.
**4. Жизненный цикл приложения**
Переопределение `windowShouldClose_` с `orderOut_`, `setReleasedWhenClosed_(False)` и `applicationShouldHandleReopen_` для корректного скрытия/показа.
## Результаты
✓ Стабильное приложение, готовое к производству, без сбоев
✓ Поддержка Intel Mac и Apple Silicon
✓ Минимальный размер (~50MB автономно)
✓ Мгновенный отклик UI
✓ Полностью документированный код
## Полученные навыки
- **Разработка для macOS:** фреймворк AppKit, NSStatusBar/NSMenu/NSTableView, обработка системных событий, координация нескольких окон
- **Python на продвинутом уровне:** связывание PyObjC, взаимодействие с Objective-C runtime, упаковка py2app, подпись кода
- **База данных:** оптимизация SQLite, агрегатные запросы, управление транзакциями
- **Программная инженерия:** лучшие практики i18n, UX-дизайн для десктопа, обработка ошибок, контроль версий
---
**GitHub:** https://github.com/maciborka/MTimer
**Стек:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Платформа:** macOS 12+ Universal (x86_64 + arm64)
**Лицензия:** MIT