iOS 와 안드로이드에서의 파일 저장 위치
Flutter 에서 코딩을 하다보면,
로컬에 파일이나 이미지를 저장할 때 사용할 경로를 받아오기 위해 path_provider 를 사용한다.
path_provider 에서 주로 쓰는 2개의 method가 있다.
getApplicationSupportDirectory
getApplicationDocumnetsDirecoty
안드로이드에서 getApplicationDocumnetsDirecoty 를 통해 받아오는 경로는
/data/user/0/{app_id}/app_flutter/
와 같은 형태이며 사용자 또는 다른 앱에서 접근이 불가능한 디렉토리다. (안드로이드 스튜디오에서 Device File Explorer로 확인 가능)
그래서 Hive 나 GetStorage 와 같은 패키지를 사용할때 이들 패키지에서 생성한 파일을 디폴트로 저장하는 곳이 여기다.
문제는 iOS 에서다. iOS 에서도 hive 나 GetStorage를 사용하면 생성된 파일을 저장하는 경로를 마찬가지로 getApplicationDocumnetsDirecotry 에서가 가져온 경로로 이용하는데, 아래와 같다.
/var/mobile/Containers/Data/Application/{app_id}/Documments/
iOS 에서 이 경로는 접근이 가능한 폴더다. 아이폰에 기본적으로 설치되어있는 앱 중에 '파일'앱을 이용하거나 MAC에 연결하여 사용자가 접근이 가능하다.
이 문제를 해결하기 위해, iOS에서 생성하는 파일을 저장하는 위치를 확인한 뒤, 사용자가 접근하기 못하게 감춰야 할 경우, getApplicationDocumnetsDirecoty 대신 getApplicationSupportDirectory 로 받아온 디렉토리로 저장 위치를 바꿔 줘야 한다.
참고로 iOS에서 getApplicationSupportDirectory 로 경로를 받아오면 아래와 비슷하다
/var/mobile/Containers/Data/Application/{app_id}/Library/Application Support/
안드로이드 | iOS | |
getApplicationDoccumentsDirectory | /data/user/0/{app_id}/app_flutter/ 사용자나 다른 앱에서 접근 불가 |
/var/mobile/Containers/Data/Application/{app_id}/Documments/ 다른 앱이나 장치에서 접근 가능 |
getApplicationSupportDirectory | /data/user/0/{app_id}/files (안드로이드 네이티브로 코딩하면 기본 내부 저장소로 사용되나, Flutter의 경우 app_flutter 를 기본 내부 저장소로 사용 ) |
/var/mobile/Containers/Data/Application/{app_id}/Library/Application Support/ 다른 앱이나 장치에서 접근 불가 |