Tracker czasu dla Mac OS
# 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
## 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