5개월 동안 버전 2를 위해 달려온 페스타고 개발..
드디어 버전 2.0.0 개발을 완료했고 테스트에 돌입했다.
1. 첫 번째 테스트와 버그 : Firebase Test Lab
Key 로 서명해 만든 APK 파일을 Test Lab 에 등록하면 실물 기기가 없는 환경에서 자동 테스트를 돌릴 수 있다.
한 번도 사용해보지 않았는데 이번에 처음 사용해보았다.
어떤 식이냐 하면... Robo Test 로 예시를 보여주겠다.
잠깐! Robo Test 란?
Firebase 공식문서
https://firebase.google.com/docs/test-lab/android/robo-ux-test?hl=ko
앱 UI 를 분석해 사용자 활동을 시뮬레이션해서 탐색한다!
그러니깐...따로 UI 테스트를 작성하지 않아 계측 테스트를 하지 못하더라도 자동으로 버튼을 눌러가면서 앱에 문제가 발생하는지 체크할 수 있다는 뜻이다.
물론 앱 요구사항이 제대로 동작하는지 확인하려면 테스트나 추가 스크립트를 작성해야한다.
그럼 어떻게 적용하는가..?
Firebase Console 의 Test Lab 에서 RoboTest 를 실행
APK 혹은 AAB 를 업로드 하고 특정 작업을 수행하고 싶다면 Robo 스크립트를 추가한다(optional)
다음으로 넘어가면 이렇게 핸드폰 기종을 선택할 수 있는 화면이 나타난다.
내가 테스트하고자 하는 기기를 선택하면 해당 기기에 내 앱을 테스트할 수 있게 된다.
현재 무료로 사용할 수 있는 기기는 하루에 5대(5번)으로 제한되어 있어 5개 밖에 돌리지 못했다..
조금 오래 걸려서 다른 작업을 하고 돌아왔는데 이럴 수가..
모두 비정상 종료로 실패했다.. debug mode 에서는 문제가 발생안했는데 또 release 너냐!!
이래서 출시 및 유지보수를 해봐야한다..
어쨌든 문제를 확인하러 가자. 앱에 Firebase 의존성을 추가해두었기 때문에 crashlytics 에서 왜 비정상 종료가 일어나는지 그 로그를 확인할 수 있다.
Crashlytics 같은게 없을 때는 어떻게 개발했을까..
짜잔 ClassNotFoundException 이었다.
엥? 빌드가 됐는데 class Not found 라니 이게 무슨??
역시.. release 에서만 안되면 대부분 난독화 문제라더니 이것도 난독화 문제였다.
Navigation 라이브러리를 사용해 화면 간 전환하는데 SafeArgs 를 사용. 화면간 인자를 전달한다.
https://developer.android.com/guide/navigation/use-graph/safe-args?hl=ko
이 SafeArgs 에 기본적으로 객체를 넘길 수 없어 객체를 넘기기 위해 안드로이드 직렬화 라이브러리 kotlinx.Parcelize 를 사용했다. (Serialize 를 사용할 수도 있지만 안드로이드 의존성을 가지는 Presentation Module 에서는 Parcelize 사용을 선호한다. 두 개의 차이점은 언급하지 않겠다.)
난독화 때문에 Args Class 를 찾지 못하는 문제였다. 당연히 전달할 인자의 타입을 못찾으니 터질 수 밖에 없었다.
그래서 proguard-rules 설정을 변경해주었다.
https://stackoverflow.com/questions/70865617/classnotfoundexception-in-navigation-graph-android
-keep @kotlinx.parcelize.Parcelize public class *
이 어노테이션이 최적화 및 난독화로 사라지는 것을 방지하는 것이다.
적용 후 다시 Apk 를 뽑으니 잘 동작했다.
2. 두 번째 테스트와 버그 : Firebase App Distribution
Firebase 에는 테스터를 모집, 테스터에게 Apk, AAB 를 배포할 수 있는 기능을 제공한다.
이메일을 등록하거나 초대 링크로 테스터 그룹에 테스터를 추가할 수 있다..!!
아주 쉽다! APK, AAB 파일을 드래그 앤 드롭하고 테스터를 등록한 후 배포하면 된다. (AAB 는 추가 설정이 필요하다.)
이렇게 배포 후 내 메일에서 설치했는데.. crash 는 발생하지 않았지만
두 번째 문제 카카오 로그인이 되지 않는다.
이 부분은 좀 당황스러웠다. 에상치 못했다.
왜냐하면 페스타고 v1 에서 카카오 로그인을 이미 사용했었고 따라서 해시 키도 kakao Developers 에 등록했었는데 이런 문제가 발생했기 떄문이다..
보통 이러면 해시키 문제인데.. 확인해보기 위해서 로깅해보았다.
Analytics 를 활용하면 로깅도 가능하다. 그러나 Acitivty(화면) level 에서 로깅을 하고있지 않아서 예외를 Catch 하지않고 throw 해보았다.
오잉 key_hash 가 invalid 하다는 오류이다. 진짜 해시키 문제였다.
아무래도 이전에 내 개발 환경에서 해시키를 발급해 등록하지 않아서 문제가 발생한 것으로 생각되는데.. 아직 정확한 이유는 모른다.
그래도 crash 이유는 알았으니 해결할 수 있다. kakao_devlopers 공식 문서의 릴리즈 key hash 발급 방법을 따라갔다.
드디어 로그인에 성공했다..후
마무리하며
앱 릴리즈 과정..정말 쉽지않다. V1 출시에서도 Crash 와 싸웠는데 이번에도 역시 발생했다.
그래도 다행인점은 업데이트 전 테스트에서 잡았다는 것이다.
앱 테스트 및 로깅 환경을 구축해 실제 서비스 전에 버그를 잡고 fix 할 수 있었다.
앱 개발을 공부하는 사람들은 꼭 출시 및 유지보수를 경험하길 추천한다.
이런 크리티컬한 문제를 회사에 취직하고 나서 알게된다? 벌써 무섭다..ㅋㅋ
전에도 비슷하지만 다른 문제를 겪었던 터라 해시키와 Parcelize 는 릴리즈에 더 주의해서 대응해야겠다.
대학 축제를 더욱 즐겁게! 페스타고가 곧 업데이트 됩니다!
'Bug Fix' 카테고리의 다른 글
[Bug Fix] 앱 재설치 시 크래시 발생(EncryptedSharedPreferences ) (0) | 2023.11.12 |
---|