iOS 개발일지
0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController) 본문
0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController)
Lia's iOS 2022. 8. 25. 23:31iOS 앱 개발자 데뷔 과정 38회차
#0. Memo
- 파일앱 (UIDocumentPickerViewController) 을 활용한 백업
압축 라이브러리를 활용해 압축 파일을 생성하고, 생성한 파일을 UIActivityController로 전달
백업의 순서는 크게 백업할 파일의 위치 확인 ➡️ 파일 압축 ➡️ 압축한 파일을 저장/UIActivityView 띄우기 의 3단계로 볼 수 있다.
do-catch 를 통해 간단하게 얼럿만 보여주도록 작성했지만, 여러 에러 상황에 대응할 수 있도록 코드를 작성하는 것이 중요하다.
여기까지 구현하고 백업 버튼을 누르면, 아래처럼 해당 경로에 설정한 이름으로 zip 파일이 생성된다.
- 파일앱 (UIDocumentPickerViewController) 을 활용한 복구
백업의 순서는 크게 DocumantPickerView 띄우기 ➡️ 프로토콜 채택 후 기능 구현 의 2단계로 볼 수 있다.
조건문을 통해 해당 경로에 파일이 이미 있는지 확인하고 실행할 코드가 조금 달라지지만 거의 동일하다.
기존의 데이터를 유지하며 복구하는 것은 단순히 덮어씌우는 기능을 구현하는 것보다 10배 정도의 시간이 더 소요된다고 한다.
따라서 지금은 덮어 씌우는 방향으로 구현했고, 사용자가 이를 충분히 인지할 수 있도록 가이드를 해야할 것 같다.
#1. Checklist
- UIDocumentPickerViewController
https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller 참고
앱 샌드박스의 외부에 있는 문서 혹은 목적지에 접근권한을 제공하는 뷰컨트롤러
- 백업/복구 시 고려해야 할 다양한 경우의 수들
사용자의 데이터를 아이폰에 로컬 저장할 경우, 별도 서버에 비용을 지급하며 사용자의 데이터를 유지하지 않아도 된다.
하지만 앱을 삭제하면 사용자의 데이터도 삭제되기 때문에, 사용자가 원할 때 데이터를 외부로 백업할 수 있도록 해야 한다.
데이터베이스 설계와 외부 백업/복구에 대한 다양한 방법이 존재하며 대표적으로 iCloud, Third Party Cloud Sercices (Goole Drive, Dropbox 등), 그리고 파일 앱을 활용한 방법이 있다.
Realm 파일 자체를 백업할 경우, 스키마가 동일하다면 데이터 복구 시 기존 테이블에서 복구 테이블로 교체만 하면 되어 상대적으로 편리하지만, 스키마가 동일하지 않을 경우 (ex. 테이블이나 컬럼명 등이 다르거나 컬럼 갯수 등이 같지 않을 경우) 테이블끼리 충돌이 발생할 수 있기 때문에 사전에 테이블 형태를 명시하고 진행하는 것이 유리하다.
또 Realm이 아닌 다른 데이터베이스를 사용하게 될 경우에는 대응이 어렵다는 문제도 있다.
Realm 파일을 Json 데이터 형식으로 변환해 빅업할 경우, 위의 이슈에 유연하게 대응할 수 있지만, 개발 시간이 늘어날 수 있다.
파일앱 (UIDocumentPickerViewController) 을 활용한 백업/복구는 한꺼번에 정리하면 아래와 같은 순서로 진행된다.
1. 백업 파일 리스트를 압축 파일로 생성
2. 압축 파일을 UIActivityViewController로 전달
- UIActivityViewController에서 일어나는 사용자 경험 (ex. 파일 앱 저장, 이메일 전송 등의 옵션) 에 대해 직접 컨트롤 불가
- 파일 앱을 복구하기 위해 백업 파일을 파일 앱에 저장하기 위한 UX 설계 필요 (가이드 등)
3. UIDocumentPickerViewController Present
- 프로토콜과 딜리게이트 구현 필요, 읽고자 하는 파일의 타입 명시
- import MobileCoreServices 로 타입 가져올 수 있음
- 멀티 셀렉션 설정 가능
4. UIDocumentPickerDelegate 프로토콜 구현
- 파일 앱에서 파일을 선택한 직후에 실행할 기능 구현
- 파일 앱에서 선택한 파일을 앱 도큐먼트 내부에 저장한 후 압축 해제 (실패했을 때의 파일 유실을 방지하기 위해 복사해서 저장)
- 잘못된 파일을 가져온 경우에는 분기 처리 후 사용자에게 안내 필요
# 그 외
- 지연 실행 코드
# 유용한 오픈소스
- UIMenu
Zip : https://github.com/marmelroy/Zip.git
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0828 새싹 8주차 마무리 (0) | 2022.08.28 |
---|---|
0826 새싹 39회차 정리 (0) | 2022.08.26 |
0824 새싹 37회차 정리 (0) | 2022.08.24 |
0823 새싹 36회차 정리 (0) | 2022.08.24 |
0822 새싹 35회차 정리 - Realm (0) | 2022.08.23 |