iOS 和 iPadOS 的 ReplayKit 安全性
ReplayKit 程式框架允許開發者在其 App 中加入錄製與即時廣播功能。此外,它允許使用者運用裝置的前鏡頭和麥克風來為其錄製的內容和廣播加上註解。
影片錄製
錄製影片中打造的安全性層級有數層:
權限對話框:在錄製開始前,ReplayKit 會提供使用者同意警示,要求使用者確認其錄製螢幕畫面、麥克風及前置相機的意圖。系統會針對每個 App 處理程序顯示此警示一次,且若 App 停留在背景超過 8 分鐘,將會再次顯示。
螢幕與音訊擷取:螢幕與音訊擷取是在 App 的處理程序外、於 ReplayKit 的服務程式 replayd 中進行。此設計可確保錄製的內容從不讓 App 處理程序存取。
App 內的螢幕與音訊擷取:這可讓 App 取得影片和樣本緩衝,且受到權限對話框的保護。
影片製作與儲存:影片檔會直接寫入目錄,只有 ReplayKit 的子系統可存取,且從不讓任何 App 存取。這樣可協助防止錄製內容未經使用者同意而遭第三方使用。
終端使用者預覽與共享:使用者可使用 ReplayKit 提供的使用者介面來預覽與共享影片。使用者介面會透過「iOS 延伸功能」基礎架構跨處理序呈現,並可存取產生的影片檔。
ReplayKit 廣播
廣播影片中打造的安全性層級有數層:
螢幕與音訊擷取:廣播期間的螢幕與音訊擷取機制與影片錄製相同,且會發生於
replayd
中。廣播延伸功能:若要讓第三方服務參與 ReplayKit 廣播,它們需要建立兩個新延伸功能(以 com.apple.broadcast-services 端點加以設定):
允許使用者設定其廣播的使用者介面延伸功能
上傳延伸功能,可處理上傳影片與音訊資料至服務的後端伺服器
該架構可協助確保託管 App 對廣播的影片和音訊內容沒有特權。只有 ReplayKit 和第三方廣播延伸功能具有存取權。
廣播選擇器:使用廣播選擇器,使用者可直接從 App 開始發送系統廣播(使用可從「控制中心」存取的相同系統定義使用者介面)。系統會使用專用 API 來導入使用者介面,且其為位於 ReplayKit 程式框架中的延伸功能。其為來自託管 App 的跨處理序延伸功能。
上傳延伸功能:第三方廣播服務會實作延伸功能,以在廣播使用原始未編碼的樣本緩衝期間處理影片和音訊內容。進行此處理模式期間,系統會將影片和音訊資料序列化,並透過直接 XPC 連線來即時傳遞至第三方的上傳延伸功能。影片資料完成編碼的方式是藉由從影片樣本緩衝擷取 IOSurface 物件、以安全的方式編碼為 XPC 物件,再透過 XPC 傳送至第三方延伸功能,並安全地解碼回 IOSurface 物件。