Document verified resilience stage and next iOS phases [skip ci]

This commit is contained in:
2026-09-12 21:46:04 +03:00
parent bde6f7a466
commit bce04f5d96
2 changed files with 53 additions and 7 deletions
+44 -5
View File
@@ -31,15 +31,16 @@ Windows-агент — соседний проект `C:/Users/areso/MusicBridge
- [x] Первый успешный xcodebuild + XCTest на macOS: 7 тестов, 0 отказов. - [x] Первый успешный xcodebuild + XCTest на macOS: 7 тестов, 0 отказов.
- [x] Подключён GitHub remote polskikh13/musicbridgeios; Actions и чтение логов через gh работают. - [x] Подключён GitHub remote polskikh13/musicbridgeios; Actions и чтение логов через gh работают.
- [x] Интеграционные тесты TLS: верный/чужой/истёкший сертификат, HTTPS и WSS. - [x] Интеграционные тесты TLS: верный/чужой/истёкший сертификат, HTTPS и WSS.
- [ ] Интеграционный тест отказа от redirect. - [x] Пройдены интеграционные проверки redirect, 401, возврата из фона и загрузки обложки.
- [ ] Проверить 401 и отзыв устройства, Keychain после переустановки/блокировки. - [ ] Проверить реальный Keychain после переустановки/блокировки и отзыв устройства на физическом iPhone.
- [x] Установить на физический iPhone: пользователь подтвердил установку через iloader 2026-09-12. - [x] Установить на физический iPhone: пользователь подтвердил установку через iloader 2026-09-12.
- [x] Первое подключение к настоящему Windows-агенту: пользователь подтвердил рабочий пилот на iPhone 2026-09-12. - [x] Первое подключение к настоящему Windows-агенту: пользователь подтвердил рабочий пилот на iPhone 2026-09-12.
- [ ] Полная ручная проверка каждого действия, обложки и устойчивости в Яндекс Музыке и SoundCloud. - [ ] Полная ручная проверка каждого действия, обложки и устойчивости в Яндекс Музыке и SoundCloud.
- [x] Камера для QR, запрос доступа, сообщение при отказе, остановка камеры при закрытии/уходе в фон. - [x] Камера для QR, запрос доступа, сообщение при отказе, остановка камеры при закрытии/уходе в фон.
- [x] Bonjour-поиск `_musicbridge._tcp`, список адресов ПК и восстановление адреса с сохранённым сертификатом. - [x] Bonjour-поиск `_musicbridge._tcp`, список адресов ПК и восстановление адреса с сохранённым сертификатом.
- [ ] Проверить камеру, открытие QR стандартной камерой, Bonjour и смену IP на физическом iPhone. - [x] QR через камеру работает на физическом iPhone — подтверждено пользователем после установки 0.2.0.
- [ ] Улучшить ошибки сопряжения по серверным кодам; повтор загрузки обложки после 404. - [ ] Отдельно проверить оба входа (встроенный сканер и стандартная камера), отказ в доступе к камере, Bonjour и смену IP на физическом iPhone.
- [x] Реализованы понятные ошибки сопряжения по кодам сервера, повтор загрузки обложки после 404 и ручной повтор.
- [ ] Иконка приложения, визуальная проверка разных размеров экрана и Dynamic Type. - [ ] Иконка приложения, визуальная проверка разных размеров экрана и Dynamic Type.
- [ ] Live Activities / Dynamic Island / App Intents — отдельный последующий этап. - [ ] Live Activities / Dynamic Island / App Intents — отдельный последующий этап.
@@ -89,6 +90,7 @@ Bonjour, если доступны объявления того же агент
- `ContentView.swift`: подключение и плеер. - `ContentView.swift`: подключение и плеер.
- `QRScanner.swift`: камера AVFoundation, доступ, сканирование и жизненный цикл. - `QRScanner.swift`: камера AVFoundation, доступ, сканирование и жизненный цикл.
- `DiscoveryStore.swift`: Bonjour, разрешение адресов, TXT и безопасный выбор адреса. - `DiscoveryStore.swift`: Bonjour, разрешение адресов, TXT и безопасный выбор адреса.
- `ConnectionStorage.swift`: доступ к Keychain и подмена хранилища для изолированных тестов жизненного цикла.
- `MusicBridgeTests/`: XCTest и пример Windows JSON. - `MusicBridgeTests/`: XCTest и пример Windows JSON.
- `tools/`: генератор проекта, структурные проверки, выбор симулятора для CI. - `tools/`: генератор проекта, структурные проверки, выбор симулятора для CI.
- `.github/workflows/ios.yml`: CI на macOS. - `.github/workflows/ios.yml`: CI на macOS.
@@ -122,7 +124,44 @@ Bonjour, если доступны объявления того же агент
на снимке симулятора; исправлен статус при возвращении без сохранённого ПК. на снимке симулятора; исправлен статус при возвращении без сохранённого ПК.
IPA скачана в `build/iPhone-0.2.0/MusicBridge-iPhone.ipa`; проверены ZIP, ARM64 IPA скачана в `build/iPhone-0.2.0/MusicBridge-iPhone.ipa`; проверены ZIP, ARM64
iPhoneOS, версия 0.2.0 (3), разрешение камеры, Bonjour и обработчик URL в готовом пакете. 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 ## Результаты 2026-09-10
+9 -2
View File
@@ -67,10 +67,17 @@ Apple ID и сертификаты для этой проверки не тре
## Установка на iPhone через Sideloadly ## Установка на iPhone через Sideloadly
Пользователь также подтвердил установку через iloader. Для повторной установки Пользователь также подтвердил установку через iloader. Для повторной установки
с QR и поиском ПК используйте версию **0.2.0 (build 3)**: с исправлениями устойчивости используйте версию **0.3.0 (build 4)**:
`build/iPhone-0.2.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и `build/iPhone-0.3.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и
подпишите тем же Apple Account, которым установлена первая версия. подпишите тем же Apple Account, которым установлена первая версия.
В 0.3.0 обложка повторно загружается после временного сбоя, а после четырёх
неудачных попыток доступен ручной повтор. Отозванный доступ требует нового
сопряжения; автоматические попытки прекращаются. Если свернуть приложение во
время сопряжения, повторите его со свежим QR (удалив созданную запись на ПК,
если она уже успела появиться). При неизвестном результате команды проверьте
плеер перед повтором: приложение не повторяет команды автоматически.
Workflow также выполняет Release archive для `generic/platform=iOS` и создаёт Workflow также выполняет Release archive для `generic/platform=iOS` и создаёт
`MusicBridge-iPhone.ipa` в артефакте `MusicBridge-iPhone`. Это ARM64-сборка для `MusicBridge-iPhone.ipa` в артефакте `MusicBridge-iPhone`. Это ARM64-сборка для
iOS 17+, без подписи. Подпись создаёт Sideloadly на вашем ПК с вашим Apple Account. iOS 17+, без подписи. Подпись создаёт Sideloadly на вашем ПК с вашим Apple Account.