7

キーチェーンにアクセス トークンを保存する iOS アプリがあります。ここ数か月で、約 2% のユーザーがトークンを取得しようとしたときにerrSecItemNotFoundを受け取ることに気付きました。

関連するすべての StackOverflow スレッドは、バックグラウンド タスクが原因である ( iOS キーチェーンがバックグラウンドから値を取得しない) か、クエリ文字列に無効なパラメーターが含まれている (キーチェーン: アイテムは errSecItemNotFound として報告されたが、追加で errSecDuplicateItem を受け取る) ことを示しています。

私はkSecAttrAccessibleAfterFirstUnlockを使用しているので、バックグラウンド タスクはキーチェーンに問題なくアクセスできるはずです。

さらに、検索クエリは次のようになります。

NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
[query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[query setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
[query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
[query setObject:service forKey:(__bridge id)kSecAttrService];
[query setObject:key forKey:(__bridge id)kSecAttrGeneric];
[query setObject:key forKey:(__bridge id)kSecAttrAccount];

( kSecAttrGeneric の設定はおそらく冗長ですが、とにかくクエリの結果には影響しません)

記録として、 SSKeyChainUICKeychainStoreの両方でこのバグを経験しました。

どんなヒントでも大歓迎です:]

4

1 に答える 1