daehan park
daehan park

Reputation: 118

iOS detect/block screen recording using QuickTime player

I want to block screen recording or video output per my app using QuickTime Player.

I had detected hdmi output and airplay with UIScreen. But QuickTime Player video recording was no detect.

How to detect QuickTime Player?

Thanks.

Upvotes: 1

Views: 3639

Answers (2)

Carlos Chaguendo
Carlos Chaguendo

Reputation: 3085

With iOS 11 you can use the notification

NSNotification.Name.UIScreenCapturedDidChange

on AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    NotificationCenter.default.addObserver(self, selector: #selector(checkIFScreenIsCapture), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil) ......

use selector

func checkIFScreenIsCapture(notification:Notification){
    guard let screen = notification.object as? UIScreen else { return }
    if screen.isCaptured == true {

    }else{

    }
}

Upvotes: 3

daehan park
daehan park

Reputation: 118

Thus don't know detect QuickTime Player recording.

But I Found a solution with some trick.

If QuickTime Player recording is running, AVAudioSession's output portType has been changed to HDMIOutput.

So I coding as follows...(Swift 2.2)

func checkOutputPortType() {
    let asRoute = AVAudioSession.sharedInstance().currentRoute
    for output in asRoute.outputs {
        if output.portType == AVAudioSessionPortHDMI {
            // something you want..
        }
    }
}

Insert that function in ViewDidLoad and added AVAudioSessionRouteChangeNotification notification.

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(checkOutputPortType), name: AVAudioSessionRouteChangeNotification, object: nil)

Thanks.

Upvotes: 3

Related Questions