This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# MusicBridge iOS — план
|
||||
|
||||
Обновлено: 2026-09-10. Пользователь разрешил начать нативное iOS-приложение.
|
||||
Репозиторий: `C:/Users/areso/iOS MusicBridge`; origin — dev.yukinoki.ru/musicbridge/ios.
|
||||
Windows-агент — соседний проект `C:/Users/areso/MusicBridge/MusicBridge.Agent`.
|
||||
|
||||
## Правила проекта
|
||||
|
||||
- SwiftUI, без веб-клиента. Музыка играет на Windows.
|
||||
- Сверять контракт с Windows PROTOCOL.md; не менять серверный протокол молча.
|
||||
- Токены только в Keychain, проверка сертификата до сопряжения, запрет redirect.
|
||||
- Не повторять команды автоматически после потери ответа.
|
||||
- Не называть проверки Python сборкой Swift или запуском XCTest.
|
||||
- После этапа обновлять этот файл: реализация, проверки, ограничения, следующий шаг.
|
||||
|
||||
## Реализовано в исходниках, требует Xcode-проверки
|
||||
|
||||
- [x] Проект Xcode, shared scheme, iOS 17+, SwiftUI, без внешних зависимостей.
|
||||
- [x] Модели состояния и команд v1; валидация HTTPS IPv4 домашней сети и QR-строки.
|
||||
- [x] Ручное сопряжение, импорт приглашения, проверка SHA-256 DER-сертификата.
|
||||
- [x] Keychain: адрес, отпечаток и bearer-токен; удаление локального сопряжения.
|
||||
- [x] HTTPS-команды, обложка до 2 МиБ, поток WSS с ограничением размера сообщения.
|
||||
- [x] Экран трека, возможности кнопок, прогресс, перемотка, громкость, mute.
|
||||
- [x] Переподключение 1…16 секунд, watchdog потока, отключение в фоне, возврат.
|
||||
- [x] XCTest исходники: диапазоны адресов, отказ опасным URL, отпечатки,
|
||||
QR/срок/коды, JSON Windows, расчёт позиции, формат команд.
|
||||
- [x] GitHub Actions: сборка/тесты симулятора, логи, xcresult и артефакт приложения.
|
||||
|
||||
## Проверки и следующие шаги
|
||||
|
||||
- [ ] Первый успешный xcodebuild + XCTest на macOS. На текущем Windows Swift/Xcode нет.
|
||||
- [ ] Подключить выбранный пользователем GitHub remote и запустить Actions.
|
||||
- [ ] Интеграционные тесты TLS: верный/чужой/истёкший сертификат, redirect, WSS.
|
||||
- [ ] Проверить 401 и отзыв устройства, Keychain после переустановки/блокировки.
|
||||
- [ ] Настроить подпись и установку на физический iPhone.
|
||||
- [ ] Проверить LAN/плеер/команды/обложку с настоящим Windows-агентом.
|
||||
- [ ] Камера для QR, системные разрешения и обработка отказа.
|
||||
- [ ] Bonjour-поиск `_musicbridge._tcp`, список ПК и обновление адреса при смене IP.
|
||||
- [ ] Улучшить ошибки сопряжения по серверным кодам; повтор загрузки обложки после 404.
|
||||
- [ ] Иконка приложения, визуальная проверка разных размеров экрана и Dynamic Type.
|
||||
- [ ] Live Activities / Dynamic Island / App Intents — отдельный последующий этап.
|
||||
|
||||
Ограничения: хранится один ПК; при смене его IP пока нужно повторное сопряжение.
|
||||
Нет фонового воспроизведения, App Store/TestFlight и подписанной IPA.
|
||||
Потеря ответа на успешное сопряжение может оставить устройство на ПК: удалить его
|
||||
в окне агента перед повтором. Облачный runner не имеет доступа к домашней LAN.
|
||||
|
||||
## Карта
|
||||
|
||||
- `MusicBridge/Models.swift`: контракт и проверка входных данных.
|
||||
- `BridgeClient.swift`: сертификат, HTTPS, WSS, ограничения ответов.
|
||||
- `KeychainStore.swift`: хранение сопряжения.
|
||||
- `PlayerStore.swift`: состояние, команды, жизненный цикл и восстановление.
|
||||
- `ContentView.swift`: подключение и плеер.
|
||||
- `MusicBridgeTests/`: XCTest и пример Windows JSON.
|
||||
- `tools/`: генератор проекта, структурные проверки, выбор симулятора для CI.
|
||||
- `.github/workflows/ios.yml`: CI на macOS.
|
||||
Reference in New Issue
Block a user