以前のバージョンのアプリケーション (iPhone) では、次のコードでキーチェーンに値 (パスワード) を保持しました。
KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest"
accessGroup:nil];
[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];
[keychain setObject: @ "MySuperSecretPassword" forKey:(id)kSecValueData];
[keychain release];
次のコードで値を取得します。
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest"
accessGroup:nil];
[keychain setObject: kSecAttrAccessibleWhenUnlocked forKey:(id)kSecAttrAccessible];
NSString *key = [keychain objectForKey:(id)kSecValueData];
アプリケーションがバックグラウンドで実行されることがあるため、キーチェーンから値を取得できないバグが見つかりました。
kSecAttrAccessible の値を kSecAttrAccessibleWhenUnlocked から kSecAttrAccessibleAlways に変更してバグを修正しました。
KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest"
accessGroup:nil];
[keychain setObject:kSecAttrAccessibleAlways forKey:kSecAttrAccessible];
[keychain setObject: @"MySuperSecretPassword" forKey: kSecValueData];
[keychain release];
と:
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"KeychainTest"
accessGroup:nil];
[keychain setObject: kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];
NSString *key = [keychain objectForKey:(id)kSecValueData];
私の質問は、この変更が以前のバージョンで値を保存するユーザーにも役立つかどうかです。
私のバグは復元が非常に難しいので、質問します。現在、この変更後にバグを回復できませんでした。
ありがとう