iyOmSd/Title: Swift

[Swift] iCloud 연동 CloudKit 사용하기(1/2) - 추가 및 설정

냄수 2022. 2. 15. 18:19
반응형

 (1애플 제품을 써본 사람이라면 iCloud의 강력함을 알고 있으실텐데요!

그 iCloud연동을 개발해보려고해요

 

CloudKit 프레임워크는 앱과 iCloud 컨테이너간에 데이터를 이동 할 수 있는 인터페이스를 제공합니다

CloudKit을 사용하여 앱의 기존 데이터를 클라우드에 저장하면 사용자가 여러장치에서 액세스 할 수 있습니다.

 

iCloud 컨테이너라는 특수한 파일 시스템 위치에 데이터를 저장해요

 

 

 

우선 처음으로

프로젝트 >> signing & Capabilities >> iCloud를 아래와 같이 추가해주세요

옵션이 뭐가 되게 많네요

옵션들에 대해서 하나씩 느낌을 보자면

 

key value

NSUserDefaults처럼 사용한다고해요

사용자당 maximum 1MB사이즈의 공간을 사용가능하다고하네요

지정가능한 키의수는 1024개이고 

키와 연결된 값의 크기는 1MB로 제한되어있어요

각 키에대해 1KB데이터를 저장하는경우 1000개의 key-value쌍을 사용할 수 있어요

 

 

 

iCloud Documents

 

이 옵션을 선택하면

앱의 문서를 모든 사용자의 기기에서 사용할 수 있다고해요

Mac의 아이클라우드 폴더에서 보는것과

아이폰에서 파일앱을 통해 아이클라우드 폴더를 보는 그런 느낌이겠네요

문서는 로컬 변경사항이 iCloud에서 발생한 변경사항과 안전하게 조정되도록 자동으로 보장한다고해요

OS X v10.8이상에서는 문서가 자동으로 열기,저장,이름변경 UI 및 기능을 제공하는데

iOS에서는 앱이 이러한 기능을 구현해야 한다고해요

iCloud문서로 작업할 때 NSFileCoordinator객체 및 NSFilePresenter프로토콜을 사용은 필수라고해요

 

엄청 다룰 얘기가 많지만 이번엔 이작업을 하지않기때문에 넘어가고...

 

 

CloudKit

공유할 수 있는 데이터베이스의 레코드로 데이터를 저장할 수 있는 방법을 제공해요

Record Type은 서로 다른 유형의 정보를 저장하는 record를 구별하는데 사용되요

각 레코드는 key-value쌍의 딕셔너리 구조이고, 각 키는 레코드의 한 필드를 나타내요

필드로는 String, number, date같이 단순한 타입 또는 보다 location, reference, asset같이 복잡한 타입이 포함될 수 있어요

CloudeKit 스키마를 사용하여 앱의 모든 영구 모델 객체를 나타낼 수 있어요

하지만, CloudKit프레임워크는 앱의 모델객체를 대체하는데 사용하면 안되고,

객체를 로컬로 저장하는데 사용해서는 안된다고하네요

아이클라우드간 데이터 이동 및 앱 사용자간 데이터 공유를 위한 서비스이기 때문이에요

 

대부분 CloudKit작업은 비동기적으로 수행되며 결과를 처리하기위해 completion handler를 제공해야해요

모든 작업은 네트워크에 연결된 사용자에 의존하므로 발생할 수 있는 오류를 처리할 준비가 되어있어야해요

CloudKit의 기본 워크플로우는 다음과 같아요

 

1. 앱을 시작하고 처음에 사용자에게 데이터를 제공하는데 필요한 레코드를 가져옵니다.

2. 사용자의 작업 또는 기본 설정에 따라 쿼리를 수행

3. 개인 또는 공용 데이터베이스에 변경사항을 저장

4. 여러 저장 및 가져오기 작업을 단일 작업으로 일괄처리

5. 관심 레코드가 변경될 때 푸시알림을 받을 구독을 만듬

6. 앱이 레코드에 대한 변경사항을 수신하면 객체모델 및 보기를 업데이트

7. 비동기 작업을 실행할 때 발생할 수 있는 오류를 처리

 

그렇다고하네요...

문서가 읽을게 많아요 @_@

 

직접 보면서 이해하는게 더 쉬울 수도 있겠어요

 

지금필요한건

CloudKit! 이고

체크박스를 클릭해주세요!

Push Notifications도 같이 추가되는 걸 볼 수 있어요

워크플로우쪽에서 말했듯 푸시알림을 받을 구독을 만들기 때문인것 같네요

 

+를 눌러서 컨테이너를 생성해주고

 

먼저 Apple Developer사이트에서 App ID등록을 해줘야해요

애플 맴버십등록이 필요해요!! (12만..9천원...ㅠ)

 

밑에 Capabilities에 iCloud체크해주시구요

Bundle아이디 같게써주고

네 등록 이게끝이에요 간단하죠 

 

이 등록을 해줘야

iCloud데이터 베이스를 아래의 콘솔에서 볼 수 있어요

 

 

밑에 CloudKit Console버튼을 누르고 클라우드 관리 홈페이지로 ㄱㄱㄱ

 

등록이 잘 되었다면

이런 창을 볼 수 있어요

 

Schema탭에

Record Types로가서 사용할 타입을 정의할 수 있어요

기본으로 User라는 타입이 정의되어있고 이렇게 만드는거다~ 참고할 수 있어요

name은 제가 슬쩍 만들어본거에요...

 

간단하게 하나를 만들어볼까요

Book 이라는 레코드 타입을 만들어볼게요

name, price를 추가해줬어요

 

다음으로

indexes를 해볼거에요

효율적으로 검색할 수 있는 방법을 제공하는거에요

이 indexes가 나중에 데이터를 검색할때 필요한 경우를 다 추가해줘야해요

name으로 정렬해서 보여주고싶다 -> SORTABLE추가

name을 쿼리로 검색하고싶다 -> QUERYABLE추가

이런식으로 추가해줘야

뒤에서 더미데이터를 검색할떄 원활하게 할 수 있어요

 

 

더미데이터를 만들어볼게요

Records에 들어가서 +를 눌러서 create new record를 눌러주세요!

그러면 이렇게 데이터를 저장할 수 있게 폼이 떠있어요

 

저장을하면 이렇게 바뀌구요

이제 저장한 데이터를 찾아봐야겠죠?

이부분에서 쿼리를 입력해서 Query Records버튼을 누르면 적용되요

 

만약 쿼리를 눌렀는데

이렇게 에러가난다면

쿼리로 price에 정렬을 걸었지만

price는 indexes에서 SORTABLE을 설정해주지않아서 불가능하다고 하는거라 체크해주면되요

 

저장한 더미데이터가 잘 나오네요!!

 

 

 

 

 

 

https://developer.apple.com/library/archive/documentation/General/Conceptual/iCloudDesignGuide/DesigningforCloudKit/DesigningforCloudKit.html#//apple_ref/doc/uid/TP40012094-CH9-SW1

 

Designing for CloudKit

Designing for CloudKit CloudKit provides a way to store data as records in a database that users of your app can share. Record types are used to differentiate between records storing different types of information. Each record is a dictionary of key-value

developer.apple.com

https://developer.apple.com/documentation/cloudkit/enabling_cloudkit_in_your_app

 

Apple Developer Documentation

 

developer.apple.com

 

반응형