3

以前のバージョンのアプリケーション (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];

私の質問は、この変更が以前のバージョンで値を保存するユーザーにも役立つかどうかです。

私のバグは復元が非常に難しいので、質問します。現在、この変更後にバグを回復できませんでした。

ありがとう

4

0 に答える 0