iOS Screen recording detection











up vote
0
down vote

favorite
1












I tried to detect if screen capture is on for the application for iOS 11, to detect this the UIScreen.mainScreen.isCaptured property is used to check if it is recorded.



It works fine for the first launch, when the app is terminated and launched again, then the API returns NO though the screen capture is on.



Code:



//In viewWillAppear block

__block ViewController *weakSelf = self;
[NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf screenCaptureDetection];
}];

- (void) screenCaptureDetection {
if (@available(iOS 11.0, *)) {
for (UIScreen *screen in [UIScreen screens]) {
if([screen performSelector:@selector(isCaptured)]){
//Detected YES
}
}
}


Use case scenario:




  1. Launch the app

  2. Start screen recorder using the apple screen recording option

  3. The screen recorder is detected

  4. Terminate the app

  5. Repeat the step 1 and 2

  6. The screen recording is not detected, the API UIScreen.mainScreen.isCaptured returns NO


Please suggest










share|improve this question
























  • If that's reproducible, have you considered filing a bugreport?
    – Gereon
    Nov 22 at 7:20










  • Yes it is reproducible
    – Raghav
    Nov 22 at 8:50










  • FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
    – Lukas
    Nov 22 at 13:31










  • @Lukas I will make the change
    – Raghav
    Nov 23 at 4:49















up vote
0
down vote

favorite
1












I tried to detect if screen capture is on for the application for iOS 11, to detect this the UIScreen.mainScreen.isCaptured property is used to check if it is recorded.



It works fine for the first launch, when the app is terminated and launched again, then the API returns NO though the screen capture is on.



Code:



//In viewWillAppear block

__block ViewController *weakSelf = self;
[NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf screenCaptureDetection];
}];

- (void) screenCaptureDetection {
if (@available(iOS 11.0, *)) {
for (UIScreen *screen in [UIScreen screens]) {
if([screen performSelector:@selector(isCaptured)]){
//Detected YES
}
}
}


Use case scenario:




  1. Launch the app

  2. Start screen recorder using the apple screen recording option

  3. The screen recorder is detected

  4. Terminate the app

  5. Repeat the step 1 and 2

  6. The screen recording is not detected, the API UIScreen.mainScreen.isCaptured returns NO


Please suggest










share|improve this question
























  • If that's reproducible, have you considered filing a bugreport?
    – Gereon
    Nov 22 at 7:20










  • Yes it is reproducible
    – Raghav
    Nov 22 at 8:50










  • FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
    – Lukas
    Nov 22 at 13:31










  • @Lukas I will make the change
    – Raghav
    Nov 23 at 4:49













up vote
0
down vote

favorite
1









up vote
0
down vote

favorite
1






1





I tried to detect if screen capture is on for the application for iOS 11, to detect this the UIScreen.mainScreen.isCaptured property is used to check if it is recorded.



It works fine for the first launch, when the app is terminated and launched again, then the API returns NO though the screen capture is on.



Code:



//In viewWillAppear block

__block ViewController *weakSelf = self;
[NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf screenCaptureDetection];
}];

- (void) screenCaptureDetection {
if (@available(iOS 11.0, *)) {
for (UIScreen *screen in [UIScreen screens]) {
if([screen performSelector:@selector(isCaptured)]){
//Detected YES
}
}
}


Use case scenario:




  1. Launch the app

  2. Start screen recorder using the apple screen recording option

  3. The screen recorder is detected

  4. Terminate the app

  5. Repeat the step 1 and 2

  6. The screen recording is not detected, the API UIScreen.mainScreen.isCaptured returns NO


Please suggest










share|improve this question















I tried to detect if screen capture is on for the application for iOS 11, to detect this the UIScreen.mainScreen.isCaptured property is used to check if it is recorded.



It works fine for the first launch, when the app is terminated and launched again, then the API returns NO though the screen capture is on.



Code:



//In viewWillAppear block

__block ViewController *weakSelf = self;
[NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf screenCaptureDetection];
}];

