Document interactive activity release and NowPlaying research [skip ci]
This commit is contained in:
@@ -68,8 +68,8 @@ Apple ID и сертификаты для этой проверки не тре
|
||||
## Установка на iPhone через Sideloadly
|
||||
|
||||
Пользователь также подтвердил установку через iloader. Для повторной установки
|
||||
с Live Activity используйте версию **0.5.0 (build 6)**:
|
||||
`build/iPhone-0.5.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и
|
||||
с Live Activity используйте версию **0.6.0 (build 7)**:
|
||||
`build/iPhone-0.6.0/MusicBridge-iPhone.ipa`. Выберите этот файл в iloader и
|
||||
подпишите тем же Apple Account, которым установлена первая версия.
|
||||
|
||||
В 0.4.0 добавлены иконка, карточка QR, раскрываемые ручные поля, крупная
|
||||
@@ -106,34 +106,46 @@ Sideloadly (в том числе его функцией автоматичес
|
||||
[Sideloadly FAQ](https://sideloadly.io/faq) ·
|
||||
[Apple: режим разработчика](https://developer.apple.com/documentation/Xcode/enabling-developer-mode-on-a-device)
|
||||
|
||||
## Live Activity и Dynamic Island
|
||||
## Live Activity и Dynamic Island — 0.6.0
|
||||
|
||||
После подключения к ПК и появления трека нажмите под плеером
|
||||
«Показать на экране блокировки». Та же карточка появится в Dynamic Island
|
||||
на моделях, где он доступен. Долгое нажатие на Island раскрывает представление;
|
||||
нажатие на карточку или «Открыть плеер» возвращает в приложение.
|
||||
Кнопка «Убрать с экрана блокировки» завершает активность. Она также завершается,
|
||||
когда ПК сообщает об отсутствии медиасессии, доступ отозван или компьютер забыт.
|
||||
Удалённая пользователем карточка не создаётся снова автоматически.
|
||||
После обновления с 0.5.0 уберите старую карточку кнопкой в приложении и нажмите
|
||||
«Показать на экране блокировки» заново. Это связывает кнопки с текущим сопряжением
|
||||
и переводит запись Keychain в режим доступа после первого разблокирования.
|
||||
Токен остаётся только на этом устройстве, не копируется в виджет или UserDefaults.
|
||||
|
||||
Это **последний снимок состояния ПК**: название, исполнитель, состояние и прогресс.
|
||||
В обычном режиме позиция обновляется не чаще раза в пять секунд; смена трека
|
||||
и play/pause отправляются сразу. Прогресс не выдумывает движение без связи с ПК.
|
||||
При уходе приложения в фон или потере связи отображается отметка устаревших данных;
|
||||
резервный `staleDate` — 15 секунд, если приложение было внезапно остановлено.
|
||||
Для обновления нажмите карточку. Прямых кнопок управления внутри неё пока нет.
|
||||
На экране блокировки и в развёрнутом Dynamic Island доступны предыдущий трек,
|
||||
play/pause, следующий трек и обновление. Компактный Island открывает приложение;
|
||||
для кнопок удерживайте Island. Каждое действие выполняет отдельные HTTPS-запросы
|
||||
с прежней проверкой сертификата. Оно работает через LiveActivityIntent в процессе
|
||||
приложения, без открытия интерфейса; постоянного сетевого потока в фоне нет.
|
||||
|
||||
Live Activity не поддерживает постоянный сетевой поток сама по себе. Для обновления
|
||||
при приостановленном приложении нужен отдельный механизм ActivityKit push через
|
||||
APNs. В этой версии нет push-токенов, сервера APNs, фонового аудио и App Intents.
|
||||
[Ограничения и жизненный цикл ActivityKit](https://developer.apple.com/documentation/activitykit/displaying-live-data-with-live-activities).
|
||||
Перед командой считываются возможности плеера, затем команда отправляется один раз
|
||||
и перечитывается состояние. Повторы команд отключены; при неизвестном результате
|
||||
сначала используйте обновление. Одновременно выполняется одно действие карточки.
|
||||
После закрытия карточки или удаления её связи с ПК новые команды не отправляются.
|
||||
Для нового адреса ПК сначала откройте приложение: Bonjour-перенос адреса остаётся
|
||||
в основном приложении. При отзыве доступа карточка завершается.
|
||||
|
||||
В IPA включено расширение `MusicBridgeWidgets.appex`; при установке iloader должен
|
||||
сохранить и подписать его вместе с приложением. Если Live Activity не появилась,
|
||||
проверьте её разрешение в настройках MusicBridge и наличие расширения в логе установки.
|
||||
Автоматические снимки `live-card-*-screen.png` показывают общую SwiftUI-разметку
|
||||
карточки в Debug-предпросмотре: это не доказательство её регистрации на реальном
|
||||
экране блокировки или системного отображения Dynamic Island.
|
||||
При обычном сворачивании показывается время последнего обновления, а не ошибка
|
||||
«Данные устарели». Прогресс соответствует этому снимку. Реальная ошибка сети или
|
||||
команды выводится на карточке. Изменения, сделанные непосредственно на ПК, при
|
||||
приостановленном приложении не появятся сами: нажмите обновление или откройте плеер.
|
||||
Для постоянных фоновых обновлений остаётся отдельная задача APNs.
|
||||
|
||||
В IPA есть расширение `MusicBridgeWidgets.appex`: iloader должен сохранить и подписать
|
||||
его вместе с приложением. Проверка работы интентов в заблокированном состоянии и
|
||||
системного отображения Island выполняется на iPhone; CI проверяет сборку, сетевую
|
||||
логику команд и разметку. После перезагрузки сначала один раз разблокируйте iPhone.
|
||||
|
||||
### Встроенный музыкальный пульт iOS
|
||||
|
||||
Apple предлагает `RemoteMediaSession` в новом NowPlaying framework (iOS 27+)
|
||||
для отображения музыки внешнего устройства на экране блокировки и в Control Center.
|
||||
Это подходит архитектуре MusicBridge. Нужны SDK/Xcode 27 и отдельное расширение
|
||||
`com.apple.nowplaying.remote-media`; текущая сборка использует Xcode 16.4.
|
||||
Эта интеграция исследована, но ещё не реализована. Для фоновых обновлений удалённых
|
||||
сессий Apple также предоставляет push-механизм.
|
||||
[Документация remote media sessions](https://developer.apple.com/documentation/nowplaying/publishing-remote-media-sessions).
|
||||
|
||||
## Источники
|
||||
|
||||
|
||||
Reference in New Issue
Block a user