Conflict resolution algorithm, developer environment and tech stack

This commit is contained in:
2026-05-17 22:03:48 +02:00
parent 7ff6fd077f
commit 4fead7342c
2 changed files with 21 additions and 3 deletions
+19 -1
View File
@@ -282,10 +282,28 @@ func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPee
== Algorytm rozwiązywania konfliktów == Algorytm rozwiązywania konfliktów
Rozwiązywanie konfliktów jest dokonywane na podstawie strategii Last Writer Wins, gdzie ostatnio otrzymana wiadomość nadpisuje zawartość pozostałych kopii. W przypadku nanoszenia zmian na interfejs użytkownika, wykorzystałem natywną obsługę zmiany tekstu przez systemowy kompoent `TextEditor`, który w większości wypadków potrafi sobie poradzić czy prostych podmianach zawartości tekstu.
Zrezygnowałem z implementacji struktur danych CRDT ze względu na bardzo wysoki koszt implementacji, ponieważ oprócz samych struktur, musiałbym napisać własną implementację obsługi podmiany tekstu i aktualizacji kursora w edytorze tekstowym, co znacznie wykracza poza zakres tej pracy.
== Środowisko developerskie i stack technologiczny == Środowisko developerskie i stack technologiczny
== Implementacja logiki P2P
Uruchomienie projektu wymaga posiadania komputera Macintosh z systemem operacyjnym macOS w wersji 26.0 (Tahoe) oraz środowisko programistyczne Xcode w wersji 26.0. Do uruchomienia aplikacji potrzebne jest założenie konta Apple ID i zaakceptowania warunków użytkowania konta deweloperskiego, dzięki któremu można wygenerować certyfikat, którego potrzebuje Xcode do zbudowania aplikacji.
Aplikacja wykorzystuje framework SwiftUI do budowania warstwy prezentacji. Jest to deklaratywny, wieloplatformowy framework między innymi dostarczający mechanizmy, które zostały wykorzystane w ramach tej pracy:
- automatycznego odświeżania interfejsu na podstawie nasłuchiwania na zmiany modelów danych
- automatycznego zapisu prymitywnych danych na dysku
- wstrzykiwania zależności wgłąb hierarchii interfejsu
- zaawansowanych wzorców stosowanych w tworzeniu dobrych doświadczeń użytkownika - np. wysuwalne panele (bottom sheets).
Kluczowym frameworkiem w budowaniu tej aplikacji jest Multipeer Connectivity, który zapewniał ułatwioną konfigurację całej komunikacji między pobliskimi użytkownikami. Pomocniczymi bibliotekami `Foundation` oraz `Combine`.
`Foundation` daje dostęp do złożonych, ale bardzo często wykorzystywanych typów i funkcji w Swifcie - `URL`, `FileManager`, `JSONDecoder`, `JSONEncoder`.
`Combine` jest biblioteką dodającą programowanie reaktywne do Swifta, ale również jako pierwsza zapewniła mechanizmy komunikowania zmian w modelach danych do widoków implementowanych w SwiftUI. Moja praca wykorzystywała przede wszystkim obiekty `PassthroughSubjects`, które służyły za obiekty emitujące każde nowo otrzymane dane od innych użytkowników.
== Interfejs użytkownika == Interfejs użytkownika
== Napotkane wyzwania implementacyjne i rozwiązania == Napotkane wyzwania implementacyjne i rozwiązania
== Ograniczenia środowisk iOS/macOS == Ograniczenia środowisk iOS/macOS
BIN
View File
Binary file not shown.