MessageApp to natywna aplikacja na system iOS stworzona przy użyciu frameworka SwiftUI. Służy do wymiany wiadomości tekstowych w czasie rzeczywistym między użytkownikami. Projekt posiada pełną integrację z usługami Firebase, zapewniając bezpieczną autoryzację, przechowywanie danych oraz ich synchronizację na żywo.
- Rejestracja i logowanie użytkowników z walidacją danych.
- Czat tekstowy w czasie rzeczywistym z podziałem na wiadomości wysłane i odebrane.
- Lista aktywnych rozmów wyświetlająca ostatnią wiadomość oraz zdjęcie rozmówcy.
- Wskaźnik nieprzeczytanych wiadomości dla poszczególnych konwersacji.
- Możliwość edycji profilu oraz zmiany zdjęcia profilowego (integracja z systemową galerią iOS).
- Przechowywanie zdjęć profilowych w bazie danych jako tekst w formacie Base64 (optymalizacja eliminująca potrzebę korzystania z płatnych planów Firebase Storage).
- Edycja lokalnej nazwy konwersacji widocznej na liście czatów.
- Usuwanie czatów wraz z całą historią wiadomości (bezpieczne usuwanie masowe przy użyciu WriteBatch).
- Odświeżanie listy rozmów i pobieranie najnowszych danych profilowych znajomych za pomocą gestu "Pull to Refresh".
Aplikacja opiera się na architekturze MVVM (Model-View-ViewModel), co pozwala na wyraźne oddzielenie logiki biznesowej od warstwy wizualnej.
Gdy użytkownik tworzy nowe konto, jego dane uwierzytelniające są zapisywane w usłudze Firebase Authentication, a jednocześnie aplikacja tworzy odpowiedni dokument w kolekcji użytkowników w bazie Firestore. Główny widok aplikacji nasłuchuje zmian w kolekcji czatów. Jeśli zalogowany użytkownik jest uczestnikiem danej rozmowy, pojawia się ona na jego liście.
Każda konwersacja posiada własną podkolekcję z wiadomościami. Podczas wysyłania nowej wiadomości, aplikacja zapisuje ją do podkolekcji oraz aktualizuje główny dokument czatu. Status czatu u odbiorcy zmienia się na "nieprzeczytany", co skutkuje wyświetleniem powiadomienia wizualnego na jego liście. Wszystkie operacje, w tym aktualizacja zdjęć profilowych kodowanych do formatu Base64, są natychmiast odzwierciedlane w interfejsie użytkownika dzięki wykorzystaniu mechanizmu Snapshot Listeners dostarczanego przez SDK Firebase.
- Swift: Główny język programowania aplikacji.
- SwiftUI: Framework do budowy interfejsu użytkownika w sposób deklaratywny i reaktywny.
- UIKit: Wykorzystany jako wsparcie dla komponentów niedostępnych natywnie w SwiftUI (UIImagePickerController do wyboru zdjęć z galerii oraz UIBezierPath do zaawansowanego rysowania asymetrycznych dymków czatu).
- Firebase Authentication: Do zarządzania sesją użytkownika, logowania oraz rejestracji.
- Firebase Firestore: Baza danych NoSQL wykorzystana do przechowywania informacji o użytkownikach, listach konwersacji oraz historii czatu (wykorzystanie grupowych operacji zapisu i usuwania - Batches).
- Swift Package Manager (SPM): Narzędzie użyte do zarządzania zależnościami zewnętrznymi (pakiety Firebase).
- Sklonuj repozytorium projektu na swój komputer lokalny.
- Otwórz projekt w środowisku Xcode.
- Utwórz nowy projekt w konsoli Firebase w przeglądarce.
- Zarejestruj nową aplikację iOS w panelu Firebase i pobierz wygenerowany plik
GoogleService-Info.plist. - Przeciągnij plik
GoogleService-Info.plistdo głównego katalogu projektu w strukturze plików Xcode. - W konsoli Firebase włącz usługę Authentication (metoda Sign-in: Email/Password) oraz utwórz bazę danych Cloud Firestore.
- Zbuduj i uruchom aplikację na symulatorze lub fizycznym urządzeniu (skrót Cmd + B, następnie Cmd + R).