Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

iOS 개발일지

0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController) 본문

SeSAC iOS 데뷔과정 2기

0825 새싹 38회차 정리 - 백업/복구 (feat. UIDocumentPickerViewController)

Lia's iOS 2022. 8. 25. 23:31
iOS 앱 개발자 데뷔 과정 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