앱을 개발 하면서 앱의 내부 공간을 이해를 하고 효과적으로 활용을 해야 한다.
나는 배움이 늦어서 그런지 이걸 이해하는데 오래 걸렸다
그래서 나중에 까먹지 말도록 정리를 해본다. ㅎㅎ
(내가 아래 이해한 부분이 틀릴 수 도 있다. 혹시 틀린 부분은 댓글로 남겨주세요.)
documentDirectory
유저들이 다운로드 또는 생성한 파일은 이곳에 위치하는게 좋다.
이 공간에 있는 파일은 기존 기기 백업시에 아이클라우드나 별도의 공간에 앱과 함께 같이 백업된다.
다만 유저들이 생성한 파일만 백업 되도록 해야 하며
다운로드 또는 앱에 넣은 파일을 백업하도록 허용하면 정책 위반으로 심사 거절 될 수 있다.
그리고 info.plist 에서 “Application supports iTunes file sharing” 값을 YES 로 설정하면 iTune 나 Finder 를 통해서 앱에 직접 유저가 파일을 넣을 수 있는데 넣은 파일은 documentDirectory 공간에 위치하게 된다.
이 공간의 파일은 앱이나 OS 업데이트 시에 사라지지 않는다.
applicationSupportDirectory
앱이 저장하고 사용하는 데이터/설정 파일들은 이 공간에 저장해두면 된다.
이 공간은 위에 document 공간과 마찬가지로 기기 백업 시 앱과 같이 백업될 수 있다.
백업을 원하지 않으면 별도로 설정을 해야 한다.
역시나 이 공간의 파일은 앱이나 OS 업데이트 시에 사라지지 않는다.
cachesDirectory
말그대로 캐시 공간이다
다만 임시로 사용하는 파일이지만 금방 사라지지 않았으면 하는 파일을 놓기 좋은 장소다
OS 업데이트 (또는 앱 업데이트) 시에 이 위치에 있는 파일은 임의로 사라질 수도 있고 안 사라질 수도 있다.
내가 한동안 이 공간을 앱의 설정 정보를 저장을 했었는데 가끔 일부 유저들이 앱이나 OS 업데이트를 하면 설정이 초기화 된다는 문의가 와서 이해를 할 수 있었다.
이 공간은 백업이 되지 않는다.
temporaryDirectory
여기도 캐시 공간이다.
여기에 있는 파일은 정말 수시로 사라질 수 있기 때문에 잠깐 두는 파일만 사용해야 한다.
예를 들어 파일을 다운로드 받았을 때 이공간에 다운로드 하고 다른 위치로 복사를 해주는 형태로 활용하자.
App Groups 공간
App Groups 를 여러 앱에서 공통으로 사용하게 되면 활용하는 공간이다.
FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: shareGroupID!)
위 방법으로 위치를 가져올 수 있다.
위 공간이 내가 앱을 개발하면서 활용하게 된 공간들이다.
한가지 팁은 가끔 유저들이 기기 설정의 저장공간에서 앱의 파일을 삭제했는데도 저장공간이 남아 있다는 이슈를 메일이나 리뷰로 보내는 경우가 있는데
앱에서 주기적으로 위 공간에서 불필요한 파일들은 삭제를 해주는 것이 도움이 된다.