2012-06-15 21 views
5

キーチェーンに2つのパスワード(1つのアプリケーションピンと1つのバックエンドピン)を保存して、これがどのように機能するのだろうかと思っています。
KeychainItemWrapperを異なる識別子に使用しています。iOSでキーチェーンに複数のパスワードを保存する

KeychainItemWrapper *kcw1 = [[KeychainItemWrapper alloc] initWithIdentifier:id1 accessGroup:nil]; 
KeychainItemWrapper *kcw2 = [[KeychainItemWrapper alloc] initWithIdentifier:id2 accessGroup:nil]; 

と私はどちらかを使用して、アプリまたはバックエンドピンを保存して検索します。

私が使用

[self.kcw1 setObject:aVerifyCode forKey:(__bridge id) kSecValueData] 
[self.kcw2 setObject:aAppPin forKey:(__bridge id) kSecValueData] 

しかし、それは動作しません - 結果は-25299です - 指定されたアイテムはすでに、どのように私は私のキーチェーンに複数のパスワードを保存することができますキーチェーン

に存在しますか?

+0

'[[KeychainItemWrapper alloc] id1 accessGroup:nil];' <==これはどのようにコンパイルされますか? –

+0

申し訳ありませんが、コピー&ペーストではなく、私の心の中で投稿しました!私は編集をしました... – Alexander

答えて

8

私は問題が何であるか知っていると思います! KeychainItemWrapperは、kSecAttrGenericの識別子を使用します。
これはエントリを区別するためのものではありません。あなたは

kSecValueDataに2つのアカウントまたは2つのパスワードを保存したい場合は

これは、重複のentiresためarror(-25299)になります。
理由は、リンゴのキーチェーンAPIはエントリを区別するためにkSecAttrAccount

kSecAttrService

を使用していること、です。
このようにしたい場合は、keychainItemWraperを変更できます。thread

+1

私はKeychainItemWrapperにこのような様々な小さな穴があることを発見しました。それを使用して複数のプロジェクトを変更した後、私はキーチェーンhttps://github.com/reidmain/FDKeychainにアクセスするより簡単なラッパーを作成しました –

関連する問題