1. 경위
1월 10일 경, 폴더블폰에 대한 QA가 접수되었다.
폴더블폰에서 앱 사용 중 핸드폰을 펼치거나 접어서 활성화면을 바꿀 경우. 앱이 종료되고 재실행 된다는 것이 그 내용이었습니다. 지난 10월경, 다양한 해상도에 대응할 수 있도록 UI를 재설계했던 경험이 있었기 때문에. 해당 경험을 근거로 이번도 해볼만한 일이라고 판단했고, 승인을 얻어내어 내 담당으로 업무를 끌어올 수 있었다.
2. 문제정의 & 접근
우선, 자사내 다른 개발팀이 개발하는 앱 중에서 해당 이슈가 발생하지 않는 게임들을 추렸다 (겸사겸사 도움을 청할 수 있는 창구를 탐색할 겸) 그리고 해당 게임과 내가 참여하고 있는 게임을 비교하며, 어느 부분이 다른지 비교하며 관찰했다.
관찰 결과 이 앱의 경우, 디스플레이 설정의 "커버화면에서 앱 계속 사용" 옵션이 미구현 되어 있었음을 확인했다. 그리고 몇 가지 탐색을 통해 해당 옵션 미 구현이 폴더블폰의 활성화면을 변경하는 순간에서 앱이 꺼지는 현상의 원인이라고 확정지었다.
그렇다면, 어떻게 옵션을 구현할 수 있을까?
안드로이드 개발자 문서 : 폴더블폰용 앱 빌드에서는, 관련하여 다음과 같이 서술되어있다.
즉, androidManifest에 resizableActivity=true 명시해주어, 실행하는 안드로이드 os에게, 이 앱은 크기 조정이 대응되어있다(=그러므로 핸드폰 해상도가 변경되는 상황에서, 종료하지 말고 윈도우 크기를 조정해라) 정보를 알려줘야 했다.
3. 시행착오
androidManifest를 변경하는 건 쉬운일이라. androidManifest를 수정하고자 했는데. 한가지 문제가 있었다. 현재 우리 프로젝트에서는 ADmob, 앱푸시, 로그인 인증 등을 위해 firebase SDK를 사용하고 있었고. 파이어베이스 가이드에 따라 플러그인 폴더 내 생성되어있는 androidManifest파일을 빌드 시 지정해서 사용하는 상황이었다. 이 상황에서 지정한 androidManifest에 resizableActivity 옵션을 true로 넣어주어도. 최종적으로 생성되는 apk파일에서는 해당 옵션이 빠진 채 빌드되는 문제가 발생했다.
apk분석툴로 열어봤을 때, manifest 내부에 확실하게 resizableActivity옵션이 없는 것을 확인하고. 즉시 수정할 수 없는 문제라고 판단, 작업물을 간단하게 정리하고 퇴근했다.
그리고 다음날 아침, 회사에서 제공해주는 조식을 먹으며, 함께 먹는 다른 팀 선임개발자님께 현재 상황을 간단하게 브리핑하고 혹시 비슷한 이슈가 있었는지 자문을 구했고. 빌드가 이뤄질 때, 참조하고있는 androidManifest를 모아 재구성하는 과정에서 몇 가지 옵션이 빠졌던 일이 있어서 며칠 고생했다는 힌트를 얻었다.
해당 힌트를 바탕으로, 옵션이 빠지는 원인은 manifest가 아니라 유니티에 있다고 판단. 빌드 과정에서 무언가에 의해 누락되는 것이라고 추측했다.
해당 추측을 기반으로, "unity foldable build option"을 구글에 검색해 삼성 개발자 문서 : Foldable Device Features with Unity and Unreal5 을 찾아냈다. (그리고 이 때, 삼성기기를 위한 개발자 페이지가 있다는 걸 처음 알게되었다)
4. 해결
그리고 해당 페이지를 정독하다가, resizableActivity는 playerSetting, Size & Resolution 내 Resizable Window 옵션에 의해 통제된다는 사실을 알게 되었다. (추측컨대, custume androidManifest보다 playerSetting 옵션의 우선권이 더 높기 때문에. 통합하는 과정에서 해당 어트리뷰트가 탈락된 것이라 예상한다.)
다시 말해, 해당 옵션을 클릭으로 켜주기만 하면 해결되는 일이었고. 해결했다.
5. 후기
이 과정을 통해 나는 다음과 같은 지식을 얻었다.
- 폴더블폰 연속사용을 위해선 playerSetting 내 resizableWindow 체크박스를 true로 바꿔야 한다.
그리고 다음과 같은 정보를 얻었다.
- 삼성 개발자 문서 페이지가 있다. 삼성 디바이스에서 생기는 문제들에 대한 도움을 받을 수 있다.
- Unity는 빌드 시 androidManifest를 재구성하며, 특정 상황에서 몇몇 어트리뷰트가 누락되는(것 처럼 보이는) 일이 생긴다. 분명 병합 과정에서 어트리뷰트가 상충되는 상황에 대한 우선순위 규칙 등이 있을 것. (나중에 한번 파볼만한 소재 +1)
개발을 하면서, 알고 경험해본 영역보다 몰랐던 (심지어는 있는지조차 알지 못했던) 영역에서의 문제를 더 많이 마주하곤 하는데. 그럴 때마다 이번 사례처럼 원인을 정의하고 하나하나 해결해 나가는게 그렇게 재미있을수가 없다 ㅋㅋ. 그리고 이번에도 상당히 재미있는 경험이었다.
'DevLog' 카테고리의 다른 글
DevLog - 게임을 출시하고 나서 (0) | 2023.04.30 |
---|---|
DevLog - 1년 간 한 일들 (0) | 2023.02.13 |
DevLog - 커리어 정리 (2) | 2022.12.02 |
DevLog - 일일 업무 루틴 (0) | 2022.11.18 |
DevLog - 전략적 개발을 통한 협업 관리 (0) | 2022.11.16 |