App Sendbox
Sendbox Structure
- iOS 기기에 앱 설치
- 설치된 앱을 보호
- 앱에서 사용자가 생성한 컨텐츠 보호
- 앱과 앱이 사용하는 공간
- 다른 앱의 샌드 박스 접근 제한
- sendbox 구조
- bundle: 앱 설치 패키지
- Data Container
-
iCloud Container
- Data Container
- Documents
- Library
- Temp(임시 파일)
- iCloud Container
Bundle
- 앱 실행 파일
- 프로젝트 리소스 패키지(폴더 구조)
- 읽기 전용: 앱을 보호하기위해서. 읽기 전용
- 번들 경로 얻기: bundlePath
let bundlePath = Bundle.main.bundlePath
- 번들 내 리소스 경로 얻어 오기: path(forResource: ofType:)
let imagePath =Bundle.main.path(forResource:"image", ofType: "png")!
Data Container
- 데이터 컨테이너 경로 얻기
NSHomeDirectory()
Documents
- 데이터 컨테이너의 하위 폴더
- 읽고 쓰기 용도로 사용
- 사용자가 생산한 컨텐츠 저장
- 경로 얻기: NSSearchPath~ 함수..
let documentPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)[0]
let filePath = "\( documentPath)/image.png"
- 조금 쉬운 방법: Data Container 에서 얻기
let filePath = NSHomeDirectory() + “/Documents/image.png”
Temp(임시 폴더)
- 임시 폴더로 자주 삭제
- 삭제되어도 다시 얻어 올수 있는 데이터 저장
- 폴더 위치 얻기
func NSTemporaryDirectory() -> String!
파일 리로스 다루기
- 파일 다루는 Foundation Class
- 파일 매니저 : FileManager
- 파일존재확인/복사/이동/삭제등
- 파일 핸들러 : FileHandler
-
파일 읽기/ 데이터쓰기/ 수정하기
- 예시
let dataPath = NSHomeDirectory() + “/Documents/DATA”
let fm = FileManager.default
// 도큐먼트 폴더 내 파일 존재 확인
if !fm.fileExists(atPath: dataPath) {
// 파일이 없으면 복사
let originPath = Bundle.main.path(forResource:"data", ofType: “plist”)
try! fm.copyItem(atPath: originPath, toPath: dataPath)
}