# File System - 파일 시스템은 데이터 파일, 앱 및 운영 체제 자체와 연결된 파일의 영구 스토리를 처리합니다. - APFS는 macOS, iOS, watchOS 및 tvOS의 기본 파일 시스템입니다. ### iOS 파일 시스템 정보 - iOS파일 시스템은 자체적으로 실행되는 앱에 맞춰져 있습니다. 시스템을 단순하게 유지하기 위해 iOS 디바이스 사용자는 파일 시스템에 직접 액세스 할 수 없으면 앱은 이 규칙을 따라야 합니다. #### iOS표준 디렉터리: 파일 위치 - 보안안의 이슈로 샌드박스 디렉터리 내에 제한된다. - 샌드박스 안에 번들, 데이터, i클라우드 등등.. - 새로운 앱을 설치하는 동안 설치 관리자는 샌드박스 디렉터리 내에 앱에 대한 여러 컨테이너 디렉터리를 만듭니다. 각 컨테이너 디렉터리에는 특정 역활이 있습니다. - 번들 컨테이너 - 앱의 번들 저장 - 데이터 컨테이너 - 사용자에 대한 데이터 저장 - 앱은 일반적으로 컨테이너 디렉터리 외부에서 액세스 하거나 파일을만드는 것이 금지됨 #### iOS 앱 디렉터리 - 샌드박스 환경: 각 앱은 독립된 파일 시스템을 갖는 샌드박스 환경에서 작동합니다 - 주요 디렉터리: Docunents, Library, tmp 1. Documents 디렉터리 - 사용자가 생성하거나 수정할 수 있는 파일을 저장하는 곳입니다. - ex) 텍스트문서, 이미지 파일 등이 여기에 속합니다. - 이 디렉토리는 iTunes나 iCloud와 동기화될 수 있습니다, 즉 사용자가 만든 중요한 데이터를 저장하는 데 적합합니다. - 사용자가 텍스트 편집 앱에서 작성한 문서 파일을 저장하면 `Documents` 디렉터리에 저장됩니다. 2. Library 디렉터리 - 앱의 설정이나 데이터를 저장하는 곳입니다. - ex) 캐시나 데이터베이스 파일등이 속하게 됩니다. - `Library` 디렉토리는 iTunes나 iCloud와 동기화되지 않습니다, 즉 앱의 내부 작업에 필요한 데이터를 저장하는 데 사용됩니다. - 사용자의 선호도나 사용 이력을 저장하기 위해 사용하는 설정 파일이나 데이터 베이스를 `Library` 디렉토리에 저장합니다. 3. tmp 디렉터리 - 임시적으로 사용되는 파일을 저장하는 곳입니다. - ex) 다운로드 중인 파일이나 작업중인 파일 등이 속하게 된다. - `tmp`디렉터리는 앱이 종료되거나 시스템이 필요하다고 판단하면 비워질 수 있습니다. - 앱이 파일 다운로드를 위해 임시 파일을 생성하고, 다운로드가 완료되면 해당 파일을 `Docunets` || `Libraty` 디렉터리로 이동 시키고 `tmp` 에서는 삭제 합니다. - Swift에서는 `FileManager`클래스를 사용하여 이러한 디렉토리에 접근하고, 파일 관련 작업을 수행할 수 있습니다. 예를 들어, `FileManager` 클래스를 사용하여 `Documents` 디렉토리에 새파일을 생성하거나, 기존 파일을 읽고 수정하는 코드를 작성할 수 있습니다. #### Swift 파일관리 - FileManager 클래스: 파일 및 디렉토리 관리에 사용되는 FileManager 클래스의 기능과 사용법. - 파일 작업: 파일 생성, 읽기, 수정, 삭제 등의 기본 작업 방법. - 코어데이터 처럼 CRUD를 통해서 쓴다. #### 파일 보호 및 접근 제어? - 시스템 권한 요청 처리 - iOS 애플리케이션에서 Info.plist 파일을 통해서 권한을 요청해야 합니다. 사진 라이브러리에 접근하기 위해서는 Info.plist 에 NSPhotoLibraryUsageDescription을 추가해야 합니다. - 사용자 권한 관리 - PHPhotoLibrary.authorizationStatus()를 활용한 사용자 권한 확인 및 요청. - Keychain사용: Keychain 을 활용한 민감한 데이터를 안전하게 저장한다.