Document verified resilience stage and next iOS phases [skip ci]
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user