Projelere dön

Yazılım & Backend / Mobil & Masaüstü

MacPilot

iPhone’u Mac için trackpad, klavye ve sistem kontrol arayüzüne dönüştüren; ortak Swift protokolü ve WSS bağlantısı kullanan yerel ağ prototipi.

Prototip
  • Swift
  • SwiftUI
  • Network.framework
  • Bonjour
  • CryptoKit
  • Keychain
  • XCTest

Kategori için özgün kod tabanlı illüstrasyon; ürün ekran görüntüsü değildir.

Genel bakış

MacPilot, SwiftUI iOS istemcisi, macOS agent ve SharedCore protokol kütüphanesinden oluşuyor. Bonjour cihaz keşfi sağlıyor; WSS üzerinden giriş olayları, sistem metrikleri, kısayollar ve parçalı dosya aktarımı taşınıyor. Native sistem API’leriyle çalışan agent için macOS izinleri gerekiyor. Proje kontrollü yerel ağ prototipi; ilk eşleştirmedeki güven yetkilendirmesi üretim kullanımı öncesinde çözülmesi gereken açık bir sınır.

Problem ve amaç

Bir Mac’i iPhone’dan kontrol etmek yalnızca ağ üzerinden koordinat göndermekten ibaret değil. Dokunma jestlerini giriş olaylarına çevirmek, cihazı keşfetmek, bağlantı durumunu korumak ve dosya parçalarını doğrulamak gerekiyor. Aynı kanal makinede güçlü eylemler çalıştırdığı için cihaz kimliği, kullanıcı onayı ve macOS Accessibility izinleri de temel tasarım meseleleri haline geliyor.

Çalışmadaki rolüm

Native iOS/macOS istemci-agent mimarisi ve ortak iletişim bileşenlerinin geliştirilmesi.

Çözüm yaklaşımı

SwiftUI istemcisi jestleri ortak InputEvent modellerine çeviriyor; Bonjour ile bulunan macOS agent’a Network.framework tabanlı WSS üzerinden bağlanıyor. Agent router mesajları giriş, metrik, komut ve dosya yöneticilerine dağıtıyor. CGEvent tabanlı input bileşenleri macOS eylemlerini uyguluyor; dosya aktarımı chunk ve checksum modelleri kullanıyor. P256 challenge imzaları ve pinning bileşenleri var; ancak bilinmeyen ilk peer otomatik güven başlangıcı yapıyor. Bu nedenle açık kullanıcı onaylı pairing tamamlanmış sayılmıyor.

Uygulama ayrıntıları

Jestten native giriş olayına

TrackpadViewModel, ham dokunma hareketini doğrudan imleç koordinatı saymıyor: normalize etme, hız temelli gain ve low-pass smoothing adımları pointer/scroll deltasını hazırlıyor. Kaydırma tamamlandığında azalan momentum ayrı olaylar üretmeye devam edebiliyor. Agent tarafında InputEventProcessor token-bucket limiti uygular ve kabul edilen olayları userInteractive kuyruğunda MouseController/KeyboardController’a dağıtır. Bu ayrım hareket hissi ile native çalıştırmayı ayrı ayarlanabilir katmanlar yapıyor; donanım üzerinde ölçülmemiş bir gecikme veya kusursuz akıcılık iddiası oluşturmuyor.

Dosya aktarımının açık protokol modeli

Dosya aktarım modelleri transfer kimliği, chunk sırası, toplam parça sayısı, byte offset ve checksum bilgisini taşıyor. ChunkedTransfer yardımcıları 256 KB parçaları, SHA-256 bütünlük kontrolünü, aralık hesabını ve ilerleme oranını ortak tiplerle ele alıyor. Böylece UI ilerlemesi ile agent’ın veri doğrulaması aynı aktarım kavramlarına dayanabiliyor. Parçalı model ağ mesajlarını sınırlıyor; splitFile yardımcı yolu parçaları bir diziye topladığından her akışın sabit bellekli streaming olduğunu iddia etmek doğru değil. Fiziksel cihaz kabulü ayrı bir doğrulama gerektiriyor.

