[iOS] iOS 캡쳐 방지 기술
iOS

[iOS] iOS 캡쳐 방지 기술

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