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)
}

Reference

App Sendbox Design Guide