Switch to English?
Yes
Переключитись на українську?
Так
Переключиться на русскую?
Да
Przełączyć się na polską?
Tak
# MTimer — Нативний Time Tracker для macOS

## Про проєкт

Повнофункціональний нативний додаток для відстеження часу на macOS. Розроблений з використанням PyObjC (AppKit) та SQLite, демонструє глибоке розуміння екосистеми Apple та створення професійних desktop-додатків на Python.

**Ключові досягнення:**
- 100% нативний UI через AppKit без веб-технологій
- Universal binary (x86_64 + arm64) готовий до розповсюдження
- Багатомовність з автоматичним визначенням системної мови (UK/EN/RU)
- Production-ready архітектура з чистим розділенням логіки

## Технічний стек

**Основа:** PyObjC (AppKit), SQLite, py2app
**Паттерни:** MVC, Singleton, Observer, State Management
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter

## Основний функціонал

**Управління часом**
- Smart Timer з автоматичним розділенням сесій в опівночі
- Фільтри періодів (Today/Week/Month) з real-time агрегацією
- Динамічний розрахунок вартості на основі почасових ставок
- Автоматичне відновлення активної сесії після рестарту

**User Experience**
- Адаптивний дизайн з підтримкою світлої/темної теми
- Keyboard shortcuts (⌘, для Settings, Delete для видалення)
- Нативні сповіщення при старті/зупинці відстеження
- Menu Bar App з живим таймером та швидким перемиканням завдань

**Управління даними**
- CRUD операції з проєктами та почасовими ставками
- Редагування через окреме Settings вікно
- Safe deletion з NSAlert підтвердженням
- Real-time sync UI та menu bar при зміні даних

## Технічні виклики

**1. Обробка клавіатури в NSTableView**
Створено `DeletableTableView` subclass з override `keyDown_` для Delete key, використовуючи `objc.super()` для коректної роботи з Objective-C runtime.

**2. Синхронізація UI після редагування**
Реалізовано систему callbacks зі збереженням вибору через project_id, refresh всіх компонентів (table, status bar, filters) одночасно.

**3. Локалізація в compiled app**
Використано `NSLocale.preferredLanguages()` замість locale module з fallback ланцюгом для максимальної сумісності.

**4. Життєвий цикл додатку**
Override `windowShouldClose_` з `orderOut_`, `setReleasedWhenClosed_(False)` та `applicationShouldHandleReopen_` для коректного hide/show.

## Результати

✓ Стабільний production-ready додаток без crashes
✓ Підтримка Intel Mac та Apple Silicon
✓ Мінімальний footprint (~50MB standalone)
✓ Миттєва відповідь UI
✓ Повністю документований код

## Отримані навички

- **macOS Development:** AppKit framework, NSStatusBar/NSMenu/NSTableView, system events handling, multi-window coordination
- **Python Advanced:** PyObjC bridging, Objective-C runtime interaction, py2app packaging, code signing
- **Database:** SQLite оптимізація, агрегатні запити, transaction management
- **Software Engineering:** i18n best practices, UX design для desktop, error handling, version control

---

**GitHub:** https://github.com/maciborka/MTimer
**Stack:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Platform:** macOS 12+ Universal (x86_64 + arm64)
**License:** MIT
Деталі роботи
Бюджет 22 175 UAH
Додано 17 листопада 2025
179 переглядів
Фрилансер
Виталий Мациборка
Україна Мукачево  15  0

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