최근에 구글 플레이스토어의 SDK 업데이트 정책 준수를 위하여 안드로이드용 단어장 앱인 스스로 단어장(Self Vocabulary)을 업데이트 하였다. 또한 아이폰용 실용적인 개인 프로젝트 관리 앱인 나만의 프로젝트(My Own Project)를 업데이트 하였다.
스스로 단어장을 업데이트 할 때 SDK 35이상에서 안드로이드의 화면 변경 사항을 적용해 달라는 경고를 해결하려고 하였다. 내용은 변경된 안드로이드 화면 조작으로 인하여 인셋을 설정하는 프로그래밍을 하거나 enableEdgeToEdge()라는 함수를 OnCreate에서 호출해 달라는 것이었다. 나는 enableEdgeToEdge() 함수를 액티비티 마다 호출했지만 애석하게도 API는 완벽하지 않았다. 해당 문제를 해결하려고 정석적인 인셋을 설정하는 방법도 써보는 등 AI 추천과 검색 결과 기반으로 대응을 해보았다. 하지만 내 구형 안드로이드 폰과 최신 안드로이드 OS 에뮬레이터 둘 다에서 화면이 정상적으로 나오게 하는데는 실패했다. 그때 드는 생각이 이건 내 앱이 대응해야할 중요 사항은 아니라는 것이었다. 생각을 바꾸어 SDK 35 이상의 실행 환경을 분기하는 코드를 작성하여 SDK 35이상의 환경에서만 enableEdgeToEdge()을 호출하게 하였고 그 외에는 기존 코드를 그대로 유지하게 하였다. 결과는 대 성공이었다. 과연 새로운 API를 위하여 기존의 코드를 수정하고 검증하는게 맞을까? 그냥 새로운 API가 필요한 환경에서만 동작하게 하면 되는거 같다는 생각이 들었다.
나만의 프로젝트를 업데이트할 때 한가지 황당한 일이 있었다. 할 일의 현재 진행 상태를 설정하게 하는 슬라이더 바가 iOS 26 이전 iOS에서 동작하지 않는 버그를 발견한 것이었다. 해당 버그는 유저에게 상태 변화를 잘 보여주기 위하여 슬라이더를 드래그 했을때 관련 텍스트가 2배로 확대해서 보여주고 드래그가 끝나면 원래 크기로 보여주는 기능과 관련이 있었다. 과거에 잘 동작하는 코드였지만 iOS 26에서 드래그 후 다시 확대한 텍스트가 원래 대로 줄어들지 않는 버그가 있었다. 코드는 onEditingChanged 이벤트의 상태 변수(보통 editing으로 정의)를 이용하는 부분이 iOS 26에서 문제가 있어 simultaneousGesture을 이용하여 문제를 해결하였다. 참고로 나만의 프로젝트는 SwiftUI 기반으로 개발되었다. 근데 simultaneousGesture에서 DragGesture를 이용한 수정 코드가 iOS 26에서는 정상 작동하지만 그 이전 버전의 iOS에서는 슬라이더가 이동되지 않는 버그를 만들었다. 한참을 기존 onEditingChanged나 simultaneousGesture에서 돌아가는 하나의 코드를 작성하여 해결하려 하였지만 iOS 26과 이전 iOS를 모두에서 정상 동작하는 코드를 작성하는데는 실패했다. 정석대로라면 onEditingChanged의 코드가 정상 작동되지 않는 것은 iOS 26에서의 버그였기에 해당 버그가 고쳐지기를 바라며 기다리는게 맞았지만 아직까지 애플의 버그 수정이 없는 관계로 어떻게든 문제를 해결해야 했다. 이때도 결국 최종 해결책은 iOS 26 관련 분기 코드로 기존 코드와 새롭게 수정된 코드를 iOS 26이상이냐 아니냐에 따라 사용하는 것이었다. 결과적으로 iOS 26과 관련된 분기에 따라 기존 코드(onEditingChanged)와 새로운 코드(simultaneousGesture)를 이용하니 문제를 해결할 수 있었다.
개인적으로 지금까지 나의 개발 철학은 실행 환경에 따른 분기 코드를 작성하지 말자는 것이었다. C/C++에서의 전처리 분기로 인한 버그, 코드 비대화, 코드 가독성 저하, 컴파일 시간 증가 등의 문제를 너무 잘 알고 이었다. 그래서 안쓰려 했지만 현실은 어쩔 수 없는거 같다. 지금까지는 차라리 오래된 API기반 코드를 작성하더라도 경고나 문제만 없으면 호환성이 좋은 코드를 작성하려고 하였다. 하지만 SDK의 변화나 OS의 버전별 버그는 어쩔 수 없는거 같다. 이런 어쩔 수 없는 상황이 늘어나지 않기를 바라며 때때로 환경 분기 코드를 써야겠다. 단지 이번에도 그랬지만 분기 코드를 작성하더라도 공통 부분은 함수로 묶어 동일 코드가 두 군데 생겨서 발생할 수 있는 유지 보수의 문제는 최소화해야 한다.
'개발이야기' 카테고리의 다른 글
| 윈도우 디바이스 드라이버 공부하기 (0) | 2026.06.03 |
|---|---|
| 영상 처리 공부하기 (0) | 2026.04.05 |
| 게임 물리 엔진 이해하기 (0) | 2026.01.09 |
| AI가 개발자를 대처할까? (0) | 2025.01.21 |
| [서평] 3D 게임 비주얼과 연출의 기술 (1) | 2024.08.03 |
| [서평] 게임 엔진 아키텍처 (3) | 2024.06.26 |
| [서평] 게임 디자인 원리 (0) | 2024.06.21 |
| 게임을 업데이트 하면서 느끼는 것들... (0) | 2024.02.03 |