2012년 5월 7일 월요일

iOS 앱 디렉토리 이야기

iOS앱은 데이터를 기록하거나 읽기 위한 몇 가지 디렉토리를 가지고 있다. 다들 알겠지만 이 디렉토리들은 샌드박스로써 해당 앱에서만 접근이 가능하다. 이 글에서는 이 디렉토리의 용도를 간략히 적어본다.

참고로, 이 글에서 디렉토리 이름에 AppHome 이라는 이름은 그냥 앱 디렉토리를 의미한다. 각 앱이 아이폰이나 아이팟, 아이패드 등에 설치된 디렉토리를 의미한다. 무시해도 된다는 의미이다.


AppHome/Documents

Documents 디렉토리는 사용자 데이터를 기록하기 위한 용도로써, 주로 사용자의 의도로 앱이 사용하는 컨텐츠를 저장하는 곳이다. 의미가 좀 난감하긴 하지만, 임시 파일을 제외하고 대부분은 이 디렉토리에 데이터를 저장하고 읽으면 된다는 의미이다.

물론 서브 디렉토리를 가질 수 있다.

이 디렉토리는 iTunes에 의해 백업되는 디렉토리이기도 하다. 그리고 iTunes로 해당 앱에 파일을 집어넣는 곳이기도 하다.

도큐먼트 디렉토리 경로를 알기 위해서는 다음 코드를 이용한다.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
    NSLog(@"Documents directory: %@", [paths objectAtIndex:0] );
}
특별한 경우가 아니라면 위에서 구한 paths는 1개의 아이템 만이 들어있을 것이다.

참고) 애플에서 이 디렉토리의 과도한 사용에 대해 제재한다는 이야기가 얼마전 있었다. 정확한 기준을 모르겠지만, 적어도 캐쉬는 Documents에 기록하지 말자.

AppHome/tmp

tmp라는 이름은 Temporary의 약자이다. 유닉스나 리눅스를 사용해 본 분들이라면 눈치채기 쉬운 디렉토리이다. 용도도 비슷하다. 앱이 실행 중 사용하는 임시 파일들을 저장하기 위한 용도이다. 임시로 저장할 캐쉬용도로도 딱인 듯 하다. (다만 iOS SDK가 직접 캐싱하는 파일은 여기에는 저장되지 않는다)

임시 파일이니 만큼 앱에서 기록했던 파일들은 가급적 앱에서 직접 지워주는 것이 좋다. iOS가 자체적으로 tmp의 내용을 지우기도 하는데 언제 지워질 지는 알 수 없다.

물론 이 디렉토리는 iTunes에서 백업하지 않는다.

AppHome/Library

이 디렉토리는 사용자 데이터와는 무관한 컨텐츠를 넣는 곳이다. 앱 초기 설정이라던가 앱이 시작될 때 읽을 데이터라던가 등등을 저장하기 위한 용도이다.

캐쉬를 사용한다면 여기 내부에 Caches라는 것도 저장된다.

이 디렉토리도 iTunes로 백업된다. 하지만 Library 아래의 Caches 디렉토리는 백업되지 않는다.

댓글 없음 :