시작하며
앱 개발 중 텍스트필드에 입력이 제대로 되지 않는 문제가 발생하였다. 글자가 입력 도중 사라지기도 하고 자음은 단독으로 입력되지 않았다. 처음에는 단순한 버그라 생각하고 재시작, 캐시 초기화 등등 일반적으로 해볼 수 있는 방법을 모두 해보았지만 문제는 해결되지 않았다.
도와줘요 ChatGPT
먼저 챗GPT에게 물어보았고 이러한 답변을 받았다. 하지만 이미 재구성 최적화를 위해 많은 텍스트필드를 TextFieldState를 사용하는 것으로 바꿔두었고(이전 글 참고) 설마 전부 되돌려야 하나 싶었다.
일단 해결 방법을 보고 텍스트필드 한 개만 value/onValueChange로 롤백해 보았고 슬프게도 문제없이 동작하였고 설마 한글만 그러겠어 싶어서 영어도 작성해 봤지만 더 슬프게도 문제없이 입력되었다. 챗GPT의 말대로 한글에서 발생하는 composing 상태가 원인인 듯하였다.
이제 문제가 없는 value/onValueChange로 모두 롤백하는 노가다를 할 것인가가 문제였는데 도저히 엄두가 나지 않아 해결하는 것으로 가닥을 잡았다. 먼저 생각한 방법은 composing을 커스텀해서 한글에 대한 처리를 해볼까 했지만 금방 쉽지 않다는 것을 알았고 혹시나 해서 먼저 이슈 트래커를 찾아봤다.
IssueTracker
솔직하게 기대를 전혀 하지 않았지만 textFieldState korean이라 검색하니 놀랍게도 글 한 개가 검색되었고 곧바로 번역을 눌러 읽어보았다.
https://issuetracker.google.com/issues/375742018
Google Issue Tracker
issuetracker.google.com
댓글이 두 개 있었는데 한 개는 내부 작업과 관련된 댓글이었고 남은 한 개가 1.8 버전에서 문제가 있으며 필요하다면 다운그레이드하라는 말이었다. 곧바로 내 프로젝트의 버전을 확인해 보았고 실제로 1.8 버전을 사용 중이었기에 바로 다운그레이드하기로 했다. 어차피 알파 버전이므로 안정화된 후에 올려도 괜찮을 것이란 생각이 들었다.
dependencies
여기서 다시 막혔다. 나는 1.8.0-alpha04 버전을 선언한 적이 없었기 때문이다.
implementation(platform("androidx.compose:compose-bom:2024.10.01"))
implementation("androidx.compose.material3:material3")
이렇게 bom과 material3만 선언해서 사용하고 있었고 버전을 확인할 수 있는 maven Repository를 확인해 보니 foundation은 1.7.4 버전이 포함돼 있는 것으로 되어있었기에 다시 한번 챗GPT에게 물어보았다.
bom에서 특정 버전을 고정해 보라 해서 시키는 데로 추가하고 다시 돌려봤는데 여전히 동일한 문제가 발생하였고 확인해 보니 BasicTextField가 여전히 1.8.0-alpha04 버전이었다.
그래서 버전 고정이 안된다고 하니까 강제로 고정하는 방법을 알려주었고 해당 코드를 dependencies 블록 위에 추가하고 다시 실행해 보니 문제가 해결되었다. ^^
P.S. dependency tree
그러면 1.8.0-alpha04는 어디서 나왔는가를 확인하는 방법은 디펜던시 트리를 확인하면 된다. 알려주는 데로 해보면 아래와 같이 뜨는데 트리 구조를 위로 따라가 보면 어디서 나왔는지 알 수 있다. 찾아보니까 6개 정도 검색되는데 업데이트가 빠른 라이브러리들이 있는 거 같다.