iOS File System

Sandboxed App

iOS 앱은 샌드 박스에 의해 제한되므로 앱은 일반적으로 해당 앱에서 만든 파일에만 접근할 수 있습니다.

(앱은 주소록 데이터 및 사진과 같은 특정 다른 파일에 접근할 수 있지만 해당 용도로 특별히 설계된 API를 통해서만 가능합니다.)

또한 iOS 기기에서 파일 보호가 활성화 된 경우 앱은 기기가 잠겨있을 때 특정 파일에 대한 접근을 차단하도록 선택할 수 있습니다

보안상의 이유로 iOS 앱과 파일 시스템의 상호 작용은 앱의 샌드박스 디렉토리 내에 있는 디렉토리로 제한됩니다.

새 앱을 설치하는 동안 설치 프로그램은 샌드박스 디렉토리 내에 앱에 대한 여러 컨테이너 디렉토리를 만듭니다.

각 컨테이너 디렉토리에는 특정 역할이 있습니다.

번들 컨테이너 디렉토리는 앱의 번들을 보유하고 데이터 컨테이너 디렉토리는 앱과 사용자 모두에 대한 데이터를 보유합니다.

데이터 컨테이너 디렉토리는 앱이 데이터를 정렬하고 구성하는 데 사용할 수 있는 여러 하위 디렉토리로 더 나뉩니다.

또한 앱은 런타임에 추가 컨테이너 디렉토리(예: iCloud 컨테이너)에 대한 접근을 요청할 수 있습니다.

 

공용 시스템 인터페이스를 사용하여 사용자의 연락처 또는 음악과 같은 항목에 접근하는 경우를 제외하고

일반적으로 앱은 컨테이너 디렉토리 외부의 파일에 접근하거나 파일을 만드는 것이 금지됩니다.

 

iOS 앱에서 일반적으로 사용되는 디렉토리

AppName.app

- 앱의 번들입니다. 이 디렉토리에는 앱과 모든 리소스가 포함되어 있습니다.

이 디렉토리는 쓸 수 없으며, 변조를 방지하기 위해 번들 디렉토리는 설치시 서명됩니다.

그러나 앱 번들에 저장된 모든 리소스에 대한 읽기 전용 접근 권한을 얻을 수 있습니다.

 

Documents/

- 이 디렉토리를 사용하여 사용자 생성 콘텐츠를 저장합니다.

이 디렉토리의 내용은 파일 공유를 통해 사용자에게 제공될 수 있습니다. 

따라서 이 디렉토리에는 사용자에게 노출할 수 있는 파일만 포함되어야 합니다.

 

Documents/Inbox

- 이 디렉토리를 사용하여 앱이 외부 엔티티에서 열도록 요청한 파일에 접근합니다.

특히 Mail 프로그램은 앱과 관련된 이메일 첨부 파일을 이 디렉토리에 저장합니다.

Document interaction 컨트롤러는 파일을 저장할 수도 있습니다.

앱은 이 디렉토리의 파일을 읽고 삭제할 수 있지만 새 파일을 만들거나 기존 파일에 쓸 수는 없습니다.

사용자가 이 디렉토리에서 파일을 편집하려고 하면 변경하기 전에 앱에서 해당 파일을 디렉토리 밖으로 자동으로 이동해야 합니다.

 

Library/

- 사용자 데이터 파일이 아닌 모든 파일의 최상위 디렉토리입니다.

일반적으로 여러 표준 하위 디렉토리 중 하나에 파일을 넣습니다.

iOS 앱은 일반적으로 Application Support 및 Caches 하위 디렉토리를 사용하지만 사용자 정의 하위 디렉토리를 만들 수 있습니다.

 

tmp/

이 디렉토리를 사용하여 앱 실행 사이에 지속될 필요가 없는 임시 파일을 작성합니다.

- 앱은 더 이상 필요하지 않은 파일을 이 디렉토리에서 제거해야 합니다.

앱이 실행되고 있지 않을 때 시스템에서 이 디렉토리를 제거할 수 있습니다.

이 디렉토리의 내용은 iTunes 또는 iCloud에 의해 백업되지 않습니다.

 

'iOS' 카테고리의 다른 글

[SwiftUI] Carousel View 만들기  (6) 2022.09.08
NSCache와 Purgeable Memory  (0) 2021.04.02
OptionSet을 준수하는 커스텀 타입 작성하기  (0) 2021.04.01
Render loop 정리 (작성중)  (0) 2021.03.28
CustomStringConvertible  (0) 2021.03.27

댓글