Document interactive activity release and NowPlaying research [skip ci]
This commit is contained in:
@@ -46,7 +46,10 @@ Windows-агент — соседний проект `C:/Users/areso/MusicBridge
|
||||
- [x] Пользователь подтвердил работу 0.4.0 на iPhone: «всё вроде работает».
|
||||
- [x] Локальная Live Activity и Dynamic Island: реализация отображения трека в 0.5.0.
|
||||
- [ ] Проверить Live Activity на экране блокировки и Dynamic Island после подписи через iloader.
|
||||
- [ ] App Intents: прямые действия из Live Activity и команды Siri.
|
||||
- [x] LiveActivityIntent: предыдущий/следующий трек, play/pause и обновление — 0.6.0.
|
||||
- [ ] Проверить команды из Live Activity/Island при блокировке на физическом iPhone.
|
||||
- [ ] Команды Siri.
|
||||
- [ ] NowPlaying RemoteMediaSession (iOS 27+): перейти на SDK 27, добавить remote-media extension и проверить системный Control Center.
|
||||
- [ ] APNs: отдельный проект обновлений при приостановленном приложении, если нужен постоянный актуальный трек в фоне.
|
||||
|
||||
Ограничения: хранится один доверенный ПК; адрес при смене IP восстанавливается через
|
||||
@@ -143,13 +146,51 @@ Bonjour, если доступны объявления того же агент
|
||||
раскрываемые ручные поля, крупная play/pause, процент громкости и меню ПК.
|
||||
Сборка и 23 XCTest прошли; просмотрены темы, компактный экран и крупный текст.
|
||||
Пользователь подтвердил работу обновления на телефоне перед началом этапа 3.
|
||||
3. **Системные интеграции — 0.5.0 (build 6).** Локальная Live Activity и Dynamic Island
|
||||
реализованы; 26 XCTest и Release archive прошли. Карточка показывает последний снимок
|
||||
с ПК, открывает плеер, помечает устаревшие данные. App Intents и APNs не реализованы.
|
||||
3. **Системные интеграции — 0.6.0 (build 7).** Добавлены прямые действия LiveActivityIntent.
|
||||
Убрана ошибка устаревания при обычном сворачивании; каждое нажатие перечитывает ПК.
|
||||
32 XCTest и Release archive прошли. APNs и встроенный системный музыкальный пульт ещё не реализованы.
|
||||
Не имитировать фоновое аудио. Не обещать постоянный WSS при блокировке.
|
||||
4. **Несколько сохранённых ПК** — последующее расширение, сейчас сохраняется один.
|
||||
|
||||
Изменения третьего этапа — Live Activities 0.5.0:
|
||||
Продолжение третьего этапа — 0.6.0:
|
||||
|
||||
- Итоговый `43c78b2`: [Actions 34748340408](https://github.com/polskikh13/musicbridgeios/actions/runs/34748340408)
|
||||
— 32 XCTest без отказов, успешный Release archive. IPA 0.6.0 (7) скачана в
|
||||
`build/iPhone-0.6.0/MusicBridge-iPhone.ipa`; проверены ARM64 iPhoneOS приложения
|
||||
и расширения, версии, метаданные интентов. Просмотрены светлая и тёмная карточки.
|
||||
Работа системного запуска LiveActivityIntent и Keychain после блокировки требует
|
||||
проверки на телефоне: обновить IPA, выключить/включить карточку, заблокировать,
|
||||
проверить next/previous/toggle/refresh; затем повторить после перезагрузки и первого unlock.
|
||||
- Пользователь сообщил, что карточка постоянно пишет об устаревших данных.
|
||||
Причина: `PlayerStore.stop()` вызывал `unavailable()` при каждом уходе в фон.
|
||||
Удалён этот вызов; реальные сетевые отказы продолжают отмечаться отдельно.
|
||||
Карточка показывает время последнего снимка и отдельные ошибки запросов.
|
||||
- Shared `MusicControlIntent` соответствует LiveActivityIntent. WidgetKit содержит
|
||||
определение интента, выполнение сети компилируется только в основной app target;
|
||||
iOS запускает процесс приложения без открытия UI. На компактном/минимальном Island
|
||||
кнопок нет: нужно раскрыть долгим нажатием. Кнопки не отключаются из-за старого снимка.
|
||||
- `LiveActivityCommands`: одно действие одновременно, проверка живой Activity и связи
|
||||
её ID с fingerprint текущего сопряжения. После чтения состояния повторно проверяется
|
||||
актуальность карточки, затем проверяются capabilities и отправляется максимум одна
|
||||
команда. Refresh вообще не отправляет команду. Повторов команд нет.
|
||||
- После успеха перечитывается трек и обновляется Activity. 401 завершает её;
|
||||
неизвестный результат и неудача чтения после успеха имеют разные сообщения.
|
||||
Нет бесконечного WSS/Bonjour в фоне; после смены IP сначала открыть приложение.
|
||||
- Keychain: AfterFirstUnlockThisDeviceOnly вместо WhenUnlockedThisDeviceOnly,
|
||||
чтобы команды работали при заблокированном iPhone. Существующий токен мигрирует
|
||||
при повторном включении карточки. Он не покидает Keychain и не попадает в payload.
|
||||
В UserDefaults сохраняется только соответствие ID активности и публичного pin.
|
||||
После обновления с 0.5.0 карточку выключить и включить заново в приложении.
|
||||
- HTTPS-тесты проверяют одну отправку next и новый трек, refresh без команды,
|
||||
закрытую карточку, неподдерживаемую команду, отсутствие повторов отказавшей команды,
|
||||
ошибку чтения после успешной команды. Физический запуск интента проверяется отдельно.
|
||||
- Ответ на вопрос пользователя о встроенном музыкальном центре: официальный
|
||||
[NowPlaying RemoteMediaSession](https://developer.apple.com/documentation/nowplaying/publishing-remote-media-sessions)
|
||||
предназначен для внешнего воспроизведения. Metadata Apple указывает iOS 27.0.
|
||||
Текущий runner собирает Xcode 16.4: следующий этап — SDK/Xcode 27 и отдельное
|
||||
`com.apple.nowplaying.remote-media` расширение. Интеграция ещё не реализована.
|
||||
|
||||
История третьего этапа — Live Activities 0.5.0 (поведение фона изменено в 0.6.0):
|
||||
|
||||
- Итоговый `ddd44e8`: [Actions 34747772034](https://github.com/polskikh13/musicbridgeios/actions/runs/34747772034)
|
||||
— 26 XCTest без отказов, сборка приложения и WidgetKit-расширения, успешный Release archive.
|
||||
|
||||
Reference in New Issue
Block a user