Apple Developers Document-File System Basics
iOS 파일 시스템은 SandBox 구조를 띄고 있다
SandBox
아이들에게 놀이터 모래사장 안에서만 놀 수 있도록 하고, 나올때는 흙을 털고 나오게 하는 것처럼, 내부와 외부를 적절하게 분리 시키는 구조라고 간단하게 이야기 할 수 있다. iOS는 기본적으로 앱 마다 별도의 파일을 생성하여 공유되지 않도록 하고 외부로부터 들어온 접근에 대해 보호되는 영역으로 시스템이 부정적으로 조작되는것을 막는 보안 형태를 띄고 있다.
만약에 iOS 파일 시스템 구조가 샌드박스 구조가 아니라면??
하나의 앱이 모든 기기의 모든 자원을 망나니처럼 휩쓸고 다닐 수 있다! 또한 외부로부터의 접근을 쉽게 허용할 수 있다
우리가 샌드박스 구조를 쉽게 경험한 적이 있을까??
많은 자료들에서 볼 수 있는 그림이다
SandBox는 Bundle Container
, Data Container
, iCloud Container
로 나누어져 있다.
사용자가 작성, 가져오기, 삭제 또는 편집하려는 모든 파일이 포함
ex) 나중에 보려고 저장해둔 비디오 파일
ex) 그림 파일이나 텍스트 파일 등
큰 파일들 같은 경우 백업이 되지 않도록 - USURL setResourceValue:forKey:error:
를 활용해서 백업에서 제외할 수 있도록 해야된다
외부 앱에서 요청하여 가져온 데이터를 inbox에 저장한다
ex) 메일의 첨부파일
ex) PDFExpert 에서 타 앱의 디렉터리에 접근하여서 파일을 가져올 경우
이 디렉토리는 파일을 읽고 삭제할 수는 있지만, 새 파일을 만들거나 기존 파일을 수정할 수는 없다
편집을 위해서는 디렉토리 바깥으로 옮겨서 작업을 해야된다.
Library
모든 파일의 최상위 디렉토리
실행시에 필요하지만 사용자에게는 숨겨야 하는 것들을 Library에 저장
ex) 데이터 파일, 구성 파일, 템플릿 및 앱 번들에서 로드된 리소스의 수정된 버전
ex) 데이터 캐시 파일들을 저장할때도 여기 저장해야된다
Library - Application Support
Library - Cache
Library - Preferences
tmp
FileManager
다음의 데이터는 어느 영역에 저장하는 것이 좋을까??
사용자가 작성한 임시 메모
저장 위치 : Documents/
이유 : 기본 메모앱의 임시 메모의 경우 한 글자라도 작성하면 바로 저장되는 것을 볼 수 있다
메모장 앱의 코어데이터 저장소
저장 위치 : application support/
이유 : 지속적으로 관리되고, 유저에 의해서 삭제되지 않아야하며, 백업이 가능해야하므로 application support 이다.
채팅 앱의 대화내역
저장 위치 : application support/
카카오톡의 경우 서버에 메시지가 보존되는 기간이 3일이다.
메시지가 기기를 통해서 들어오면 기기 로컬의 데이터베이스에 저장이 될 것이다
지속적으로 관리되고, 유저의 접근이 닿지 않는 곳, 백업이 되는 곳은 application support 이다
어젯밤 술취해 남겨둔 음성메모
저장 위치 : Documents/
백업이 가능하고, 유저가 저장한 데이터니깐
사진편집을 위해 사진첩에서 가져온 사진
저장 위치 : Documents/inbox/
외부에서 정보를 받아오는 경우 Documents/inbox에 저장된다
https://jinshine.github.io/2019/01/19/iOS/UserDefaults.1/
https://zeddios.tistory.com/435