728x90
적용 코드
- UITextField의 isSecureTextEntry 속성 활용
- UIWindow(최상단 뷰)에서 캡쳐 방지 로직 추가
- SplashViewController에 해당 코드 삽입
// SplashViewController.swift override func viewDidLoad() { super.viewDidLoad() // 캡쳐 방지 로직 추가 let curWindow: UIWindow = SysUtils.getCurrentWindow() curWindow.makeSecure() }
// 캡쳐 방지 로직 extension UIView { func makeSecure() { DispatchQueue.main.async { let field = UITextField() field.isSecureTextEntry = true self.addSubview(field) field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true self.layer.superlayer?.addSublayer(field.layer) field.layer.sublayers?.first?.addSublayer(self.layer) } } }
적용 결과
- 모든 화면에서 스크린 캡쳐/동영상 녹화 시, 갤러리에 검정색 화면으로 저장됨
- 테스트 기기: iphone 13 pro max, os 16.0.3
- 스크린 캡쳐 결과
이슈 사항
- stackoverflow에 따르면 OS 13이상부터 가능하다고 써있음
- 실제로 테스트 후, 버전 업 필요
- 캡쳐 방지 뷰 커스텀으로 제작 가능성?
- UIWindow 전체를 UITextField로 감싸는 형태여서 캡쳐시 커스텀으로 뷰를 제작할 수 있을지 의문
- UIView로 secureView를 따로 제작해도 가능하지만, 이렇게 할 경우 만들어진 secureView에 가리고 싶은 모든 self.view들을 다 넣어줘야 해서 공수가 많이 들것임
- OS 버전 업 되면서 UITextField layer가 조금이라도 변경된다면, 다른 이슈 발생 가능
- xcode 시뮬레이터에서는 테스트 불가능
- textfield 속성 자체가 시뮬에서는 테스트 불가능
참고 자료
https://stackoverflow.com/questions/18680028/prevent-screen-capture-in-an-ios-app
728x90
'iOS' 카테고리의 다른 글
[iOS] Static Widget 만들기 (2) | 2024.03.04 |
---|---|
[iOS] STT 구현하기(feat. Speech 프레임워크) (2) | 2024.03.03 |
[iOS] 클로저에서 [weak self] 알아보기 (0) | 2022.07.27 |
[iOS] APN, FCM 정리 (0) | 2022.07.25 |
[iOS] UIStackView 정리 (0) | 2022.07.12 |