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

## O projekcie

Wielofunkcyjna natywna aplikacja do śledzenia czasu na macOS. Opracowana z użyciem PyObjC (AppKit) oraz SQLite, demonstruje głębokie zrozumienie ekosystemu Apple oraz tworzenia profesjonalnych aplikacji desktopowych w Pythonie.

**Kluczowe osiągnięcia:**
- 100% natywny interfejs użytkownika przez AppKit bez technologii webowych
- Uniwersalny plik binarny (x86_64 + arm64) gotowy do dystrybucji
- Wielojęzyczność z automatycznym określaniem języka systemowego (UK/EN/RU)
- Architektura gotowa do produkcji z czystym podziałem logiki

## Stos technologiczny

**Podstawa:** PyObjC (AppKit), SQLite, py2app
**Wzorce:** MVC, Singleton, Observer, Zarządzanie stanem
**UI:** NSTableView, NSStatusBar, NSAlert, NSUserNotificationCenter

## Podstawowa funkcjonalność

**Zarządzanie czasem**
- Inteligentny Timer z automatycznym podziałem sesji o północy
- Filtry okresów (Dziś/Tydzień/Miesiąc) z agregacją w czasie rzeczywistym
- Dynamiczne obliczanie kosztów na podstawie stawek godzinowych
- Automatyczne przywracanie aktywnej sesji po restarcie

**Doświadczenie użytkownika**
- Responsywny design z obsługą jasnego/ciemnego motywu
- Skróty klawiaturowe (⌘, dla Ustawień, Delete do usuwania)
- Natywne powiadomienia przy rozpoczęciu/zatrzymaniu śledzenia
- Aplikacja w pasku menu z żywym timerem i szybkim przełączaniem zadań

**Zarządzanie danymi**
- Operacje CRUD z projektami i stawkami godzinowymi
- Edytowanie przez osobne okno Ustawień
- Bezpieczne usuwanie z potwierdzeniem NSAlert
- Synchronizacja UI i paska menu w czasie rzeczywistym przy zmianie danych

## Wyzwania techniczne

**1. Obsługa klawiatury w NSTableView**
Stworzono subclass `DeletableTableView` z nadpisanym `keyDown_` dla klawisza Delete, używając `objc.super()` dla poprawnej pracy z runtime Objective-C.

**2. Synchronizacja UI po edytowaniu**
Zrealizowano system callbacków z zachowaniem wyboru przez project_id, odświeżając wszystkie komponenty (tabela, pasek statusu, filtry) jednocześnie.

**3. Lokalizacja w skompilowanej aplikacji**
Użyto `NSLocale.preferredLanguages()` zamiast modułu locale z łańcuchem fallback dla maksymalnej zgodności.

**4. Cykl życia aplikacji**
Nadpisano `windowShouldClose_` z `orderOut_`, `setReleasedWhenClosed_(False)` oraz `applicationShouldHandleReopen_` dla poprawnego ukrywania/pokazywania.

## Wyniki

✓ Stabilna aplikacja gotowa do produkcji bez awarii
✓ Wsparcie dla Intel Mac oraz Apple Silicon
✓ Minimalny ślad (~50MB samodzielnie)
✓ Natychmiastowa odpowiedź UI
✓ Całkowicie udokumentowany kod

## Nabyte umiejętności

- **Rozwój macOS:** framework AppKit, NSStatusBar/NSMenu/NSTableView, obsługa zdarzeń systemowych, koordynacja wielu okien
- **Zaawansowany Python:** mostek PyObjC, interakcja z runtime Objective-C, pakowanie py2app, podpisywanie kodu
- **Baza danych:** optymalizacja SQLite, zapytania agregacyjne, zarządzanie transakcjami
- **Inżynieria oprogramowania:** najlepsze praktyki i18n, projektowanie UX dla desktopów, obsługa błędów, kontrola wersji

---

**GitHub:** https://github.com/maciborka/MTimer
**Stos:** Python 3.12, PyObjC (AppKit), SQLite, py2app
**Platforma:** macOS 12+ Uniwersalny (x86_64 + arm64)
**Licencja:** MIT
Szczegóły pracy
Budżet 1824 PLN
Dodana 17 listopada 2025
179 wyświetleń
Freelancer
Vitaly Matsiborka
Ukraina Mukaczewo  15  0

Gotowy do podjęcia pracy Gotowy do podjęcia pracy
Zakończono 15 Sejfów
W serwisie 8 lat