본문 바로가기
UIKit Project/UIKit Troubleshooting

[날씨의 i] 쌓여가는 앱 용량..realm 데이터와 iOS 데이터 확인하고 임시파일 삭제하기 (Realm CRUD, RealmStudio, iOS FileManager, tmp)

by thekoon 2023. 9. 18.

위젯을 모두 완성하고..! 즐거운 마음으로 2.0 업데이트를 신청하려 하는데

앱 용량이 궁금해서 확인해보니 400MB..?였습니다??

그렇게 큰 앱이 아닌데 이상하다..해서

내부를 살펴봤습니다.

앱 용량은 익스텐션을 3개나 활용해서 이전보다 늘어났을 수 있다고 해도

문서 및 데이터가 52.6MB..?로 생각보다 많이 데이터가 있었습니다.

 

위젯을 개발하면서 테스트하기 위해 여러 사진을 설정했었는데

그 사진들이 지워지지 않고 앱 안에 쌓여있나..? 해서

새로운 사진을 몇 장 설정해보았습니다.

그랬더니

이렇게 바로바로 용량이 쌓이고 있었습니다ㅎㅎ

realm에서 업데이트할때 기존의 사진을 대체하는 메소드를 만들어서

사진이 한 장씩 계속 바뀐다고 생각했는데

잘 못 만들었나..? 생각하며 코드를 다시 확인했습니다.

 

 

새로 들어온 alertImage가 기존의 alertImage에 대치되서 수정이 되야 하는데

이상해서 프린트를 찍어봤습니다.

프린트를 찍어봤을때는 이미지 용량이 쌓이지 않고 대치되는 모습을 확인할 수 있었습니다.

 

 

그래서 어디가 문제인지 고민을 하고 있었는데..

역시 Realm!!

Realm Studio라는 앱이 있더라구요

https://github.com/realm/realm-studio/releases

 

Releases · realm/realm-studio

Realm Studio. Contribute to realm/realm-studio development by creating an account on GitHub.

github.com

 

시뮬레이터를 연결해서 돌려봤는데

저장된 데이터와 크기를 시각적으로 바로바로 확인할 수 있어서 편리했습니다.

 

 

다행히 제가 생각한대로 작동해

사진을 변경해도 alertImage가 계속 쌓이지 않고

변경되는 모습을 확인할 수 있었습니다.

 

 

realm의 데이터는 문제가 없는 걸 확인하고

앱 내에서 어디에 용량이 쌓이는 지 확인하기 위해

AppData를 다운받고 확인해보았습니다!

 

그랬더니 그 동안 테스트하면서 사용했던 이미지들이 tmp폴더에 고스란히 쌓여있는걸 확인했습니다!

드디어 원인을 찾았네요

앱이 종료 되면 tmp파일 내에서 자연스럽게 삭제될 줄 알았는데

앱이 종료되고, 시간이 지나도 계속 삭제가 되지 않고 남아있어서 앱 데이터가 계속 쌓이는문제였습니다.

 

공식문서를 살펴보니

https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW12

 

File System Basics

File System Basics A file system handles the persistent storage of data files, apps, and the files associated with the operating system itself. Therefore, the file system is one of the fundamental resources used by all processes. APFS is the default file s

developer.apple.com

앱은 각각의 독립적인 Sandbox를 가지고 있고,

Data Container에 사용되는 데이터들이 저장됩니다.

Temp에 있는 파일들은 나중에 쌓이면 iOS가 삭제할 수 있다고 하는데

제 앱은 하나의 이미지 파일만 필요해서

나머지 필요없는 tmp 내 파일들을 바로 제거해보려 합니다.

 

 

앱을 종료하거나 백그라운드로 보낼때 바로바로 지워주고 싶어서

SceneDelegate에 임시파일 삭제 메서드를 만듭니다.

NSTemporaryDerectory에 접근해서 배열을 돌면서

tmp파일 안에 있는 파일을 삭제하고

마지막으로 확인하기 위해 프린트 문을 넣었습니다.

 

 

앱을 빌드하고 사진 몇 장을 추가하고, 앱을 백그라운드로 보내니

 

 

쨘~! 이렇게 바로 지워져서 문서 및 데이터가 일정한 수준을 유지하게 되었습니다!

기능 테스트를 해봐도 별 문제없이 작동하는 모습을 볼 수 있었습니다.

나중에 혹시 앱에서 다양한 사진을 활용한다 하면

이 부분을 다시 살펴봐야할 것 같습니다.

 

혹시 틀린 부분이 있거나 더 나은 방법을 생각하신 분이 계시다면 댓글로 말씀 부탁드려요!

감사합니다.