Taşıma güvenliği ve ilk yetkilendirme

İstemci ile agent, Bonjour keşfinden sonra WSS/TLS bağlantısı ve P256 challenge imzaları kullanıyor; ortak modeller mesajların türünü iki tarafta da tanımlıyor. Buna rağmen ilk görülen bilinmeyen public key’in güvenilen cihaza eklenmesi açık bir operatör onayıyla aynı şey değil. Aynı şekilde SharedCore’daki AES-GCM envelope yardımcılarının bulunması aktif router’ın bunları zorunlu kullandığını göstermiyor. Projenin mühendislik sınırı bu iki ayrımı açık tutmak: bağlantının şifrelenmesi, ilk peer’in yetkili olduğuna tek başına karar vermiyor.

Mimari akış

01

SwiftUI ekranları / jestler → ortak InputEvent modelleri

02

Bonjour keşfi → WSS bağlantı ve challenge akışı

03

macOS router → input / metrik / komut handler’ları

04

Dosya yöneticisi → chunk / checksum aktarımı

05

Yanıtlar → bağlantı durumu ve SwiftUI ekranları

Kaynak açıklamalarından türetilmiş kavramsal akış; bir uygulama ekran görüntüsü değildir.

Temel bileşenler

  • Trackpad ve klavye jestleri
  • Bonjour cihaz keşfi
  • CPU / bellek / disk / ağ metrik ekranı
  • Komut allowlist’i ve kısayollar
  • Parçalı dosya aktarımı
  • Ortak Swift mesaj ve payload modelleri

Teknik zorluklar

  • Dokunma hareketlerini filtreleme ve smoothing ile akıcı girişe çevirmek.
  • Native izinler, bağlantı durumları ve cihaz kimliğini birlikte yönetmek.
  • Şifreli taşıma ile ilk cihazın yetkilendirilmesini ayrı değerlendirmek.

Mühendislik tercihleri

  • İstemci ve agent ortak SharedCore modellerini paylaşıyor.
  • Aktif taşıma WSS/TLS; ayrı AES-GCM envelope kodu zorunlu runtime yolu değil.
  • runScript kapalı; yıkıcı güç komutları ayrıca ortam opt-in’i gerektiriyor.

Test ve doğrulama

  • Geçmiş yerel doğrulamada NetworkingTests, FileTransferTests ve InputLatencyTests içinde 38 seçili test geçti.
  • Açık #1 PR’sindeki CI yalnızca networking ve file-transfer sınıflarını çalıştırıyor; fiziksel iPhone–Mac akışı ve Keychain kullanan tüm testler yeniden doğrulanmadı.

Çıktılar

  • iOS istemcisi ve macOS agent aynı protokol tipleri üzerinden haberleşecek biçimde yapılandırılmış.
  • Giriş, metrik ve dosya kanalları ayrı agent bileşenleriyle uygulanmış.

Sınırlar ve mevcut durum

  • İlk bilinmeyen cihazın otomatik güven başlangıcı çözülmemiş bir yetkilendirme sınırı.
  • Aktif mesajlar WSS içinde plaintext envelope kullanıyor; ek uygulama katmanı şifrelemesi zorunlu değil.
  • Helper’ın kurulum parçaları tamamlanmamış; fiziksel cihaz kabul testi yapılmadı.
  • Yeni CI ve dokümantasyon çalışması açık #1 PR’sinde; pairing davranışı değiştirilmedi.

Teknik anlatım açık iyileştirme PR’sindeki belgeleri de esas alır. PR’nin ana dala birleştirildiği veya ürünün yayımlandığı anlamına gelmez.

Kaynaklar ve dokümantasyon

GitHub’da kaynak