[iOS 11] 画面の録画を検知する

2017.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

iOS 11には画面収録という機能が追加されており、iPhone単体で画面の録画ができます。

[iOS 11][小ネタ] iPhone だけで画面の録画ができるようになりました

本記事では画面の録画をアプリから検知する方法を紹介します。

検証環境

  • Mac
    • macOS High Sierra 10.13
    • Xcode Version 9.2 (9C40b)
  • iPhone X
    • iOS 11.2 (15B202)

実装

録画中かどうかを判別する

iOS 11でUIScreenに追加されたisCapturedプロパティを使用すれば、録画中かどうかを判別できます。

self.label.text = UIScreen.main.isCaptured ? "キャプチャされています!" : "キャプチャされていません!"

録画の開始/停止を検知する

iOS 11で追加されたUIScreenCapturedDidChange通知を購読すれば、録画の開始/停止を検知できます。

NotificationCenter.default.addObserver(forName: .UIScreenCapturedDidChange,
                                       object: nil,
                                       queue: nil) { _ in
                                        self.label.text = UIScreen.main.isCaptured ? "キャプチャされています!" : "キャプチャされていません!"
}

動作結果

サンプルアプリを起動します。

iOS 11の画面収録を使用した場合

コントロールセンター上の画面収録ボタンをタップして録画を開始します。

録画開始すると、isCapturedプロパティの値がtrueになります。

録画停止すると、isCapturedプロパティの値がfalseになります。

QuickTime Playerを使用した場合

iPhoneとMacをLightningケーブルで繋ぎ、QuickTime PlayerでiPhoneの画面を表示した場合もisCapturedプロパティの値がtrueになりました。

さいごに

本記事では画面の録画をアプリから検知する方法を紹介しました。

録画検知の用途の例として、Technical Q&A QA1970 では、以下のようなケースが挙げられています。

  • ビデオ再生アプリで、画面録画中は再生を止めたい場合

今回解説したサンプルコードは以下のリポジトリで公開しています。

参考資料