본 게시글은 23년 2월 22일,
1.4.0-alpha01-dev938
버전의 컴포즈를 사용한 후기입니다.
부디 여러분이 이 게시글을 보는 시점에는 안정적인 컴포즈가 배포되어 iOS에서도 무리없이 개발이 되었으면 좋겠네요.
도...망쳐... 오지마... 어서 도망쳐!! 도망치라고!!!
저번에 데스크탑을 타겟으로한 Jetpack Compose 토이 프로젝트를 진행한 적이 있었다.
여기 에 기술되어 있는데, 그 때는 개발에 큰 문제는 없었다.
그리하여, 아이폰도 마련했겠다 iOS를 개발해보기 위해 프레임워크를 뒤적이던 중 Jetpack Compose 가 아직 공식 지원은 아니지만 iOS에서도 돌릴 수는 있다고 하길래 바로 시도해봤다.
정확히는 'iOS는 아직 실험적이며 개발 중에 있습니다. 모든 리스크를 감수하고 사용하십시오.(원문: The other targets (iOS, Compose for Web Canvas) are experimental and under development. Use them at your own risk.)'라고 기술되어있었다.
근데 사실 이 글귀는 이미 엉망진창으로 당하고 난 뒤에 뭐 이래?? 하고 문서를 봤을 때 발견한 글귀라서... 별로 의미는 없었다.
결론부터 말하자면, iOS는 아직 Compose 로 개발하기 어려울 것 같다.
지금까지 iOS에서 겪은 런타임 관련 이유는 다음과 같다:
AnimatedVisibility
에 사용되는 상태를 변경할 때 간헐적으로 앱이 죽는다. 컨텐츠의 숨김/보이기 애니메이션을 사용한다면 문제가 있다.한국어 입력의 경우 onValueChange
핸들러의 호출도 이상하고, CoreTextField
나 LocalTextInputService
에 내부적으로 할당(provide
)되는 인스턴스의 PlatformTextInputService
에 뭔가 문제가 있는 것으로 보이나 실제 소스가 안찾아져서 자체 수정은 포기했다.
사실 이거 수정하려고 한글 오토마타라던가 자모 합치기 이런 라이브러리 겁나 많이 뒤졌다 (...)
기타 개발하면서 든 생각은 다음과 같다:
인터넷에 보면 iOS에서 Compose 셋업하기 이런 게시글 엄청 많이 보이는데, 그거에 혹해서 시도해보기에는 아직 너무 이르다.
물론 공식에서도 'iOS는 아직 개발중이다' 라고 했으니 더 할 말은 없지만, 언제 지원해줄지도 알 수 없는 상황이기 때문에 사실상 지금 iOS를 Compose 를 써서 개발하기에는 무리가 있을 것 같다.
그렇지만, 분명 Jetpack Compose 는 괜찮은 라이브러리이다.
TextField
에 visualTransform
이라는 기능이 있는데, 이걸 쓰면 실제 입력된 값과 보이는 값에 차이를 둘 수 있으며 글자단위로 AnnotatedString
을 사용해 스타일링이 가능하다.Animation
지원이 생각보다 쓸만하다. AnimatedVisibility
부터 Crossfade
나, animate*AsState
같은 매우 강력한 API들이 제공된다.그래서 비록 지금은 너무 많은걸 당해서 지쳤다보니 아주 약간아니 사실 아주 많이 컴포즈에 실망하긴 했지만 언젠가 꼭 컴포즈가 iOS를 안정적으로 지원해주길 바란다.