iOS/Swift

[Swift] 화면 캡쳐 감지 및 방지하기

min_ee 2023. 5. 7. 16:13

회사에서
"iOS는 캡쳐 방지 어떻게 해요?"

라는 질문을 들었다.

 

애플에서 캡쳐 방지는 지원 안할거에여.. 찾아볼게여..

 

화면 캡쳐 감지

다른 앱들은 어떻게 하고 있을까?

네이버 웹툰 - 네이버 시리즈 - 다음 웹툰 - 카카오 페이지

네이버는 캡쳐 시 저작권에 대한 경고 팝업을

다음카카오는 경고 팝업을 보여주며 내용 또한 보여주지 않는다.

 

라이브러리가 뭐 있나..?

하면서 오픈소스 저작권을 찾아봤지만 딱히 보이지 않았다.

 

흠 일단 경고 팝업부터 띄워보자.

 

 

일단 감지를 해야하니 NotificationCenter에 뭐가 있지 않을까?

 

UIApplication.userDidTakeScreenshotNotification

애플에서 제공하는 함수이다.

This notification posts after the screenshot is taken.

스크린샷이 찍히고 난 후에 알려주는구나..!

 

오 그럼 이걸로 캡쳐 감지를 하는구나

 

 

 

결과 화면

UIApplication.userDidTakeScreenshotNotification 의 결과물

오 잘된다!

 

참고로 이거 테스트 하실 때 실기기에서 하세여..

시뮬에서 안되서 한 삼십분 삽질함🥲

 

구글링 하는데 영상 캡쳐도 있네?

 

캡쳐만 하는 사람이라 영상 녹화는 생각도 못해봤다.

 

영상 녹화 감지

다른 앱들은 어떻게 하고 있을까?

내 취향의 작품들은 소중하기에,,

말로 대신하자면

네이버는 경고 화면을 띄워 화면을 가리고

다음 카카오는 경고 팝업+화면 가리기 이후 뒤로 가기를 해버린다.

 

오호 이건 좀 할 수 있을 것 같아

 

UIScreen.capturedDidChangeNotification

화면 녹화뿐 아니라 미러링, 에어플레이도 감지를 하는군..

 

 

preventView는 내가 임의로 만든거다..

결과물을 녹화할랬는데 폰이 한개네?

 

그냥 다들 실습해보는걸로

잘됨.

 

근데 화면 녹화 해제하면 팝업 없애고 싶은데 어떻게 하는거지?

 

isCaptured

isCaptured를 사용하면 현재 녹화 유무를 체크할 수 있다.

 

그런데?

????

할수록 뭐가 나오네..

FPS를 쓰면 비디오 콘텐츠를 암호화해준다고 한다.

아마 넷플릭스 같은 곳에서 쓰는듯!

FairPlay Streaming에 대해 알아보려면 해당 애플 페이지로 >

 

그래서 넷플릭스는 캡쳐나 영상녹화하면 까만화면이 나오는거였구나..

 

 

화면 캡쳐 방지?

그래서 일단 캡쳐 감지랑 녹화 방지는 했는데..

화면 자체가 안보이게는 어떻게 하는거야??

화면 캡쳐 열심히 해봤는데 중간에 뭐가 생기는 느낌이다?

 

그리고 구글링하던 중

textField.isSecureTextEntry = true

라는걸 봤고

생각해보니 우리가 로그인 화면을 캡쳐하면 비밀번호 칸은 비어있잖아..?

 

텍스트가 비는줄 알았는데 그냥 그 화면 자체를 백그라운드 색상으로 덮어버리는거구나..

 

코드 도움을 주신 지인님 감사😀

 

원래 있던 내 라벨들이 보이지 않는다!

캡쳐가 완료되면 제일 처음 만들었던 팝업이 뜬다!

녹화 시도에도 내가 보고 있는 화면에는 preventView가 뜨지만

실제 앨범에는 위 이미지 처럼 까만 화면이 뜬다!

 

텍스트필드는 텍스트 입력할 때만 쓰는건 줄 알았는데

이렇게도 쓸 수 있다니 고정 관념을 버려야겠다는 생각이 새삼 든다!