본문 바로가기

iOS/Deep dive!!!

[iOS] UITextField 비밀번호 입력시 문자 가리는 방법 | Strong Password 경고

 

안녕하세요. 앱을 개발중인데 SignUp page에서 텍스트필드에 암호를 입력할 때 가리는 방법에 대해서 작성하려고 하빈다. 그리고 마주한 Strong Password에 대한 제 해결 방법을 소개하려고 합니다.

 

제 xCode 버전은 14.3이고 iOS minimum target 13입니다.

 

 

 

UIKit에서 키보드 입력은 보통 UITextField로 쉽게 받을 수 있는데요. (한글 영어 할 것 없이 쉽게 받아져서 좋은것 같아요.. readLine()은 한글 입력받으면 이상하게 받아지던데..)

 

 

 

let textField = UITextField()
textField.isSecureTextEntry = true
textField.textContentType = .password

 

UITextField로 비밀번호를 입력받을 경우 사용자가 입력한 비밀번호를 숨기는 방법을 isSecureTextEntry bool value를 true로 설정하면 입력된 text가 가려집니다.

 

 

글자 하나 입력했을 뿐인데....

그런데 글자 하나 입력했는데 갑자기 Strong Password 경고가 뜨면서 제가 입력한 텍스트가 보이질 않았습니다.

 

 

cf.

[AutoFill] 은 user를 위해 자동으로 입력 필드에 저장된 정보를 채워주는 기능이고, Automatic Strong Password또한 iOS에서 제공하는 안전한 비밀번호 생성 + 저장 기능입니다.. 지금 제 시뮬레이터는 iCloud Keychain이 비활성화 되어있고, 그래서 에러가 발생됬나 봅니다. ( iCloud Keychain을 사용해야 Automatic Strong Password 기능을 통해 비번을 자동 생성 + 저장)'

 

textField.textContentType = .none

 

또는 AutoFill 기능을 끄기 위해서 .none으로 설정하면 String Password기능을 포함한 AutoFill 미사용된다고 합니다. (autofill관련 깃헙 이슈)

 

 

 

그럼에도 저는 여전히 같은 Strong Password가 작동됬고 그 이유는 여전히 iCloud keychain이 disabled되어있기 때문입니다. 이것을 해결하기 위해서 iOS 시뮬레이터에서 iCloud keychain 기능을 비활성화 해야하지만 다른 방법이 찾고 싶었습니다...

 

textField.isSecureTextEntry = true
textField.textContentType = .oneTimeCode

 

textContentType 을 .newPassword, .pasword로 했지만 여전히 같은 경고가 발동되었습니다. 그러다 우연히 이 질문과 답변들을 보게됬고  .oneTimeCode를 설정함으로 해결했습니다.

 

References:

https://developer.apple.com/forums/thread/108085

https://github.com/expo/expo/issues/2571

https://developer.apple.com/documentation/uikit/uitextinputtraits/1624427-issecuretextentry