From 4fead7342ca5cbd3ddad7635108a83d229e2ea51 Mon Sep 17 00:00:00 2001 From: Oschly Date: Sun, 17 May 2026 22:03:48 +0200 Subject: [PATCH] Conflict resolution algorithm, developer environment and tech stack --- Thesis/Chapters/3. Implementation.typ | 20 +++++++++++++++++++- Thesis/main.pdf | 4 ++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Thesis/Chapters/3. Implementation.typ b/Thesis/Chapters/3. Implementation.typ index fe61d99..656cbdd 100644 --- a/Thesis/Chapters/3. Implementation.typ +++ b/Thesis/Chapters/3. Implementation.typ @@ -282,10 +282,28 @@ func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPee == 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 -== 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 są `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 + + == Napotkane wyzwania implementacyjne i rozwiązania == Ograniczenia środowisk iOS/macOS diff --git a/Thesis/main.pdf b/Thesis/main.pdf index 62df296..814727c 100644 --- a/Thesis/main.pdf +++ b/Thesis/main.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f7beba01574642d89d16bc7849255973df36f39123ae102801b0e5708e5dd4d -size 383010 +oid sha256:05a3e6b7df81d633f1410a1db7a6e1877495e5c07599bbd6152da39a7a1fab5c +size 389280