今回はタッチIDの認証を使ってログインするようなアプリを作る場合の実装について書いていきます。
「ログイン画面右矢印タッチID認証右矢印次の画面」
のように画面遷移をする場合です。

ダウン

ダウン



注意点としては、タッチIDによる認証はサブスレッドで実行されるため、そのメソッドの中で画面遷移のような描画処理を実装してしまうと画面の表示更新が遅くなりちゃんと描画されない状態になってしまいます。
なので、performSegueWithIdentifierなどで画面遷移をする場合はメインスレッドへディスパッチしてから呼び出してください。



以下が、タッチIDボタンを押下して認証して画面遷移するメソッドの実装です。

// TouchIDによるログインボタン
@IBAction func loginTouchID(sender: AnyObject) {
    let context = LAContext()
    var message = ""
    var error :NSError?
    let localizedReason = "Authentication of login."

    // TouchID認証はサブスレッドで実行される
    if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &error){

        //TocuhIDに対応している場合
        context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: localizedReason, reply: {
                success, error in

                if success {
                    // 画面遷移はmainスレッドで実行する
                    self.dispatch_async_main {
                        self.incorrectPwTimes = 0
                        self.performSegueWithIdentifier("listViewSegue", sender: nil)
                    }
                } else {
                    switch error!.code {
                    case LAError.AuthenticationFailed.rawValue:
                        message = "Authentication failure."
                    case LAError.UserCancel.rawValue:
                        message = "Authentication has been canceled."
                    case LAError.UserFallback.rawValue:
                        message = "Select the password input."
                    case LAError.PasscodeNotSet.rawValue:
                        message = "Passcode is not set."
                    case LAError.SystemCancel.rawValue:
                        message = "It has been canceled by the system."
                    default:
                        message = "Unknown error."
                        return
                    }

                    self.dispatch_async_main {
                        self.navigateLabel.text = message
                    }
                }
        })

    }else{
        //TocuhIDに対応していない場合
        navigateLabel.text = "It does not correspond to TouchID."
    }
}

// mainスレッドへのディスパッチ
func dispatch_async_main(block: () -> ()) {
    dispatch_async(dispatch_get_main_queue(), block)
}



最近リリースしたアプリ「パスワードメモ」で実装しているので、ぜひ使ってみてください!
レビューも待ってますっ。