Ответ 1
Это была действительно ошибка iOS => исправлена в iOS 12.1
У меня очень простая страница входа (логин + пароль).
Мои пользователи французские, поэтому их клавиатура французская (azerty).
Начиная с iOS 12, когда они нажимают на текстовое поле пароля, которое защищено, клавиатура переключается на английский (qwerty), даже если у них нет этой клавиатуры, установленной на их устройствах. Более того, если у них не установлена эта клавиатура, они не могут вернуться на свою клавиатуру.
Я узнал, что если я деактивирую Secure Text Entry, проблема не появится.
Я также попытался установить isSecureTextEntry программно, и появляется ошибка.
Я добавляю два скриншота, по одному для каждого текстового поля.
Большое вам спасибо за ваше время и помощь.
Это была действительно ошибка iOS => исправлена в iOS 12.1
У меня та же проблема, в моем случае эта ошибка появляется только с экрана регистрации.
Причина в том, что Apple проверяет имя класса /func/параметра, чтобы определить (с помощью эвристики), является ли это экраном входа/регистрации и автоматически активировать пароль автозаполнения. Заменив "регистрация" на "Патат" в моем коде, проблема решена.
Я воспроизвожу эту проблему с примером приложения с 2 текстовыми полями (с вводом текста безопасности) и контроллером представления с именем "RegisterViewController". С "PatateViewController" у меня нет проблемы.
Кроме того, у меня в консоли возникает эта ошибка: [Автозаполнение] Не удается отобразить автоматические надежные пароли для идентификатора пакета приложения: *** из-за ошибки: брелок iCloud отключен
Источник: https://developer.apple.com/documentation/security/password_autofill
Надеюсь, вы найдете лучший способ, чем переименовать код.
У меня была такая же проблема, недавно появившаяся в нашем приложении. Проблема связана с новой функцией PasswordAutofill от Apple.
Чтобы обойти эту проблему, вы можете применить этот маленький кусочек кода в безопасном текстовом поле
if #available(iOS 12.0, *) {
tfPassword.textContentType = .oneTimeCode
}
Это должно устранить эту ошибку. Это также должно исправить эту ошибку:
[Автозаполнение] Невозможно отобразить автоматические надежные пароли для идентификатора пакета приложения: *** из-за ошибки: брелок iCloud отключен
PS: Вы также можете добавить эту новую функцию в ваше приложение. Это ссылка на статью, объясняющую процесс реализации этой новой функции. Объяснение того, как реализовать автозаполнение пароля.
Надеюсь, поможет.
Если бы та же проблема, и решить ее, установив все мои TextFields textContentType
свойство UITextContentType.oneTimeCode
.
Конечно, oneTimeCode
теперь бесполезен, поскольку он везде...
Swift 3:
Создайте базовый класс для UITextField с помощью languageCode и textInputMode.
class BaseTextField: UITextField {
// ru, en, ....
var languageCode: String? {
didSet{
if self.isFirstResponder{
self.resignFirstResponder();
self.becomeFirstResponder();
}
}
}
override var textInputMode: UITextInputMode? {
if let language_code = self.languageCode {
for keyboard in UITextInputMode.activeInputModes {
if let language = keyboard.primaryLanguage {
let locale = Locale.init(identifier: language);
if locale.languageCode == language_code {
return keyboard;
}
}
}
}
return super.textInputMode;
}}
Использование:
Задайте значение (ru, en,...) для языкаCode. Это заставит изменить локаль на клавиатуре.
private func textConfigure(textField: UITextField) {
textField.keyboardType = .default
textField.autocapitalizationType = .words
textField.languageCode = "ru"
}
Надеюсь вам помочь.
iOS 12.1 исправила проблему для меня.
Вы также должны установить параметр textContentType
текстового .oneTimeCode
пароля в .oneTimeCode
Ламер ошибка, ламер решение должно быть, я имею в виду то, что неудачная работа Apple.
Мое решение состояло в том, чтобы сосредоточиться на поле пароля, а затем на первом поле, в моем случае это было имя пользователя.
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.passwordTextField becomeFirstResponder];
[self.usernameTextField becomeFirstResponder];
}