Peer-to-peer мессенджер на iOS для обмена сообщениями между пользователями поблизости без внешнего сервера. Связь построена на MultipeerConnectivity: устройство находит соседних пиров, подключается к ним и отправляет личные и общие сообщения.
- Личные чаты между двумя пользователями.
- Общий чат для всех подключенных участников.
- Автообновление списка найденных / подключенных / подключающихся пользователей.
- Сохранение истории сообщений (общий чат + приватные диалоги).
- Счетчик непрочитанных сообщений по каждому диалогу.
- Локальные push-уведомления по входящим сообщениям с роутингом в нужный экран.
- Онбординг с проверкой и запросом необходимых разрешений (Bluetooth, Nearby, Local Network, Notifications).
- Экран состояния Bluetooth с блокировкой приложения при выключенном модуле.
- String Catalog с поддержкой русского и английского языков (готов к расширению)
P2PMessengerDemo-2.mp4
- SwiftUI + Observation
- MultipeerConnectivity
- CoreBluetooth / Network
- UserNotifications
- XcodeGen + Makefile
- XCTest + XCUITest
- Lottie
- GitHub Actions (CI/CD)
Проект построен вокруг композиционного корня RootGraph, который собирает зависимости (router, storage, network service, coordinators, view models, root views).
Навигация реализована через AppRouter + отдельные root-экраны для вкладок (Chats / Common Chat / Settings).
Сетевой слой — MPCNetworkServiceImpl, обернутый координатором PeerSessionCoordinator, который мультикастит сетевые события подписчикам (чаты, список диалогов, уведомления).
Хранение состояния и истории — через KeyValueStorageProtocol (профиль, онбординг, разрешения, чаты, количество непрочитанных сообщений).
В проекте настроен GitHub Actions пайплайн, который запускается при push (и может запускаться при pull request, если включено в workflow).
- Сборка проекта (build)
- Проверка стиля и качества кода (SwiftLint)
- Unit-тесты (
P2PMessengerTests) - UI-тесты (
P2PMessengerUITests)
- Быстрая проверка, что изменения не ломают сборку
- Контроль базового качества кода до ревью/мержа
- Раннее обнаружение регрессий в бизнес-логике и UI-сценариях
- Xcode 16+
- iOS deployment target: 17.0
- macOS с установленными инструментами для генерации проекта (XcodeGen)
- Клонировать репозиторий.
- Запустить
setup.command(илиmake -f .github/Makefile setup). - Открыть
P2PMessenger.xcodeproj. - Выбрать target
P2PMessenger, задать команду разработки и запустить на устройстве/симуляторе.
Для полноценной проверки P2P-сценариев рекомендуется тестировать минимум на 2 реальных устройствах.
Если хотите изменить префикс:
- Задайте его в файле
local.yml:
options:
bundleIdPrefix: com.yourname- Повторно запустить
setup.command.
Проект покрыт:
- Unit-тестами (
P2PMessengerTests) — бизнес-логика - UI-тестами (
P2PMessengerUITests) — ключевые сценарии
Запуск:
- через Xcode (Product -> Test)
- или через схему тестов (
P2PMessengerTests,P2PMessengerUITests)
- Максимальное количество участников в общем чате — 8 (ограничение MultipeerConnectivity)
- История сообщений не синхронизируется между устройствами одного пользователя