From bce04f5d96efc6f701e64e62439899ed1fdfd6d7 Mon Sep 17 00:00:00 2001 From: ares Date: Sat, 12 Sep 2026 21:46:04 +0300 Subject: [PATCH] Document verified resilience stage and next iOS phases [skip ci] --- PLAN.md | 49 ++++++++++++++++++++++++++++++++++++++++++++----- README.md | 11 +++++++++-- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/PLAN.md b/PLAN.md index c8ecab6..3318835 100644 --- a/PLAN.md +++ b/PLAN.md @@ -31,15 +31,16 @@ Windows-агент — соседний проект `C:/Users/areso/MusicBridge - [x] Первый успешный xcodebuild + XCTest на macOS: 7 тестов, 0 отказов. - [x] Подключён GitHub remote polskikh13/musicbridgeios; Actions и чтение логов через gh работают. - [x] Интеграционные тесты TLS: верный/чужой/истёкший сертификат, HTTPS и WSS. -- [ ] Интеграционный тест отказа от redirect. -- [ ] Проверить 401 и отзыв устройства, Keychain после переустановки/блокировки. +- [x] Пройдены интеграционные проверки redirect, 401, возврата из фона и загрузки обложки. +- [ ] Проверить реальный Keychain после переустановки/блокировки и отзыв устройства на физическом iPhone. - [x] Установить на физический iPhone: пользователь подтвердил установку через iloader 2026-09-12. - [x] Первое подключение к настоящему Windows-агенту: пользователь подтвердил рабочий пилот на iPhone 2026-09-12. - [ ] Полная ручная проверка каждого действия, обложки и устойчивости в Яндекс Музыке и SoundCloud. - [x] Камера для QR, запрос доступа, сообщение при отказе, остановка камеры при закрытии/уходе в фон. - [x] Bonjour-поиск `_musicbridge._tcp`, список адресов ПК и восстановление адреса с сохранённым сертификатом. -- [ ] Проверить камеру, открытие QR стандартной камерой, Bonjour и смену IP на физическом iPhone. -- [ ] Улучшить ошибки сопряжения по серверным кодам; повтор загрузки обложки после 404. +- [x] QR через камеру работает на физическом iPhone — подтверждено пользователем после установки 0.2.0. +- [ ] Отдельно проверить оба входа (встроенный сканер и стандартная камера), отказ в доступе к камере, Bonjour и смену IP на физическом iPhone. +- [x] Реализованы понятные ошибки сопряжения по кодам сервера, повтор загрузки обложки после 404 и ручной повтор. - [ ] Иконка приложения, визуальная проверка разных размеров экрана и Dynamic Type. - [ ] Live Activities / Dynamic Island / App Intents — отдельный последующий этап. @@ -89,6 +90,7 @@ Bonjour, если доступны объявления того же агент - `ContentView.swift`: подключение и плеер. - `QRScanner.swift`: камера AVFoundation, доступ, сканирование и жизненный цикл. - `DiscoveryStore.swift`: Bonjour, разрешение адресов, TXT и безопасный выбор адреса. +- `ConnectionStorage.swift`: доступ к Keychain и подмена хранилища для изолированных тестов жизненного цикла. - `MusicBridgeTests/`: XCTest и пример Windows JSON. - `tools/`: генератор проекта, структурные проверки, выбор симулятора для CI. - `.github/workflows/ios.yml`: CI на macOS. @@ -122,7 +124,44 @@ Bonjour, если доступны объявления того же агент на снимке симулятора; исправлен статус при возвращении без сохранённого ПК. IPA скачана в `build/iPhone-0.2.0/MusicBridge-iPhone.ipa`; проверены ZIP, ARM64 iPhoneOS, версия 0.2.0 (3), разрешение камеры, Bonjour и обработчик URL в готовом пакете. - Следующий шаг: установить обновление через iloader и проверить QR/поиск/смену IP на iPhone. + Пользователь подтвердил работу QR через камеру на iPhone. Следующий шаг: + проверить Bonjour/смену IP и устойчивость, улучшить ошибки и восстановление обложки. + +## Следующие этапы — выполнять последовательно + +1. **Устойчивость и ошибки — версия 0.3.0 (build 4).** Исправления и автоматические + проверки завершены. Следующий ручной шаг — проверка на iPhone. +2. **Интерфейс.** Иконка, размеры/крупный текст, удобство плеера и состояния пустого + экрана. Сохранять рабочие сценарии QR и ручного подключения. +3. **Системные интеграции.** Сначала исследовать актуальные ограничения Live Activities, + Dynamic Island, App Intents и локальной связи в фоне; затем реализовать доступные + сценарии. Не имитировать фоновое аудио. Не обещать постоянный WSS при блокировке. +4. **Несколько сохранённых ПК** — последующее расширение, сейчас сохраняется один. + +Изменения первого этапа: + +- Итоговый `bde6f7a`: [Actions 34712051233](https://github.com/polskikh13/musicbridgeios/actions/runs/34712051233) + — 23 XCTest без отказов, Release archive успешен. IPA 0.3.0 (build 4) скачана + в `build/iPhone-0.3.0/MusicBridge-iPhone.ipa`; проверены ZIP, платформа iPhoneOS, + ARM64 и версия. Экран подключения просмотрен на снимке симулятора. + +- Четыре попытки загрузить обложку, паузы 2/4/8 секунд, отдельное сообщение и кнопка + ручного повтора. После 404 перечитывается состояние, чтобы заметить смену трека. + Старая обложка не должна подменять новую после запоздавшего ответа. +- При уходе в фон закрываются текущие соединения и незавершённое сопряжение; + его поздний ответ не сохраняется. Если сервер уже создал запись устройства, + пользователь получает указание удалить её перед повторным сопряжением. +- Ответ 401 переводит приложение в состояние повторного сопряжения, останавливает + автоматические повторы и сохраняет этот статус при возвращении из фона. +- Понятные сообщения для invalid_code, pairing_closed, device_limit, storage_failed, + HTTP-ошибок, сетевых сбоев и TLS. Текст отказа команды не стирается обновлением + прогресса; сообщение можно скрыть. Команды не повторяются автоматически. +- Успех команды и неудача последующего чтения состояния различаются в интерфейсе. + После недоступности Keychain при запуске чтение повторяется при активации приложения. +- Реальные HTTPS/WSS тесты используют временный сервер CI с задержками, 404/401/503, + redirect, ошибками сопряжения и сменой обложки. Реальный пользовательский Keychain + в этих тестах не изменяется. Сон ПК, Wi-Fi и системную блокировку надо проверить + отдельно на физических устройствах. ## Результаты 2026-09-10 diff --git a/README.md b/README.md index 33fce5d..179c75b 100644 --- a/README.md +++ b/README.md @@ -67,10 +67,17 @@ Apple ID и сертификаты для этой проверки не тре ## Установка на iPhone через Sideloadly Пользователь также подтвердил установку через iloader. Для повторной установки -с QR и поиском ПК используйте версию **0.2.0 (build 3)**: -`build/iPhone-0.2.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и +с исправлениями устойчивости используйте версию **0.3.0 (build 4)**: +`build/iPhone-0.3.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и подпишите тем же Apple Account, которым установлена первая версия. +В 0.3.0 обложка повторно загружается после временного сбоя, а после четырёх +неудачных попыток доступен ручной повтор. Отозванный доступ требует нового +сопряжения; автоматические попытки прекращаются. Если свернуть приложение во +время сопряжения, повторите его со свежим QR (удалив созданную запись на ПК, +если она уже успела появиться). При неизвестном результате команды проверьте +плеер перед повтором: приложение не повторяет команды автоматически. + Workflow также выполняет Release archive для `generic/platform=iOS` и создаёт `MusicBridge-iPhone.ipa` в артефакте `MusicBridge-iPhone`. Это ARM64-сборка для iOS 17+, без подписи. Подпись создаёт Sideloadly на вашем ПК с вашим Apple Account.