Я видел в некоторых приложениях touchId, где на SecItemUpdate
экран touchId UI никогда не появляется и обновление все еще происходит. Мне нужна аналогичная функциональность для моего приложения и на основе того, что я прочитал из руководства Apple Developer (мое понимание может быть неправильное), придумали некоторые варианты, но они, похоже, не работают. Вот что я сделал до сих пор.
kSecUseNoAuthenticationUI
- YES
, код ошибки -25308
. Значение kSecUseNoAuthenticationUI
- NO
, код ошибки -50
. Если я не включаю kSecUseNoAuthenticationUI
, тогда появляется пользовательский интерфейс аутентификации по умолчанию.Скрытие всплывающего окна TouchId на SecItemUpdate
NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
(__bridge id)kSecAttrService: @"SampleService",
(__bridge id)kSecUseNoAuthenticationUI: @YES
};
NSDictionary *changes = @{
(__bridge id)kSecValueData: [@"UPDATED_SECRET_PASSWORD_TEXT" dataUsingEncoding:NSUTF8StringEncoding]
};
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
OSStatus status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)changes);
NSString *msg = [NSString stringWithFormat:NSLocalizedString(@"SEC_ITEM_UPDATE_STATUS", nil), [self keychainErrorToString:status]];
[super printResult:self.textView message:msg];
});]
Так что я потерялся на этом этапе. Оцените, можете ли вы дать мне несколько указателей на то, как отключить это всплывающее окно touchId UI на SecItemUpdate. Спасибо
Вы могли выполнить обновление без подсказки TouchID? – SuPotter
Я смог выполнить обновление без подсказки. Я изменил свой secItemAdd на этот '(__bridge id) kSecUseNoAuthenticationUI: @NO, (__bridge id) kSecAttrAccessible: (__ bridge id) kSecAttrAccessibleWhenUnlocked', и это, похоже, исправило его и при обновлении. Первоначально он был установлен в 'kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly ', который вызвал всплывающее приглашение во время обновления. – user1657861