
Segurança de ReplayKit no iOS e iPadOS
O ReplayKit é uma estrutura que permite que desenvolvedores adicionem recursos de gravação e transmissão ao vivo a seus apps. Além disso, ele também permite que usuários usem a câmera frontal e o microfone do dispositivo para comentar em suas gravações e transmissões.
Gravação de filmes
Há várias camadas de segurança integradas à gravação de um filme:
- Diálogo de permissões: antes da gravação ser iniciada, o ReplayKit apresenta um alerta de consentimento ao usuário, solicitando que ele reconheça sua intenção de gravar a tela, usar o microfone e a câmera frontal. Esse alerta é apresentado uma vez por processo de app, sendo apresentado novamente se o app permanecer em segundo plano por mais de oito minutos. 
- Captura de tela e áudio: a captura de tela e áudio ocorre fora do processo do app, no daemon replayd do ReplayKit. Isso é projetado para garantir que o conteúdo gravado nunca fique acessível ao processo do app. 
- Captura de tela e áudio dentro de apps: permite que um app obtenha buffers de vídeo e amostra, o que é protegido por meio do diálogo de permissões. 
- Criação e armazenamento de filmes: o arquivo de filme é gravado em um diretório acessível apenas aos subsistemas do ReplayKit e nunca fica acessível a nenhum app. Isso ajuda a impedir que as gravações sejam usadas por terceiros sem o consentimento do usuário. 
- Pré-visualização e compartilhamento pelo usuário final: o usuário é capaz de pré-visualizar e compartilhar o filme com uma interface de usuário oferecida pelo ReplayKit. A interface de usuário é apresentada fora do processo através da infraestrutura de Extensões do iOS e tem acesso ao arquivo de filme gerado. 
Transmissão com ReplayKit
Há várias camadas de segurança integradas à transmissão de um filme:
- Captura de tela e áudio: o mecanismo de captura de tela e áudio durante a transmissão é idêntico ao da gravação de filmes, ocorrendo no - replayd.
- Extensões de transmissão: para que serviços de terceiros participem da transmissão do ReplayKit, é necessário que eles criem duas novas extensões que estejam configuradas pelo com.apple.broadcast-services: - Uma extensão de interface de usuário que permita ao usuário configurar a transmissão; 
- Uma extensão de envio que gerencie o envio de dados de vídeo e áudio para os servidores de retaguarda do serviço. 
 
A arquitetura ajuda a garantir que os apps hosts não tenham nenhum privilégio sobre o conteúdo de vídeo e áudio da transmissão. Apenas o ReplayKit e as extensões de transmissão de terceiros possuem acesso.
- Seletor de transmissão: com o seletor de transmissão, o usuário inicia transmissões do sistema diretamente do app com a mesma interface de usuário definida pelo sistema, que pode ser acessada através da Central de Controle. A interface de usuário é uma extensão que reside dentro do framework ReplayKit, implementada ao usar uma API privada. Ele não pode ser processado pelo app host. 
- Extensão de envio: a extensão implementada por serviços de transmissão de terceiros para gerenciar conteúdo de vídeo e áudio durante uma transmissão usa buffers de amostra não codificados e não processados. Durante esse modo de gerenciamento, os dados de vídeo e áudio são serializados e passados à extensão de envio do terceiro em tempo real por uma conexão XPC direta. Os dados de vídeo são codificados ao extrair o objeto IOSurface do buffer de amostra do vídeo, codificá-lo com segurança como um objeto XPC, enviá-lo através do XPC para a extensão de terceiros e descodificá-lo com segurança de volta em um objeto IOSurface.