Безопасность ReplayKit в iOS и iPadOS
ReplayKit — это программная среда, которая позволяет разработчикам добавлять в свои приложения функции записи и проведения прямых трансляций. Кроме того, она позволяет пользователям комментировать свои записи и трансляции, используя фронтальную камеру устройства и микрофон.
Запись фильмов
При записи фильмов используется многоуровневая система безопасности.
Диалоговое окно разрешений. Перед началом записи ReplayKit предлагает пользователю подтвердить свое согласие на запись содержимого экрана, звука с микрофона и изображения с фронтальной камеры. Предупреждение отображается однократно в рамках одного процесса приложения. Если приложение остается в фоновом режиме более 8 минут, предупреждение отображается повторно.
Запись содержимого экрана и звука. Запись содержимого экрана и звука выполняется вне процесса приложения — в демоне ReplayKit replayd. Эта мера направлена на то, чтобы процесс приложения не смог получить доступ к записанным данным.
Запись содержимого экрана и звука внутри приложения. Это позволяет приложению получать буферы видео и фрагментов после того, как пользователь дал согласие в диалоговом окне разрешений.
Создание и хранение фильма. Файл фильма записывается в каталог, который доступен только подсистемам ReplayKit и не доступен никаким приложениям. Это помогает предотвратить использование записей третьими сторонами без согласия пользователя.
Просмотр конечным пользователем и публикация. Пользователь может просмотреть и опубликовать фильм через интерфейс, предоставляемый ReplayKit. Интерфейс предоставляется отдельно от процесса через инфраструктуру расширений iOS и имеет доступ к полученному файлу фильма.
Прямая трансляция ReplayKit
При прямой трансляции используется многоуровневая система безопасности.
Запись содержимого экрана и звука. Механизм записи содержимого экрана и звука во время прямой трансляции идентичен записи видео; запись выполняется в демоне
replayd
.Расширения прямой трансляции. Чтобы службы сторонних разработчиков могли принимать участие в прямой трансляции ReplayKit, они должны создать два новых расширения с конечной точкой com.apple.broadcast-services:
расширение интерфейса пользователя, чтобы пользователь мог настраивать прямую трансляцию;
расширение загрузки, которое будет обрабатывать загрузку видео- и аудиоданных на внутренние серверы службы.
Эта архитектура позволяет гарантировать, что хостинговые приложения не смогут получить доступ к передаваемым видео- и аудиоматериалам. Доступ есть только у ReplayKit и расширений прямой трансляции сторонних разработчиков.
Инструмент выбора для прямой трансляции. С помощью этого инструмента пользователи могут запустить прямую трансляцию из приложения, используя тот же интерфейс пользователя, который доступен через Пункт управления. Интерфейс пользователя реализуется с помощью закрытого API и является расширением в рамках программной среды ReplayKit. Он существует отдельно от процесса приложения публикации.
Расширение загрузки. Расширение, реализуемое сторонними службами прямой трансляции для обработки видео- и аудиоматериалов во время эфирного вещания, использует буферы необработанных незакодированных фрагментов. В этом режиме видео- и аудиоданные преобразуются в последовательную форму и передаются стороннему расширению загрузки в реальном времени через прямое соединение XPC. Кодирование видеоданных выполняется следующим образом: объект IOSurface извлекается из буфера видеофрагментов, надежно кодируется как объект XPC, пересылается стороннему расширению через XPC, а затем снова декодируется в объект IOSurface.