iOS11から追加されたScreenRecording、端末だけで録画ができて非常に便利ですが、音楽や映像を扱うアプリケーションにおいては大人の事情で禁止しなければならない場合がありますよね。
そんな時にScreenRecordingを禁止する方法です。
前提
ScreenRecording自体を操作するAPIは提供されていません。
よって、ScreenRecording中かどうかを検知しScreenRecording中の場合の処理をアプリケーションに実装する必要があります。
(ex.再生を停止する、アラートを表示する)
ScreenRecordingを検知
UIScreenのisCapturedにより検知します。
スクリーンレコーディング中はisCapturedの値がtrueとなります。
NSNotificationのUIScreenCapturedDidChangeを使うことでisCapturedの値が変更された時に通知を受け取ることもできます。
isCapturedはAirPlayが有効の時にもtrueとなってしまうため、
AirPlayを区別したい場合は別途AirPlay中かどうかの検知が必要となります。
AirPlayを検知
AVPlayerを使用している場合
AVPlayerを使用している場合、AirPlay中はisExternalPlaybackActiveがtrueになります。
AVPlayerを使用していない場合
AVPlayerを使用していない場合、多少強引ですがAVAudioSessionを用いて音の外部出力を調べることでAirPlay中かどうかの検知が可能です。
AVAudioSessionRouteDescription *audioRouteDesc = [[AVAudioSession sharedInstance] currentRoute];
NSArray *outputs = audioRouteDesc.outputs;
[outputs enumerateObjectsUsingBlock:^(AVAudioSessionPortDescription *audioDesc, NSUInteger idx, BOOL *stop) {
if([audioDesc.portType isEqualToString:AVAudioSessionPortAirPlay]){
// AirPlay中
}
else {
// その他
}
}];