Я пытаюсь реализовать пароль автозаполнения Apple. Я наконец заработал, но я хочу, чтобы мое приложение запоминало имя пользователя / пароль при запуске приложения, если учетные данные действительно были созданы. В настоящее время я храню имя пользователя и пароль с помощью модуля «KeychainSwift», но я понял, что автозаполнение в любом случае создает новую цепочку для ключей (они теперь появляются в моих сохраненных паролях iPhone), поэтому я мог бы также использовать эти учетные данные напрямую.
Я попытался получить это с этим, но говорит "не найдено подходящих элементов":
SecRequestSharedWebCredential(nil, nil){ credentials, error in
guard let credentials = credentials else { print("Keychain: No credentials found"); return }
guard error == nil else { print("Keychain Error:", error?.localizedDescription ?? "no error description"); return }
let credential: CFDictionary = unsafeBitCast(CFArrayGetValueAtIndex(credentials, i), to: CFDictionary.self)
let server = unsafeBitCast(CFDictionaryGetValue(credential, unsafeBitCast(kSecAttrServer, to: UnsafeRawPointer<Void>.self)), to: CFString.self)
let account = unsafeBitCast(CFDictionaryGetValue(credential, unsafeBitCast(kSecAttrAccount, to: UnsafeRawPointer<Void>.self)), to: CFString.self)
let password = unsafeBitCast(CFDictionaryGetValue(credential, unsafeBitCast(kSecSharedPassword, to: UnsafeRawPointer<Void>.self)), to: CFString.self)
print("Keychain OK:", server, account, password)
}
Запрос прекращается во втором операторе защиты, потому что «ошибка» не ноль. Я что-то пропустил? Это вообще возможно?
Редактировать # 1 :
Я читал обо всем этом, и у меня возникает ощущение, что мне нужно отдельно сохранять / загружать комбинацию имя пользователя / пароль (через Keychain или UserDefaults) всякий раз, когда пользователь регистрируется или входит в систему. Кто-нибудь может подтвердить, что это ожидаемое поведение? Мне это просто кажется странным, поскольку Autofill уже где-то хранит эти учетные данные (я предположил, что это связка ключей), поскольку FaceID выскакивает и автоматически заполняет текстовые поля с правильным именем пользователя / паролем, которое я указал при регистрации.
Редактировать # 2 :
Это то, чего я хотел бы достичь в идеале : опция автозаполнения в быстром типе клавиатуры, и когда пользователь регистрируется / добавляет его, чтобы добавить его к сохраненным паролям, которые отображаются в меню «Настройки»> «Пароли и учетная запись»> «Веб-сайт». & Пароли приложений ". Может быть, я не понимаю фактический процесс автозаполнения или разницу между цепочкой ключей iCloud и общими учетными данными веб-сайта, но я не могу понять, как добиться того, что мне нужно.
Вместо этого происходит очень много неожиданных вещей (ошибок?) : при нажатии автозаполнения автоматически создаются новые учетные данные, но я не могу получить их с помощью кода, который я разместил выше, но если я добавлю его вручную с помощью SecAddSharedWebCredential()
Затем я могу получить их. Зачем? Они буквально оба отображаются в моих сохраненных паролях в одном домене с одинаковым значком приложения. Кроме того, когда Signin ViewController закрывается (при выполнении Segue), мне предлагается сохранить пароль, но в тот момент, когда я пытаюсь зарегистрироваться с именем пользователя + настоятельно рекомендованный пароль, затем нажимаю кнопку «Назад» (которая отклоняет ViewController), он все равно добавляет его в Сохраненные пароли, на этот раз даже без запроса Сохранить пароль!
Я так смущен всем этим, лол. Пожалуйста, мне нужна помощь:)