본문 바로가기
보안 및 개발/MOBILE

[iOS] 파일시스템 구조

by CH@3M 2019. 10. 7.

Bundle Container — 앱의 번들을 담는다.

Data Container — 앱과 유저의 데이터를 담는다. 이 데이터 컨테이너는 다시 서브 디렉토리로 나뉘어져 많은 데이터들을 나눠 관리한다.

iCloud Container — 실행 시에 iCloud와 관련된 것을 담는다.

AppName.app

앱의 Bundle(번들)파일이다. 이 디렉토리에 쓸 수 없으며 읽기만 가능하다. 변조를 막기 위해 설치 시 CodeSignature 를 넣는다. 이 디렉토리는 iTunes나 iCloud에 백업되지 않는다.

 

Documents

Data Container의 서브 디렉토리로 유저가 앱을 통해 생성한 문서나 데이터, 또는 외부 앱에서 받은 파일을 저장한다. 유저에게 노출되는 파일만 저장해야 하며 디렉토리의 파일들은 iTunes와 iCloud로 백업이 된다.

이 디렉토리의 파일들은 iTunes을 통해 옮길 수 있는 File Sharing(파일 공유)을 지원하는 데, 이것은 Info.plist의 UIFileSharingEnabled 키를 YES(true) 로 하면 사용이 가능하다.

LSSupportsOpeningDocumentsInPlace 키를 YES로 하면 파일의 원본을 열 수 있다. 이 키와 UIFileSharingEnabled 키를 둘 다 YES로 할 경우에는 Documents 디렉토리의 모든 파일에 접근이 가능해 Files 앱에서 확인 및 수정이 가능하다.

 

Library

유저 데이터가 아닌 파일들이 저장되는 가장 최상단 디렉토리로 Application Support  Caches 서브 디렉토리를 주로 사용한다.

유저에게 노출되고 싶지 않은 파일들을 서브 디렉토리에 저장하면 되며 Caches를 제외한 디렉토리들은 iTunes와 iCloud에 백업이 된다.

Library의 주요한 서브 디렉토리에는 다음과 같은 것들이 있다.

Application Support: 사용자의 documents를 제외한 나머지 앱의 데이터 파일들을 저장하는데 사용한다. 앱이 생성하고 관리하는 데이터, 설정, 리소스 등이 저장되며 이 디렉토리의 모든 컨텐트들은 앱의 bundle identifier 나 회사 이름의 서브 디렉토리에 위치한다. iTunes와 iCloud에 백업이 가능하다.

 

Caches

앱이 쉽게 재생성 할 수 있는 파일, 쉽게 다운로드 받을 수 있는 파일들이 저장된다. 앱의 성능을 위한 목적으로 존재하며 캐시로는 데이터 베이스 파일이나 다운로드 파일 등이 고려된다. 앱이 실행 중에는 삭제되지 않는 것이 보장되며 백업은 되지 않는다. Caches/Snapshots 디렉토리에는 앱이 백그라운드로 넘어갈 때 저장되는 앱의 스냅샷이 저장된다.

 

Preferences

앱의 중요 설정이 담겨 있는 디렉토리로 NSUserDefaults 클래스를 사용해 파일을 만들어 저장할 수 있다. 이 유저디폴트 파일은 iTunes와 iCloud에 저장이 된다.

 

tmp

다음 앱을 실행하는 데 필요가 없는 말그대로 임시 파일들을 담는다. 백업은 되지 않으며 시스템은 앱이 실행중이지 않을 때 이 디렉토리를 비운다.

 

 

클래스 메소드와 인스턴스 메소드 차이

 

클래스 메소드는 인스턴스 생성을 하지 않고 클래스명을 그대로 사용해서 메소드를 호출하고

인스턴스 메소드는 반드시 인스턴스 생성을 해서 그 주소값(메모리의 Heap 영역)을 가지고 있는 변수를 통해 메소드에 접근해야 한다.

 

메세지 형태

Did 메세지

- did메세지는 확실히 결정된 것을 알려주고 사용자의 의사와는 상과없이 이벤트를 발생시킴

 

Will 메세지

 

application(_:didFinishLaunching:) - 앱이 처음 시작될 때 실행

applicationWillResignActive: - 앱이 active 에서 inactive로 이동될 때 실행

applicationDidEnterBackground: - 앱이 background 상태일 때 실행

applicationWillEnterForeground: - 앱이 background에서 foreground로 이동 될때 실행 (아직 foreground에서 실행중이진 않음)

applicationDidBecomeActive: - 앱이 active상태가 되어 실행 중일 때

applicationWillTerminate: - 앱이 종료될 때 실행

 

 

 

반응형