キーチェーンに値を保存しようとすると、エラー コード errSecInteractionNotAllowed (-25308) で失敗します。Touch ID とキーチェーンをいじっていたので、知らなかったアクセス許可を変更した可能性がありますが、この問題を引き起こす可能性のある変更内容がわかりません。
キーチェーンをいじる前にキーチェーンに値を正常に保存できたので、デバイスのどこかに設定されている可能性があります。それが設定である場合、キーチェーンにデータを再度保存するために何を変更する必要があるかを見つける手助けが欲しい. また、試す前にキーチェーンに保存するためのアクセス権があることを確認するための提案をいくつかお願いします.
static NSString *serviceName = @"myServiceName";
- (void) createTouchIdKeyChain:(NSString *)identifier password:(NSString*)password{
CFErrorRef error = nil;
SecAccessControlRef sacObject =
SecAccessControlCreateWithFlags( kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence, &error);
NSData* secret = [password dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* attributes = @{
(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService: serviceName,
(__bridge id)kSecAttrAccount: identifier,
(__bridge id)kSecValueData: secret,
(__bridge id)kSecAttrAccessControl: (__bridge id)sacObject,
(__bridge id)kSecUseOperationPrompt: @"create password test"
};
OSStatus status = SecItemAdd((__bridge CFDictionaryRef) attributes, nil);
ODLog(@"done");
}