#set heading(numbering: none) = Wstęp Współczesne narzędzia do wspólnego tworzenia dokumentów, takie jak Google Docs czy Microsoft Word Online, zrewolucjonizowały sposób, w jaki zespoły pracują nad treścią. Umożliwiają one wielu użytkownikom jednoczesną edycję tego samego dokumentu z wielu urządzeń. Ich powszechność skrywa jednak ważne ograniczenie architektoniczne - wszystkie one opierają się na scentralizowanym serwerze, który pośredniczy w każdej wymianie danych. Oznacza to, że gdy dwóch użytkowników pracuje nad wspólnym dokumentem w tym samym pomieszczeniu, każda wprowadzona zmiana musi najpierw dotrzeć do serwerów dostawcy usługi, zanim zostanie przekazana drugiemu uczestnikowi sesji. W konsekwencji brak dostępu do Internetu uniemożliwia dalszą współpracę, a uzależnienie od zewnętrznej infrastruktury tworzy pytania o prywatność danych oraz ciągłość usługi. Niniejsza praca inżynierska podejmuje próbę odpowiedzi na powyższe ograniczenia poprzez zaprojektowanie i implementację mobilnej aplikacji do współtworzenia notatek tekstowych działającej w architekturze Peer-To-Peer. Zaproponowane rozwiązanie pozwala urządzeniom komunikować się bezpośrednio ze sobą za pośrednictwem Bluetooth lub Wi-Fi, bez udziału centralnego serwera i bez konieczności posiadania dostępu do Internetu. Aplikacja została zbudowana z myślą o urządzeniach firmy Apple z systemem iOS oraz iPadOS, z wykorzystaniem języka programowania Swift oraz deklaratywnego frameworka SwiftUI. Do komunikacji Peer-To-Peer zastosowano dostarczany przez Apple framework Multipeer Connectivity. Cele pracy obejmują: - Przegląd i analizę istniejących algorytmów zapewniających zbieżność danych w systemach rozproszonych — w szczególności Operational Transformation oraz bezkonfliktowych replikowanych typów danych, - Omówienie możliwości komunikacji Peer-To-Peer dostępnych na platformach firmy Apple, - Zdefiniowanie wymagań funkcjonalnych i niefunkcjonalnych dla projektowanej aplikacji, - Implementację aplikacji realizującej zdefiniowane wymagania, w tym mechanizm odkrywania urządzeń, synchronizacji notatek oraz rozwiązywania konfliktów metodą Last-Write-Wins, - Weryfikację poprawności działania systemu za pomocą testów jednostkowych oraz manualnych. Praca składa się z czterech rozdziałów. Rozdział pierwszy przedstawia zakres teoretyczny — omawia modele zbieżności danych, algorytmy synchronizacji stosowane w systemach do współpracy w czasie rzeczywistym, a także możliwości komunikacji P2P dostępne w systemach iOS i iPadOS. Przybliżone zostają istniejące rozwiązania rynkowe oraz ich ograniczenia. Rozdział drugi zawiera specyfikację wymagań systemowych, zarówno funkcjonalnych, jak i niefunkcjonalnych, które wyznaczają zakres realizowanej implementacji; opisuje architekturę aplikacji, model danych, warstwę sieciową, algorytm rozwiązywania konfliktów oraz napotkane wyzwania implementacyjne. Rozdział trzeci prezentuje przeprowadzone testy i ich wyniki. Rozdział czwarty stanowi podsumowanie osiągniętych celów oraz propozycje kierunków dalszego rozwoju aplikacji.