(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라는 타입이 정의되어있고 이렇게 만드는거다~ 참고할 수 있어요
간단하게 하나를 만들어볼까요
Book 이라는 레코드 타입을 만들어볼게요
name, price를 추가해줬어요
다음으로
indexes를 해볼거에요
효율적으로 검색할 수 있는 방법을 제공하는거에요
이 indexes가 나중에 데이터를 검색할때 필요한 경우를 다 추가해줘야해요
name으로 정렬해서 보여주고싶다 -> SORTABLE추가
name을 쿼리로 검색하고싶다 -> QUERYABLE추가
이런식으로 추가해줘야
뒤에서 더미데이터를 검색할떄 원활하게 할 수 있어요
더미데이터를 만들어볼게요
Records에 들어가서 +를 눌러서 create new record를 눌러주세요!
그러면 이렇게 데이터를 저장할 수 있게 폼이 떠있어요
저장을하면 이렇게 바뀌구요
이제 저장한 데이터를 찾아봐야겠죠?
이부분에서 쿼리를 입력해서 Query Records버튼을 누르면 적용되요
만약 쿼리를 눌렀는데
이렇게 에러가난다면
쿼리로 price에 정렬을 걸었지만
price는 indexes에서 SORTABLE을 설정해주지않아서 불가능하다고 하는거라 체크해주면되요
저장한 더미데이터가 잘 나오네요!!
https://developer.apple.com/documentation/cloudkit/enabling_cloudkit_in_your_app
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] 테스트코드 Quick, Nimble, Mockingbird (0) | 2022.03.25 |
---|---|
[Swift] iCloud 연동 CloudKit 사용하기(2/2) - 데이터 연결 (0) | 2022.02.16 |
[Swift] Realm 데이터 공유 (Widget과 Main앱 데이터 공유) AppGroup (0) | 2022.02.11 |
[Swift] Xcode13 info.plist 빈화면 설정방법 (1) | 2021.12.20 |
[Swift] WWDC21 Bring accessibility to charts in your app (0) | 2021.12.08 |