iOS & SwiftUI

SwiftUI에서 Face ID / Touch ID 인증 구현하기

Prof.SSong 2025. 6. 15. 19:26
728x90
반응형

프로젝트 맥락

 

본 글은 Apple Developer Academy_Challenge 2에서 개발 중인 ‘Re:ToU(오늘의 너)’ 앱을 기반으로 작성되었습니다.

Re:ToU는 개인적인 감정을 기록하는 민감한 앱이기 때문에, 앱 실행 시 타인의 접근을 방지할 수단이 필요했습니다.

이런 보안 요구에 따라 우리는 iOS가 기본 제공하는 Face ID / Touch ID 생체인증 시스템을 적용해 앱을 보호하고자 했습니다.

 


 

기능 설명

 

  • 사용자가 앱을 실행했을 때, 얼굴 인식(Face ID) 또는 지문 인식(Touch ID)으로 본인 여부를 확인
  • 인증에 성공하면 메인 뷰로 진입
  • 인증에 실패하거나 취소하면 앱을 잠금 상태로 유지
  • 설정 여부에 따라 인증 건너뛰기 허용도 가능

 


 

 

시도 동기

 

개인적인 회고 내용은 외부 노출되면 불편함을 줄 수 있기 때문에,

단순한 앱 잠금 화면 정도가 아닌 iOS 레벨의 강력한 인증 수단을 원했습니다.

 

Face ID는 이미 시스템 내에 탑재되어 있고 UX도 익숙하기 때문에,

자체 구현 없이 신뢰도 높은 인증을 쉽게 구현할 수 있다는 점이 큰 장점이었습니다.

 


 

 

구현 코드

 

 

1. LocalAuthentication 사용

import LocalAuthentication

func authenticateUser(completion: @escaping (Bool) -> Void) {
    let context = LAContext()
    var error: NSError?

    // Face ID or Touch ID 가능 여부 확인
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
        let reason = "앱 잠금을 해제하려면 Face ID 또는 Touch ID를 사용하세요."

        context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason) { success, _ in
            DispatchQueue.main.async {
                completion(success)
            }
        }
    } else {
        // Face ID 불가능한 경우에도 대비
        DispatchQueue.main.async {
            completion(false)
        }
    }
}

 


2. SwiftUI에서 인증 흐름 적용 예시

@State private var isAuthenticated = false

var body: some View {
    Group {
        if isAuthenticated {
            MainView()
        } else {
            Text("인증 중...")
                .onAppear {
                    authenticateUser { success in
                        isAuthenticated = success
                    }
                }
        }
    }
}

 


 

 

문제 발견 & 해결

문제해결 방법

Face ID가 등록되어 있지 않은 경우 앱 접근 불가 .canEvaluatePolicy로 사전 확인
인증 취소 시 앱이 멈춘 듯 보임 실패/취소 분기를 명확하게 처리하여 fallback UX 제공
시뮬레이터에서는 Face ID 작동 안 함 조건 분기와 대체 수단 필요 (예: 패스코드 인증, 임시 스킵)

 


느낀 점

 

Face ID는 iOS에서 기본 제공하는 기능이기 때문에

복잡한 설정 없이도 강력한 보안 기능을 추가할 수 있는 훌륭한 선택지였습니다.

 

특히 회고 앱처럼 프라이버시가 중요한 서비스에 있어선

앱을 켜자마자 자동으로 인증하는 흐름만으로도 사용자에게 심리적 안정감을 줄 수 있었습니다.

Re:ToU의 민감한 사용자 데이터를 보다 안전하게 보호할 수 있도록 구성할 수 있었습니다.

이번 주제는 글이 조금 짧습니다. 확실한 공부를 하고 구현했다기 보다 공식 문서나 블로그의 구현을 따라했기에 조금 부족하네요..

이 부분은 앞으로도 조금 더 공부를하고 다시 작성하겠습니다.

728x90
반응형