Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Native UITextField Secure Text Entry forces English (US) keyboard

I have a very simple login page (login + password).

My users are french, so their keyboard are French (azerty).

Since iOS 12, when they click on the password textfield, which is secured, the keyboard switches to English (qwerty), even if they do not have this keyboard installed on their devices. Moreover, if they do not have this keyboard installed, they can't switch back to their keyboard.

I found out that if I deactivate Secure Text Entry, the problem does not show up.

I also tried to set isSecureTextEntry programmatically, and the bug shows up.

I am adding two screenshots, one for each text field.

Thank you a lot for your time & help.

enter image description here

enter image description here

like image 808
Thib L Avatar asked Oct 08 '18 11:10

Thib L


3 Answers

I have the same issue, in my case this bug appears only with a register screen.

The reason is that Apple checks the name of the class/func/parameter to determine (with heuristics) if it is a login/register screen and activate automatically autofill password. By replacing "register" with "Patate" in my code, the problem is solved.

I reproduce this issue with a sample app with 2 textfields (with a security text entry) and a view controller named "RegisterViewController". With a "PatateViewController", I have not the issue.

Moreover, I have this error in console : [AutoFill] Cannot show Automatic Strong Passwords for app bundleID: *** due to error: iCloud Keychain is disabled

Source : https://developer.apple.com/documentation/security/password_autofill

Hope you will find a better way than renaming your code.

like image 59
Nico Avatar answered Oct 20 '22 07:10

Nico


I had the same problem appear recently on our application. The problem is linked to the new feature of the PasswordAutofill from Apple.

To bypass this problem you can apply this little piece of code on your secure textfield

    if #available(iOS 12.0, *) {
        tfPassword.textContentType = .oneTimeCode
    }

This should resolve this bug. This should also fix this error:

[AutoFill] Cannot show Automatic Strong Passwords for app bundleID: *** due to error: iCloud Keychain is disabled

Ps: You could also add this new feature to your app. This is a link to an article explaining the process on how to implement this new feature Explanation on how to implement password autofill

Hope it helps.

like image 28
Martin Avatar answered Oct 20 '22 07:10

Martin


Same solution in Swiftui now :

TextField("placeholder",text: $YourTextBinding)
                        .textContentType(.oneTimeCode)
                        .keyboardType(.default)

just need to add :

                        .textContentType(.oneTimeCode)
                        .keyboardType(.default)

to a TextField or a SecureField.

hope it helps !

like image 3
theMouk Avatar answered Oct 20 '22 07:10

theMouk