4

Touch ID を使用してキーチェーンからシークレットを読み取るアプリケーションに取り組んでいます。

前回の読み取りの直後にキーチェーンから読み取ると、PIN コードを使用して最初にシークレットを読み取ると、2 回目の読み取りで文字列値が返されないことがわかりました。ユーザーが最初に指紋を使用すると、Touch ID ダイアログが 2 回目に表示され、別の読み取りが成功します。

アプリケーションの例を次に示します: https://github.com/cnandreu/KeychainTouchIdError

以下は、KeychainTouchIdError デモ アプリケーションを使用するいくつかのシナリオです。これらは、タッチ ID センサーを備えた iOS 8 を実行している実際のデバイスで実行する必要があります。Touch ID ダイアログが表示されないため、シミュレーターを使用すると、すべてのシナリオが期待どおりに機能します。

シナリオ 1 (作業中)

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly で保護されたキーチェーンに値を格納します。
  • キーチェーンから読み取り、指紋を使用してロックを解除します。
  • 遅延なし。
  • キーチェーンから読み取り、指紋または PIN を使用してロックを解除します。

シナリオ 2 (デバイスで破損):

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly で保護されたキーチェーンに値を格納します。
  • キーチェーンから読み取り、PIN を使用してロックを解除します。
  • 遅延なし。
  • キーチェーンから読み取ります。デバイスを使用している場合、タッチ ID ダイアログは表示されず、キーチェーンから null 文字列が返されます。ただし、シミュレーターを使用すると、キーチェーンに格納されている値が正しく取得されます。

シナリオ 3 (動作中):

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly で保護されたキーチェーンに値を格納します。
  • キーチェーンから読み取り、PIN を使用してロックを解除します。
  • 500ミリ秒待ちます。
  • キーチェーンから読み取ります。ユーザーにはダイアログが表示され、指紋または PIN を使用した後にシークレットを再度読み取ることができます。

デモ アプリケーションで使用できるボタン

保存 - kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly によって保護されたキーチェーンにシークレットを書き込みます。

読み取り - キーチェーンからシークレットを読み取ります。

削除 - キーチェーンからシークレットを削除します。

クイック - シナリオ 1 および 2 を実行するために使用されます。

Quick with Delay - シナリオ 3 を実行するために使用します。

コメント

私たちの推測では、下にスワイプして約 250 ミリ秒続く PIN のロック解除のアニメーションが、2 回目の読み取りに干渉している可能性があります。指紋でロック解除するときのアニメーションはありません。これは単なる推測ですが。

シナリオ 2 で問題が発生した理由について何か考えはありますか? キーチェーンが再び「読み取り可能」になるのを待つために必要なことはありますか?

4

0 に答える 0