TouchID с KeyChain - экран ввода пароля отображается неправильно (Swift)

У меня проблемы с этим:
Наше приложение использует TouchID для извлечения секретов из цепочки ключей, которые используются для аутентификации в веб-приложении в WKWebView. Все в порядке, когда пользователь успешно проходит аутентификацию с помощью TouchID.

Проблема возникает, когда пользователь не работает с TouchID, а затем нажимает «Ввести код-пароль» для аутентификации с помощью кода-пароля устройства. Я заметил, что отображаемый экран просто белый, а в текстовом поле кода доступа не отображается значение для последнего введенного символа, пока он не будет замаскирован, что создает странный пользовательский интерфейс. Мне это кажется ошибкой, если только я каким-то образом не упустил требования к конфигурации.

    // global arguments for the touchId keychain queries
    let kSecClassValue = NSString(format: kSecClass)
    let kSecAttrAccountValue = NSString(format: kSecAttrAccount)
    let kSecValueDataValue = NSString(format: kSecValueData)
    let kSecClassGenericPasswordValue = NSString(format: kSecClassGenericPassword)
    let kSecAttrServiceValue = NSString(format: kSecAttrService)
    let kSecMatchLimitValue = NSString(format: kSecMatchLimit)
    let kSecReturnDataValue = NSString(format: kSecReturnData)
    let kSecMatchLimitOneValue = NSString(format: kSecMatchLimitOne)
    let kSecAttrAccessControlValue = NSString(format: kSecAttrAccessControl)
    let kSecUseOperationPromptValue = NSString(format: kSecUseOperationPrompt)

    // set access control
    let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault,
        kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, .UserPresence, nil)
    // Instantiate a new default keychain query
    // Tell the query to return a result
    // Limit our results to one item
    var keychainQuery: NSMutableDictionary = NSMutableDictionary(objects: [kSecClassGenericPasswordValue, service, userAccount, kCFBooleanTrue, kSecMatchLimitOneValue, "Place your finger to authenticate.", accessControl.takeUnretainedValue()], forKeys: [kSecClassValue, kSecAttrServiceValue, kSecAttrAccountValue, kSecReturnDataValue, kSecMatchLimitValue, kSecUseOperationPromptValue, kSecAttrAccessControlValue])

    var dataTypeRef :Unmanaged<AnyObject>?

    // Search for the keychain item
    touchIdStatusCode = SecItemCopyMatching(keychainQuery, &dataTypeRef)

Вот сгенерированный словарь keychainQuery:

{
    "accc" = "<SecAccessControlRef: 0x170621140>";
    "acct" = “MY_ACCOUNT”;
    "class" = genp;
    "m_Limit" = "m_LimitOne";
    "r_Data" = 1;
    "svce" = “MY_SERVICE”;
    "u_OpPrompt" = "Place your finger to authenticate.";
}

Такое поведение существует в последней версии iOS (8.4). Вот экран, который я имел в виду: Введите пароль для связки ключей TouchID

Мой вопрос: я каким-то образом вызываю поломку экрана из-за того, как я вызываю TouchID? Или это совершенно нормально для данного сценария?

Спасибо, и извините за длинный пост!


person ProgrammierTier    schedule 22.07.2015    source источник
comment
Привет, мне нужна небольшая помощь в отображении экрана кода доступа при сбое Touch ID, пожалуйста, помогите в этом   -  person Sri..    schedule 05.08.2015
comment
Имеет ли смысл опубликовать свой вопрос? Может быть, другие тоже смогут взвесить.   -  person ProgrammierTier    schedule 06.08.2015
comment
если вы не возражаете, пожалуйста, подтвердите это, это возможно или нет? если возможно, пожалуйста, помогите мне.   -  person Sri..    schedule 08.08.2015
comment
У меня точно такая же проблема на айфоне. На айпаде еще хуже. Клавиатура не видна, но она есть, и вы можете коснуться пробела, и символы появятся в поле пароля. Вы пытались поднять ошибку на радаре?   -  person Maleandr    schedule 13.08.2015
comment
Пока нет, я ждал, пока кто-нибудь еще укажет, что они столкнулись с той же проблемой. Я думаю, что я сделаю это сейчас.   -  person ProgrammierTier    schedule 13.08.2015
comment
Зарегистрировано: rdar://22310753   -  person ProgrammierTier    schedule 17.08.2015
comment
Сегодня я получил подтверждение, что это ошибка. Apple заявила, что отчет об ошибке, который я подал, является дубликатом. Я предполагаю, что это означает, что это будет исправлено в какой-то момент. Я еще не тестировал это в iOS 9, но сделаю это в ближайшее время.   -  person ProgrammierTier    schedule 16.09.2015


Ответы (1)


Описанная проблема является ошибкой, подтвержденной инженерами Apple. Он все еще существует с iOS 9.0.2.

person ProgrammierTier    schedule 02.10.2015