iOS 화면캡쳐방지 기능 추가하기 (iOS13 이상)

less than 1 minute read

아이폰 화면 캡처 방지 코드 추가하기.


개요

오랜만에 본업으로 돌아와서 코드 관련 포스팅을 해보려고합니다.ㅎㅎ
요즘 너무 놀았네요..

최근 개발 건중에 iOS 캡처 방지 코드를 넣어야 했는데 관련해서 정리해 보려고 합니다.


iOS에서 화면 캡처

iOS는 근본적으로 화면 캡처를 사전에 방어하지 못합니다.

녹화에 대해서 엄격하게 하고 있어서인지
캡처 동작을 하기 전에 알려주거나 방어하도록 하는 게 아니라,
캡처 동작 이후에 아래 2개의 Notification을 제공하고 있습니다.

  1. userDidTakeScreenshotNotification - 캡쳐 감지
  2. capturedDidChangeNotification - 녹화 감지

오늘은 편법(?)을 활용한 화면 캡처 방지에 대해서 얘기해 보려고 합니다.

isSecureTextEntry

UITextField에는 isSecureTextEntry라는 속성이 있습니다.

이 값이 iOS13부터 캡처를 방지해 주고 있습니다.

해당 속성이 정의가 되면 화면 녹화나 캡처가 되지 않도록 방지를 해주는 코드인데

역시 외국 형님들이 또 방법을 찾아냈더라구요👍

이 속성이 추가되었을 때 UITextField의 Layer를 가지고 와서
현재 UIWindow나 UIView에 추가해 주는 게 오늘의 핵심입니다.

UILifecycle에 따라 ApplDelegate에서 관리하면
func application(:didFinishLaunchingWithOptions) 에서

SceneDelegate가 관리하면
optional func scene(:willConnectTo:options:) 에서
해당 코드를 실행시켜주면 됩니다.

코드 적용 전 후 비교

캡처 방지 코드가 들어갔을 때
캡처 시 검은 화면으로 보이는 것을 확인할 수 있었습니다.

이렇게 오늘 포스팅을 마치도록 하겠습니다~

참고

https://developer.apple.com/forums/thread/736112
https://stackoverflow.com/questions/18680028/prevent-screen-capture-in-an-ios-app

Leave a comment