Search

[실험실] TouchID, FaceID 사용 후기

안이 .. 정말 뭔가 될 거 같은데 . . 안되고 . . 네 .. 조금 킹 ..스 ..킹스 ..받네 .. 선배들

FaceID, TouchID

네, 이 친구들을 구현해봤습니다.
내 얼굴과 지문을 가져가는게 고작 몇 줄 짜리 코드라니 . . 너무 행복했습니다.
하지만 쉽지 않더라구요?
저도 일단은 Info.plistBuild Phases에 생체 인증 기능을 쓸 수 있는 부분들을 넣어줬구요.
열심히 코드를 짜내려갔습니다.
import LocalAuthentication class MainVC: UIViewController, View { // MARK: - Properties private let authContext = LAContext() /// 생체 인증을 받는 코드 func takeAuthContext() { if authContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) { authContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "남남남대문을 열어라") {(success, error) in if !success { DispatchQueue.main.asyncAfter(deadline: .now()) { UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { exit(0) } } } else { if self.useWidget { DispatchQueue.main.asyncAfter(deadline: .now()) { Observable.just("") .map { _ in Reactor.Action.shake(vc: self) } .bind(to: self.reactor.action) .disposed(by: self.bag) } } } } } }
Swift
복사
저는 상태가 Success가 아니라면 앱이 그냥 꺼지도록 했습니다.
DispatchQueue.main.asyncAfter(deadline: .now()) { UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { exit(0) } }
Swift
복사
제가 설명하는 것보다는 제드님께 맡기겠습니다.
그냥 exit(0)를 하면 리젝사유가 될 수 있다고 하네요 .. 그래서 예쁘게 죽는 법을 찾아봤습니다

AppDelegate

저번부터 위젯을 키고나면 앱에서 자꾸 QRCode 화면부터 나오는게 조금 짜증나더라구요?
그래서 Background로 넘어가면 저걸 root뷰로 변경해버리자 싶었습니다.
그래서 rootVC로 넘어가버리는 코드를 짰습니다.
func applicationDidEnterBackground(_ application: UIApplication) { if let currentVC = UIApplication.topViewController() as? QRCodeVC { currentVC.dismiss(animated: false, completion: nil) } }
Swift
복사
AppDelegate에서 써주면 되는 코드고, 코드 그대로 현재 뷰가 QRCodeVC면 현재 뷰를 dismiss하도록 해줬습니다. 그러면 background로 넘어갔을시에 저 뷰를 꺼줍니다.
요것말고도
Foreground로 돌아오면 실행시켜주는
func applicationWillEnterForeground(_ application: UIApplication) { // code }
Swift
복사
요런 친구도 있습니다.
다양한 State를 가지고 있으니 한 번 찾아보는 것도 좋을 것 같네요.
당연히 AppDelegate말고 SceneDelegate에서도 저런 코드를 쓸 수 있습니다.
차이점이 있다면
생명주기가 조금 다릅니다. 오른쪽이 AppDelegate, 왼쪽이 SceneDelegate입니다.
기본적인 개념은 비슷해요!
이제 . . RxSwift를 좀 더 공부해서 . . 좀 어떻게 잘 해볼게요 .. 아직도 QRCode 사진 바꾸기를 구현 못했네요 . . 화이팅!