티스토리 뷰
File System Programming Guide를 공부해봅시댜.
도큐먼트는 여기를 참고 할거에요.
File System Programming Guide
파일시스템은 데이터 파일, App 및 OS와 관련된 영구 저장소를 처리합니다. 따라서 파일 시스템은 모든 프로세스에서 사용되는 기본 리소스 중 하나입니다.
APFS는 mac OS, iOS, watchOS 및 tvOS의 기본 파일 시스템입니다. (APFS을 잘 모르신다면 <>글을 참고해주세요 XD)
기본 디렉토리 구조는 iOS와 macOS에서 비슷하지만 각 시스템이 앱과 사용자 데이터를 구성하는 방식에는 차이가 있습니다.
파일 시스템과 상호 작용하는 코드를 작성하기 전에, 먼저 파일 시스템의 구성과 코드에 적용되는 규칙에 대해 약간 이해해야 합니다.
적절한 보안 권한이 없는 디렉토리에 파일을 쓸 수 없다는 기본 교의(tenet)외에, App도 좋은 시민이 되고 적절한 장소에 파일을 넣어야 합니다.
파일을 저장하는 위치는 플랫폼에 따라 다르지만 중요한 목표는 사용자의 파일을 쉽게 검색 할 수 있도록 하고, 코드에서 내부적으로 사용하는 파일이 사용자의 방해를 받지 않도록 하는 것입니다.
중요한 부분은 마지막줄이죠? 일단 중요한건, 그니까 우리가 이 File System Programming Guide를 공부하는건 어케어케 파일을 잘 사용하고 보안적으로 잘 사용하자 이거죠.
● About the iOS File System(iOS에서의 File System에 관해)
자. 위 그림이 App의 Sandbox 디렉토리를 보여주는 그림입니다. (App 디렉토리를 다운 받는 방법은 < 내 App의 데이터 보기 >글을 참고해주세요.)
App은 일반적으로 컨테이너 디렉토리 외부에서 파일에 접근하거나 만들 수 없습니다. (=외부에서 앱 내의 디렉토리에 접근하거나 파일을 만들 수 없다)
이 규칙의 한가지 예외는 앱이 Public 시스템 인터페이스를 사용하여 사용자의 연락처나 음악과 같은 항목에 접근하는 경우입니다.
이 Sandbox디렉토리 안에 있는 하위 디렉토리를 몇가지 알려드릴게요.
● AppName.app
: 이건 App의 Bundle이에요. 이 디렉토리(.app이 왜 디렉토리야..?라는 궁금증이 드실 수 있겠지만..디렉토리입니다. 지금부터 말할거는 다 App Sandbox내에 있는 디렉토리를 말씀드릴거게요.) 암튼 이 디렉토리는 앱과 모든 리소스를 포함합니다. 이 디렉토리에는 write를 할 수 없습니다. 변조를 방지하기 위해 Bundle 디렉토리는 App 설치시 서명됩니다. 이 디렉토리에 write를 하게 되면, 서명이 변경되고, App이 launch되지 않습니다. 그러나 App Bundle에 저장된 모든 리소스에 대한 읽기 전용 접근 권한은 얻을 수 있습니다.
이 디렉토리의 내용은 iTunse또는 iCloud에 의해 백업되지 않습니다. 그러나 iTunes는 App Store에서 구입 한 모든 응용 프로그램의 초기 동기화를 수행합니다.
● Documents/ : 이 디렉토리를 사용하여 사용자 생성 Contents를 저장하세요. 이 디렉토리의 내용은 파일 공유를 통해 사용자가 사용 할 수 있습니다. 따라서 이 디렉토리에는 사용자에게 공개 할 수 있는 파일만 포함되어야 합니다. 이 디렉토리의 내용은 iTunes 및 iCloud에 의해 백업됩니다.
Where You Should Put Your App’s Files(앱의 파일을 어디에 두어야 하는지)
● Documents / 와 Application Support / 디렉토리의 파일은 기본적으로 백업된다는 점을 기억하세요. NSURLIsExcludedFromBackupKey를 사용하여 백업에서 파일을 제외할 수 있습니다. (문서에는 Objc소스만..있네요.. )
var resourceValues:URLResourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
do{
try fileUrl.setResourceValues(resourceValues)
}
여기서 fileUrl은 백업에서 제외시키고 싶은 파일의 URL입니다. 백업에서제외하겠니?니까 true면 백업에서 제외하겠다는 소리입니다.
아무튼 계속해서..
다시 만들거나 다운로드 할 수 있는 파일은 백업에서 제외해야합니다. 이는 대용량 미디어 파일에 특히 중요합니다. App에서 비디오 또는 오디오 파일을 다운로드 하는 경우, 해당 파일이 백업에 포함되어 있지 않은지 확인하세요.
● 임시 데이터를 tmp/ 디렉토리에 저장하세요. 임시 데이터는 오랜 기간동안 유지 할 필요가 없는 모든 데이터로 구성됩니다. 사용자의 디바이스에서 공간을 계속 소비하지 않도록 파일을 삭제해야합니다. 앱이 실행되고 있지 않을 때, 시스템에서 주기적으로 파일을 삭제합니다.
● Library / Caches / 디렉토리에 데이터 캐시 파일을 저장합니다. 캐시 데이터는 임시 데이터보다 오래 지속되어야 하지만, Support파일이 아닌 모든 데이터에 사용될 수 있습니다. 일반적으로 App은 캐시 데이터가 제대로 작동하는 것을 요구하지 않지만, 캐시 데이터를 사용하여 성능을 향상시킬 수 있습니다. 캐시 데이터의 예로는 DB 캐시 파일과 일시적으로 다운로드 할 수 있는 Contents가 있습니다. 시스템에서 Caches/디렉토리를 삭제하여 디스크 공간을 비울 수 있으므로, 앱이 필요에 따라 이러한 파일을 다시 만들거나, 다운로드 할 수 있어야 합니다.
(막 어떤 앱 보면 캐쉬삭제라 되어있고, 몇메가 쌓였다고 보여주잖아요? 그게 이 디렉토리에 있는 파일을 말하는 것 같아요)
Mac OS파일 시스템은 건너뛰겠습니다.
The iCloud File Storage Container
내 App의 Sandbox안에 iCloud 저장소가 따로 있습니다.
이 iCloud 컨테이너에 대해서 자세하게 알아봅시다.
iCloud는 iCloud를 사용하는 App의 파일을 저장하기 위한 구조화 된 시스템을 제공합니다.
App에는 기본 파일을 저장하기 위한 기본 iCloud 컨테이너 디렉토리가 있습니다. 또한 app entitlements에 나열된 보조 iCloud 컨테이너 디렉토리에 접근 할 수 있습니다.
각 컨테이너 디렉토리 안에는 파일이 "documents"와 data로 분리되어있습니다. Documents의 하위 디렉토리(또는 하위 디렉토리 중 하나)에 있는 모든 파일 또는 파일 패키지는 개별적으로 삭제할 수 있는 별도의 문서로 사용자에게 전달됩니다.
사용자가 App의 사용자 인터페이스(UI)에서 만들고 볼 수 있는 문서(예 : Pages, Numbers 및 Keynote의 문서 브라우저)는 Documents디렉토리에 저장해야합니다.
앱이 사용자가 직접 보거나 수정하기를 원하지 않는 항목은 모두 Documents디렉토리 외부에 배치해야합니다. 앱은 컨테이너 디렉토리에 하위 디렉토리를 만들 수 있으므로 원하는대로 비공개 파일을 정렬 할 수 있습니다.
앱은 로컬 파일 및 디렉토리를 만드는 것과 똑같은 방식으로 iCloud 컨테이너 디렉토리에 파일 및 디렉토리를 만듭니다. 모든 파일의 속성이 저장됩니다. 확장 된 속성을 파일에 추가하면, 해당 속성이 iCloud 및 사용자의 다른 기기에도 복사됩니다.
iCloud 컨테이너를 사용하면 문서 형식을 만들지 않고도 쉽게 접근 할 수 있는 Key-Value쌍을 저장할 수 있습니다.
How the System Identifies the Type of Content in a File(시스템이 파일이 내용 타입을 식별하는 방법)
Uniform Type Identifiers (UTIs)
Filename extensions
주어진 파일에 대해 시스템이 UTI를 결정하는 한 가지 방법은 파일 이름 확장명을 보는 것입니다. 파일 이름 확장자는 파일의 끝에 추가되고 주 파일 이름과 마침표로 구분된 문자열입니다. 고유 한 각 문자열은 특정 타입의 파일을 식별합니다. 예를들어, .strings확장자는 localize할 수 있는 문자열 데이터가 있는 리소스를 파일을 식별하고, .png확장자는 휴대용 네트워크 그래픽 형식의 이미지 데이터가 있는 파일을 식별합니다.
Security: Protect the Files You Create
Sandboxes Limit the Spread of Damage(Sandbox가 피해확산을 제한합니다.)
Permissions and Access Control Lists Govern All Access to Files
Accessing Files and Directories
Choose the Right Way to Access Files
Specifying the Path to a File or Directory
/Users/steve/Documents/MyFile.txt
'공부' 카테고리의 다른 글
[Clean Code] 5 : 형식 맞추기 (0) | 2018.03.16 |
---|---|
함수객체? 모나드? map??? (0) | 2018.03.06 |
Apple의 파일시스템. HFS+와 APFS (0) | 2018.02.23 |
[Clean Code] 4 : 주석 (0) | 2018.02.17 |
Accessibility(접근성)이란? (0) | 2018.02.16 |
- ios 13
- WidgetKit
- swift array
- swift tutorial
- SwiftUI
- 제이슨 파싱
- github
- fastlane
- Xcode
- swift 공부
- IOS
- swift3
- 스위프트 문법
- np-hard
- Swift
- np-complete
- UIBezierPath
- 스위프트
- 회고
- Combine
- swift delegate
- Git
- FLUTTER
- WWDC
- iOS delegate
- Accessibility
- WKWebView
- actor
- 피아노
- swift sort
- Total
- Today
- Yesterday