Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
# 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
Детали работы
Бюджет 22 175 UAH
Добавлена 17 ноября 2025
179 просмотров
Фрилансер
Виталий Мациборка
Украина Мукачево  15  0

Свободен для работы Свободен для работы
15 Сейфов завершены
На сервисе 8 лет