iOSおよびiPadOSでのReplayKitのセキュリティ
ReplayKitはデベロッパが収録やライブブロードキャスト機能をアプリに追加することを可能にするフレームワークです。また、ユーザはデバイスの前面のカメラとマイクを使用して、収録やブロードキャストに注釈を加えることもできます。
ムービーの収録
ムービーの収録機能には、何層ものセキュリティ機能が埋め込まれています。
許可を求めるダイアログ: 収録開始前に、ReplayKitは、ユーザが画面、マイク、および前面カメラを収録する意図があることを確認する注意画面を表示し、同意を求めます。この画面は、アプリプロセスごとに1回表示され、アプリがバックグラウンドにある状態が8分を超えた場合も表示されます。
画面および音声の取り込み: 画面および音声の取り込みはアプリのプロセス内ではなく、ReplayKitのデーモンreplayd内で実行されます。これは、収録されたコンテンツがアプリプロセスからはアクセスできないことを保証するためです。
アプリ内の画面および音声の取り込み: アプリにビデオおよびサンプルのバッファを設けることができます。これは許可を求めるダイアログで保護されています。
ムービーの作成および保存: ムービーファイルはReplayKitのサブシステムのみがアクセスできるディレクトリに書き込まれるので、アプリからはアクセスできません。これにより、収録された内容がユーザの同意なく第三者によって使用されることを防止できます。
エンドユーザによるプレビューおよび共有: ユーザはReplayKitによって提供されるユーザインターフェイスを使用してムービーをプレビューおよび共有できます。このユーザインターフェイスは、iOS機能拡張インフラストラクチャにより別のプロセスを使って表示され、生成されたムービーファイルにアクセスします。
ReplayKitによるブロードキャスト
ムービーのブロードキャスト機能には、何層ものセキュリティ機能が埋め込まれています:
画面および音声の取り込み: ブロードキャスト中の画面および音声取り込みは、ムービーの収録と同様に
replayd
内で実行されます。ブロードキャスト機能拡張: 他社製サービスがReplayKitブロードキャストに加わる場合、com.apple.broadcast-servicesエンドポイントで構成される新しい機能拡張を2つ作成する必要があります。
ユーザがブロードキャストを設定できるユーザインターフェイス機能拡張
ビデオおよび音声データをサービスのバックエンドサーバにアップロードするアップロード機能拡張
このアーキテクチャにより、ブロードキャストされるビデオと音声のコンテンツに関するいかなる権限もホストアプリが持たないことを保証できます。ReplayKitと他社製のブロードキャスト機能拡張のみがアクセスできます。
ブロードキャストピッカー: ブロードキャストピッカーを使用すると、ユーザはコントロールセンターからアクセスできるシステム定義のユーザインターフェイスを使用して、アプリ内から直接、システムブロードキャストを開始できます。このユーザインターフェイスはプライベートAPIを使用して実装され、ReplayKitフレームワーク内で動作する機能拡張です。これはホスト側アプリとは別のプロセスで実行されます。
アップロード機能拡張: ブロードキャスト中のビデオおよび音声コンテンツを処理するために他社製ブロードキャストサービスが実装する機能拡張では、エンコードされていない生のサンプルバッファが使用されます。この処理モードでは、ビデオおよび音声データはシリアル化され、直接XPC接続を通じて他社製アップロード機能拡張にリアルタイムで渡されます。ビデオデータは、ビデオサンプルバッファからIOSurfaceオブジェクトを抽出することでエンコードされ、XPCオブジェクトとして安全にエンコードされます。このデータは、XPC経由で他社製の機能拡張に送信され、そこでIOSurfaceオブジェクトへ安全にデコードされます。