Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리펙터링
- RxCocoa
- map
- 애니메이션
- swiftUI
- HIG
- swift documentation
- UICollectionView
- uitableview
- Human interface guide
- UITextView
- rxswift
- Xcode
- Protocol
- SWIFT
- 스위프트
- combine
- 클린 코드
- collectionview
- 리팩토링
- ios
- Observable
- clean architecture
- MVVM
- tableView
- ribs
- Refactoring
- 리펙토링
- Clean Code
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - Swift] 2. Prevent Capture, Recording - 캡쳐 감지 방법, 녹화 감지 방법 (userDidTakeScreenshotNotification, capturedDidChangeNotification) 본문
iOS 응용 (swift)
[iOS - Swift] 2. Prevent Capture, Recording - 캡쳐 감지 방법, 녹화 감지 방법 (userDidTakeScreenshotNotification, capturedDidChangeNotification)
jake-kim 2022. 10. 14. 23:201. Prevent Capture, Recording - 캡쳐 막는 방법, 화면 녹화 방지 (isSecureTextEntry)
2. Prevent Capture, Recording - 캡쳐 감지 방법, 녹화 감지 방법
캡쳐와 녹화 감지 방법
* 예제 편의상 SceneDelegate 제거하고 AppDelegate만 사용
SceneDelegate 삭제 방법 포스팅 글 참고
- 감지는 NotificationCenter.default.addObserver()로 가능
- 캡쳐 감지 - UIApplication.userDidTakeScreenshotNotification
- 녹화 감지 - UIScreen.capturedDidChangeNotification
- AppDelegate에 해당 코드 사용하여 캡쳐 감지되었을때 alert띄우는 기능 구현
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
NotificationCenter.default.addObserver(
self,
selector: #selector(alertCapture),
name: UIApplication.userDidTakeScreenshotNotification,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(alertRecoding),
name: UIScreen.capturedDidChangeNotification,
object: nil
)
return true
}
@objc private func alertCapture() {
alert("캡쳐가 감지되었습니다.")
}
@objc private func alertRecoding() {
alert("녹화가 감지되었습니다.")
// window?.isHidden = UIScreen.main.isCaptured // window를 가리는 방법
}
private func alert(_ title: String) {
// TODO
}
}
- alert 메소드 구현
private func alert(_ title: String) {
let alert = UIAlertController(title: title, message: "", preferredStyle: .alert)
let confirm = UIAlertAction(title: "확인", style: .cancel, handler: nil)
alert.addAction(confirm)
if var topController = self.window?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
DispatchQueue.main.async {
topController.present(alert, animated: false, completion: nil)
}
}
}
- 위처럼 구현하면, recording이 끝날때도 alert가 보여지므로 녹화가 끝났으면 alert를 안띄우는 조건이 필요
- UIScree.main.isCaptured를 이용 (true일때만 alert띄우도록 구현)
- true이면 녹화가 진행중
- false이면 녹화가 끝난것
- alertRecoding() 메소드에 guard문을 추가
@objc private func alertRecoding() {
guard UIScreen.main.isCaptured else { return }
alert("녹화가 감지되었습니다.")
// window?.isHidden = UIScreen.main.isCaptured
}
완성)
- Capture하는 경우, Recoding하는 경우 모두 alert 표출
- 주의 -
* 전체 코드: https://github.com/JK0369/ExPreventCapture
* 참고
https://developer.apple.com/documentation/uikit/uiscreen/2921652-captureddidchangenotification
https://developer.apple.com/documentation/uikit/uitextinputtraits/1624427-issecuretextentry
https://stackoverflow.com/questions/18680028/prevent-screen-capture-in-an-ios-app
'iOS 응용 (swift)' 카테고리의 다른 글
Comments