- (void) screenCaptureDetection {
if (@available(iOS 11.0, *)) {
for (UIScreen *screen in [UIScreen screens]) {
if([screen performSelector:@selector(isCaptured)]){
//Detected YES
}
}
}


Use case scenario:




  1. Launch the app

  2. Start screen recorder using the apple screen recording option

  3. The screen recorder is detected

  4. Terminate the app

  5. Repeat the step 1 and 2

  6. The screen recording is not detected, the API UIScreen.mainScreen.isCaptured returns NO


Please suggest







ios objective-c uiscreen






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 at 9:27

























asked Nov 22 at 7:09









Raghav

306727




306727












  • If that's reproducible, have you considered filing a bugreport?
    – Gereon
    Nov 22 at 7:20










  • Yes it is reproducible
    – Raghav
    Nov 22 at 8:50










  • FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
    – Lukas
    Nov 22 at 13:31










  • @Lukas I will make the change
    – Raghav
    Nov 23 at 4:49


















  • If that's reproducible, have you considered filing a bugreport?
    – Gereon
    Nov 22 at 7:20










  • Yes it is reproducible
    – Raghav
    Nov 22 at 8:50










  • FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
    – Lukas
    Nov 22 at 13:31










  • @Lukas I will make the change
    – Raghav
    Nov 23 at 4:49
















If that's reproducible, have you considered filing a bugreport?
– Gereon
Nov 22 at 7:20




If that's reproducible, have you considered filing a bugreport?
– Gereon
Nov 22 at 7:20












Yes it is reproducible
– Raghav
Nov 22 at 8:50




Yes it is reproducible
– Raghav
Nov 22 at 8:50












FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
– Lukas
Nov 22 at 13:31




FYI, unless you're still using MRR you should use __weak instead of __block. When using ARC, __block variables are still retained by the block. Also, __weak gives you a zeroing weak reference, which probably is what you're looking for.
– Lukas
Nov 22 at 13:31












@Lukas I will make the change
– Raghav
Nov 23 at 4:49




@Lukas I will make the change
– Raghav
Nov 23 at 4:49












1 Answer
1






active

oldest

votes

















up vote
0
down vote













You should check for recording repeatedly.



I used this code and it worked for me.
check it out:



https://gist.github.com/abhimuralidharan/8db55dff9023028867b719f251372bd7#file-screenrecordingdetector-m






share|improve this answer





















  • Yes, I am using the NSTimer to repeat the check for every 2 seconds
    – Raghav
    Nov 22 at 9:07











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53425563%2fios-screen-recording-detection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote













You should check for recording repeatedly.



I used this code and it worked for me.
check it out:



https://gist.github.com/abhimuralidharan/8db55dff9023028867b719f251372bd7#file-screenrecordingdetector-m






share|improve this answer





















  • Yes, I am using the NSTimer to repeat the check for every 2 seconds
    – Raghav
    Nov 22 at 9:07















up vote
0
down vote













You should check for recording repeatedly.



I used this code and it worked for me.
check it out:



https://gist.github.com/abhimuralidharan/8db55dff9023028867b719f251372bd7#file-screenrecordingdetector-m






share|improve this answer





















  • Yes, I am using the NSTimer to repeat the check for every 2 seconds
    – Raghav
    Nov 22 at 9:07













up vote
0
down vote










up vote
0
down vote









You should check for recording repeatedly.



I used this code and it worked for me.
check it out:



https://gist.github.com/abhimuralidharan/8db55dff9023028867b719f251372bd7#file-screenrecordingdetector-m






share|improve this answer












You should check for recording repeatedly.



I used this code and it worked for me.
check it out:



https://gist.github.com/abhimuralidharan/8db55dff9023028867b719f251372bd7#file-screenrecordingdetector-m







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 22 at 8:59









Sepehr Behroozi

1,2231127




1,2231127












  • Yes, I am using the NSTimer to repeat the check for every 2 seconds
    – Raghav
    Nov 22 at 9:07


















  • Yes, I am using the NSTimer to repeat the check for every 2 seconds
    – Raghav
    Nov 22 at 9:07
















Yes, I am using the NSTimer to repeat the check for every 2 seconds
– Raghav
Nov 22 at 9:07




Yes, I am using the NSTimer to repeat the check for every 2 seconds
– Raghav
Nov 22 at 9:07


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53425563%2fios-screen-recording-detection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

What visual should I use to simply compare current year value vs last year in Power BI desktop

How to ignore python UserWarning in pytest?

Alexandru Averescu