개념: iOS에서 각 애플리케이션이 독립된 환경에서 실행되도록 하는 보안 메커니즘.
목적: 애플리케이션 간의 격리를 통해 시스템의 안정성과 보안을 유지하고, 악성 코드가 시스템이나 다른 애플리케이션에 영향을 미치는 것을 방지.
- 애플리케이션은 자신의 전용 디렉토리에서만 파일을 읽고 쓸 수 있음
- 다른 애플리케이션의 데이터나 시스템 파일에 직접 접근할 수 없음
폴더 구조
Documents
- 사용자 생성 콘텐츠 저장
- iTunes를 통해 백업
- ex) 텍스트 파일, 이미지 파일, 사용자 생성 데이터
Library
- Application Support: 앱이 생성하고 사용하는 파일을 저장
- Caches: 캐시 파일을 저장하며, 시스템이 필요 시 삭제
- Preferences: 사용자 설정과 앱의 환경설정 파일을 저장
tmp
- 일시적인 데이터를 저장
- 시스템 재부팅 시나 애플리케이션이 종료될 때 삭제될 수 있음
- ex) 다운로드 중간 파일, 임시 데이터
Sandbox의 디렉토리 접근 예제
// Documents 디렉토리 경로
if let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
print("Documents Directory: \(documentsDirectory)")
}
// Library 디렉토리 경로
if let libraryDirectory = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first {
print("Library Directory: \(libraryDirectory)")
}
// Caches 디렉토리 경로
if let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first {
print("Caches Directory: \(cachesDirectory)")
}
// Temporary 디렉토리 경로
let temporaryDirectory = FileManager.default.temporaryDirectory
print("Temporary Directory: \(temporaryDirectory)")
SandBox 내에서의 데이터 공유
App Group
동일한 개발자가 만든 애플리케이션들 간에 데이터를 공유하기 위한 방법
- Xcode에서 프로젝트 설정의 “Capabilities” 탭에서 “App Groups”를 활성화합니다.
- 공유할 App Group ID를 설정합니다.
- 코드에서 공유 디렉토리에 접근
URL Scheme
- URL Scheme을 사용하여 애플리케이션 간에 데이터를 주고받을 수 있습니다.
UIPasteboard
- 클립보드를 사용하여 데이터를 복사하고 붙여넣기할 수 있습니다.
iCloud
- 동일한 Apple ID로 로그인된 기기 간에 데이터를 동기화하여 공유할 수 있습니다