오늘은 Festago 출시 후 앱에 crash 가 발생한 첫 번째 사례와 해결한 방법에 대해 써보겠습니다.
문제 발생 과정
개발 과정에서는 문제가 생기지 않았고
처음 설치했을 때도 문제가 발생하지 않았다.
첫 출시에 감격하고 있었는데..
곧바로 문제가 발생했다.
앱을 삭제했다가 다시 설치하면 무조건 crash 가 발생하는 것이다!
전혀 예상치 못한 오류에 어디서 문제가 발생한건지 왜 두 번 설치해야 문제가 발생하는 것인지 고민하다가
프로젝트에 적용한 Firebase Crashlytics Log를 확인해보았다.
AuthLocalDataSource 의 SharedPreferences 에서 오류가 발생한 것이었다.
오류 메세지는 다음과 같았다.
Caused by android.security.KeyStoreException Signature/MAC verification failed
해당 예외가 발생하는 문제를 구글링을 해보았다.
문제 인식
https://github.com/google/tink/issues/535
EncryptedSharedPreferences 공식문서
구글링한 결과 EncryptedSharedPreferences 와 관련된 것이었다.
위 글을 정리하자면
SharedPreferences 는 AutoBackup 이 default 이다.
앱을 삭제해도 데이터가 사라지지 않게 하기 위해 백업하는 것이다.
문제는 EncryptedSharedPreferences 는 SharedPreferences 의 구현체로 key 와 value 를 암호화하는데
재설치시 이 key 가 유효하지 않게 된다.
따라서 backup rules 를 사용해 EncryptedSharedPreferences 가 백업되지 않도록 해줘야한다
문제 해결
공식문서에서 소개한 방법 외에도 다른 방법이 있는지 확인해 보았다.
1. allowBackup = “false”
2. try catch 로 잡고 EncryptedSharedPreference 재설정
3. EncryptedSharedPreference 가 Auto Backup 되지 않도록 backup rules 사용 제외
찾아본 방법은 이것 세가지였는데
1번은 모든 데이터가 백업되지 않기 때문에 사용하지 않았다.
2번도 나쁘지 않은 방법이긴 했지만 crash 가 발생하고 잡는 것 보다 발생하지 않는 상황을 만드는 것이 더 좋다고 판단했다.
결국 공식문서에서 소개한 3번 방법을 사용하기로 했다.
https://developer.android.com/guide/topics/data/autobackup#IncludingFiles
안드로이드 11 이하와 안드로이드 12 이상 기기에서 제거하는 방법이 달랐는데
<application ...
android:fullBackupContent="@xml/backup_rules">
</application>
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="."/>
</full-backup-content>
위와 같이 백업 룰을 추가하여 11 이하에서 sharedPref 가 포함되지 않도록 해주었다.
<application ...
android:dataExtractionRules="backup_rules.xml">
</application>
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup disableIfNoEncryptionCapabilities="true|false">
<exclude domain="sharedpref" path="." />
</cloud-backup>
</data-extraction-rules>
12 이상에서도 backupRules 를 추가해주었는데 fullBackupContent 대신 dataExrtractionRules 를 사용해야 한다.
똑같이 sharedPref 가 포함되지 않도록 해줬다.
빠르게 변경한 후 1.0.1 버전으로 업데이트했다.
결론
출시하기 전엔 문제가 없는줄 알았는데 출시하고 나서 버그가 발생할 수 있구나 처음 알게되었다.
기술을 사용할 때 더 꼼꼼하게 보는 습관을 가져야겠다 다짐했으며
출시,배포, 유지보수 경험이 생각보다 훨씬 중요하다는 것을 느꼈다.
PR 링크
'Bug Fix' 카테고리의 다른 글
페스타고 v2.0.0 릴리즈 전 테스트 및 버그 수정 (0) | 2024.05.05 |
---|