我有一个奇怪的问题,SecItemAdd()似乎在iOS 8和9之间有所不同。对于iOS 8,将某些内容保存到安全区域将提示Touch ID身份验证(除非我已将kSecUseNoAuthenticationUI指定为@YES)。这就是我所期待的。但是,在iOS 9上,我似乎从来没有在SecItemAdd上获得Touch ID身份验证。
我意识到在8到9之间对属性进行了更改,现在不推荐使用kSecUseNoAuthenticationUI来支持kSecUseAuthenticationUI,但无论是否省略kSecUseAuthenticationUI,还是使用@YES指定它,我都不会收到提示。
应该 SecItemAdd()做什么?
以下是我正在尝试的代码片段:
CFErrorRef error = NULL;
SecAccessControlRef sacObject;
sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence, &error);
NSDictionary *attributes =
@{
(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService: @"Zenbanx",
(__bridge id)kSecAttrAccount: tokenKey,
(__bridge id)kSecValueData: [tokenValue dataUsingEncoding:NSUTF8StringEncoding],
/
(__bridge id)kSecUseNoAuthenticationUI: @NO,
(__bridge id)kSecUseAuthenticationUI: @YES,
(__bridge id)kSecAttrAccessControl: (__bridge_transfer id)sacObject
};
OSStatus status = SecItemAdd((__bridge CFDictionaryRef) attributes, nil);
我的目标是让代码在iOS 8和9之间呈现相同的用户交互。
提前谢谢。
答案 0 :(得分:0)
kSecUseAuthenticationUI只接受kSecUseAuthenticationUIAllow,kSecUseAuthenticationUIFail和kSecUseAuthenticationUISkip。在您的情况下,您应该使用kSecUseAuthenticationUIAllow。