Dart & Flutter/Widget & Package

iOS 와 안드로이드에서의 파일 저장 위치

낭초비 2023. 2. 8. 14:14
반응형

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/ 
다른 앱이나 장치에서 접근 불가

 

 

반응형