Skip to content

Repository files navigation

Cursorly

Zamienia iPhone'a w bezprzewodowa mysz, klawiature i pilot multimediow dla Maca. Jeden projekt Xcode, dwa cele: aplikacja iOS (kontroler) i aplikacja macOS (serwer).

Status: wczesna wersja, nie do codziennego uzytku. Aplikacja macOS wstrzykuje zdarzenia myszy i klawiatury do systemu, wiec przeczytaj sekcje Model bezpieczenstwa, zanim ja uruchomisz.

Jak to dziala

iPhone (kontroler)                     Mac (serwer)
  dotyk / zyroskop  ──► CursorEvent ──►  CGEvent / AppleScript ──► kursor,
                        (JSON przez                                klawiatura,
                    MultipeerConnectivity)                         multimedia

Mac rozglasza usluge cursorly-ctrl w sieci lokalnej i pokazuje 6-cyfrowy kod parowania. iPhone znajduje Maca, wysyla kod i po akceptacji przejmuje sterowanie.

Co dziala

  • Parowanie kodem PIN — 6 cyfr, z limitem prob i rotacja kodu
  • Touchpad — ruch jednym palcem, przewijanie dwoma, tap = lewy przycisk, tap dwoma palcami = prawy
  • Air Mouse — sterowanie zyroskopem (Ustawienia > Tryb Air Mouse), z filtrem dolnoprzepustowym i pauza, gdy telefon lezy plasko
  • Pilot multimediow — odtwarzanie/pauza, poprzedni/nastepny, glosnosc, mute
  • Klawiatura zdalna — przepisywanie tekstu na Maca
  • Parowanie kodem QR — Mac pokazuje kod, iPhone go skanuje
  • MenuBarExtra na macOS — status polaczenia w pasku menu

Czego nie ma

  • Polaczenie po adresie IP — ekran istnieje, ale mowi wprost, ze tryb nie dziala. MultipeerConnectivity nie laczy sie po adresie; wymagaloby to osobnego transportu na Network.framework.
  • Tryb Cloud / przez Internet — zaslepka.
  • Backspace w klawiaturze zdalnej — znane ograniczenie, patrz .claude/backlog.md.

Model bezpieczenstwa

Przeczytaj to, zanim uruchomisz aplikacje macOS.

  • Aplikacja macOS wymaga uprawnien Dostepu Uniwersalnego (Accessibility) i dziala bez sandboxa — inaczej nie moze wstrzykiwac zdarzen wejscia.
  • Kazdy sparowany peer moze poruszac kursorem, klikac i wpisywac dowolny tekst. Sparowane urzadzenie ma wiec praktycznie taka kontrole nad Makiem, jak osoba siedzaca przy klawiaturze.
  • Jedyna bariera jest kod parowania: 6 cyfr, maksimum 3 bledne proby, potem rotacja kodu i 60 s blokady. Nieuzyty kod wygasa po 5 minutach.
  • Transport jest szyfrowany (MCSession z .required), ale peery nie sa uwierzytelniane certyfikatem — MultipeerConnectivity uzywa certyfikatow self-signed.
  • Uruchamiaj serwer tylko w sieci, ktorej ufasz, i zatrzymuj go, gdy z niego nie korzystasz.

Znalazles problem bezpieczenstwa? Zglos go przez GitHub Issues w tym repozytorium.

Uruchomienie

Wymagania: Xcode 26+, iOS 16+, macOS 13+.

# testy i buildy — to samo, co odpala hook pre-push
bash scripts/local-ci.sh

Recznie:

xcodebuild -project Cursorly.xcodeproj -scheme Cursorly \
  -destination 'platform=iOS Simulator,name=iPhone 17' test

xcodebuild -project Cursorly.xcodeproj -scheme Cursorly-macOS \
  -destination 'platform=macOS' build

Nazwa symulatora zmienia sie z wersja Xcode — scripts/local-ci.sh wykrywa dostepny automatycznie.

W Xcode: uruchom cel Cursorly-macOS na Macu, nadaj mu uprawnienia Dostepnosci, potem cel Cursorly na iPhonie i sparuj kodem z ekranu Maca.

Uklad projektu

Cursorly/
├── CursorlyApp.swift          punkt wejscia; wybiera UI wg platformy
├── Connectivity/              ConnectivityManager — parowanie, transport,
│                              wstrzykiwanie zdarzen na macOS
├── Managers/                  MotionManager (zyroskop), QRCodeGenerator +
│                              PairingPayload, IPAddressHelper
├── Models/                    CursorEvent — protokol przesylany po sieci
├── Views/                     ekrany SwiftUI (iOS i macOS)
└── CursorlyTests.swift        testy jednostkowe (cel CursorlyTests)

Praca nad projektem

Konwencje, backlog i stan: AGENTS.md oraz katalog .claude/. Projekt nie ma hosted CI — gate'y uruchamia scripts/local-ci.sh z hooka pre-push (decyzja D-003).

git config core.hooksPath .githooks   # jednorazowo po sklonowaniu

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages