Skip to content

1Password 등 SwiftUI SecureField에서 입력되지 않는 문제 #48

@kiding

Description

@kiding
  • AppKit 암호 입력 필드에 포커스되면 입력기가 자동으로 ABC로 변경됨
  • SwiftUI 암호 입력 필드에서는 동일하게 작동하지 않음
    • 예시:
    import SwiftUI
    
    struct ContentView: View {
        @State private var text: String = ""
    
        var body: some View {
            VStack {
                TextField("Test", text: $text)
                SecureField("Test", text: $text)
            }
            .padding()
        }
    }
    
    #Preview {
        ContentView()
    }
    • macOS Radar 필요
  • 입력하면 속 입력기로 NSEvent는 수신되는데 실제로 입력되지는 않음
    • 암호 필드이기 때문에 내장 입력기 또는 smRoman이 아니면 입력할 수 없음
    • 이 때 InputMonitor로 USB HID는 수신되지 않음
  • 포커스 상태에서 사용하는 입력기를 ABC로 바꾸고 다시 속 입력기로 바꾸면 입력됨
    • 이 때는 속 입력기로 NSEvent와 USB HID 모두 수신되지 않음
  • 다른 입력기 테스트 1: 구름 입력기로는 입력이 됨
    • MarkedStrategy라서 그런 듯
  • 다른 입력기 테스트 2: 애플 내장 두벌식으로는 첫 한 글자만 입력됨
  • 해결법 1: NSEvent 수신될 때 IsSecureEventInputEnabled 확인한 뒤 ABC로 바꿔주기
    • 문제: 첫 글자는 입력되지 않을 듯, 다른 방법이 있을까?
    • 테스트: AppKit와 SwiftUI에서 따로 확인, 한글 상태에서 영문으로 잘 바뀌는지 확인
  • 해결법 2: IsSecureEventInputEnabled일 때 NSEvent 처리하지 않음
    • 문제: 암호 입력 중 Caps Lock을 켜는 경우 상태가 HID로 넘어오지 않아 하드웨어와 어긋남
    • 클릭하면 reset 하므로 무시

Metadata

Metadata

Assignees

No one assigned

    Labels

    버그뭔가가 제대로 작동하지 않습니다.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions