Is there any way to disable the screen recording? or is is possible through a configuration profile? or any third party library is available?
Asked
Active
Viewed 1.3k times
8
-
@PyaePhyoeShein without using blockView any solution?.. – Alok Maurya Dec 21 '18 at 09:40
-
how about `self.view.backgroundColor = UIColor.red` or something else? – PPShein Dec 21 '18 at 09:43
-
without interrupted my app user experience. only my app can avoid screen recordding ??. – Alok Maurya Dec 21 '18 at 09:46
-
1show overlay popup with warning is the best. – PPShein Dec 21 '18 at 09:48
4 Answers
12
NotificationCenter.default.addObserver(self, selector: #selector(preventScreenRecording), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil)
And create a view inside main view and prevent like that.
(void) preventScreenRecording {
if (@available(iOS 11.0, *)) {
BOOL isCaptured = [[UIScreen mainScreen] isCaptured];
if (isCaptured) {
self.blockView.hidden = false;
}
else {
self.blockView.hidden = true;
}
}

PPShein
- 13,309
- 42
- 142
- 227
-
Can you explain what is blockView here? And I believe this method is called after screenshot is captured. I haven't tested it yet – NightFury Jan 13 '20 at 10:26
-
-
@NightFury blockView is the area that you want to disable screenRecording. – PPShein Feb 12 '20 at 01:34
-
-
-
Pls see https://stackoverflow.com/a/71170751/9978212, having complete code. – midhun p Feb 18 '22 at 09:18
4
When your app is started you can test UIScreen.isCaptured
property and show some splash screen if it's set to true
.
You should also observe (subscribe in some place for) capturedDidChangeNotification
notification, and do same thing (show splash screen) if UIScreen.isCaptured
is set to true
.

Daniel Sumara
- 2,234
- 20
- 25
-
I am able to detect screen recoding using UIScreen.isCaptured.how to avoid screen recoding in my app without interrupted user experience of my app. – Alok Maurya Dec 21 '18 at 09:36
2
Swift 4 and above
You just need to make the following changes in your Appdelegate.swift page.
It will automatically add a blurred view on the top of the app when the user tries to record the screen.
weak var screen : UIView? = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
NotificationCenter.default.addObserver(self, selector: #selector(preventScreenRecording), name: UIScreen.capturedDidChangeNotification, object: nil)
return true
}
@objc func preventScreenRecording() {
let isCaptured = UIScreen.main.isCaptured
print("isCaptured: \(isCaptured)")
if isCaptured {
blurScreen()
}
else {
removeBlurScreen()
}
}
func blurScreen(style: UIBlurEffect.Style = UIBlurEffect.Style.regular) {
screen = UIScreen.main.snapshotView(afterScreenUpdates: false)
let blurEffect = UIBlurEffect(style: style)
let blurBackground = UIVisualEffectView(effect: blurEffect)
screen?.addSubview(blurBackground)
blurBackground.frame = (screen?.frame)!
window?.addSubview(screen!)
}
func removeBlurScreen() {
screen?.removeFromSuperview()
}

midhun p
- 1,987
- 18
- 24
1
sharedRecorder.stopRecording( handler: { previewViewController, error in
if let error = error {
print("\(error.localizedDescription)")
}
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
previewViewController?.modalPresentationStyle = UIModalPresentationStyle.popover
previewViewController?.popoverPresentationController?.sourceRect = CGRect.zero
previewViewController?.popoverPresentationController?.sourceView = self.view
}
if previewViewController != nil {
self.previewViewController = previewViewController
previewViewController?.previewControllerDelegate = self
}
self.present(previewViewController!, animated: true, completion: nil)
})
return
}
https://developer.apple.com/documentation/replaykit/rpscreenrecorder/1620990-stoprecording

Manish_Nainwal
- 301
- 1
- 5