다음을 통해 공유


CloudKit 네임스페이스

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

클래스

CKAcceptSharesOperation

공유 레코드를 허용하는 작업을 구현합니다.

CKAsset

개체와 연결된 큰 파일입니다 CKRecord .

CKContainer

공유 및 사용자별 개인 데이터를 포함하여 앱과 연결된 콘텐츠를 캡슐화합니다.

CKContainer.Notifications

클래스에서 게시한 알림입니다 CKContainer .

CKDatabase

CKContainer의 데이터를 포함합니다. 퍼블릭 CKDatabase 은 공유 데이터를 제공하고 프라이빗 db는 현재 사용자의 데이터를 보유합니다.

CKDatabaseNotification

데이터베이스 활동에 대한 알림입니다.

CKDatabaseOperation

에 대한 작업에 대한 추상 클래스입니다 CKDatabase.

CKDatabaseSubscription

데이터베이스 구독.

CKDiscoverAllContactsOperation

CKOperation 앱 사용자의 검색 가능한 모든 연락처의 ID를 검색하는 입니다.

CKDiscoverAllUserIdentitiesOperation

시스템의 주소록에서 검색 가능한 모든 사용자를 가져오는 작업입니다.

CKDiscoveredUserInfo

사용자에 대한 정보입니다. 에서 반환됩니다 CKDiscoverAllContactsOperation.

CKDiscoverUserIdentitiesOperation

기준과 일치하는 사용자를 찾는 작업입니다.

CKDiscoverUserInfosOperation

CKOperation 이메일 주소 또는 레코드 ID가 앱 개발자에게 이미 알려진 검색 가능한 사용자의 ID를 검색하는 입니다.

CKErrorCodeExtensions

CloudKit.CKErrorCode 열거형에 대한 확장 메서드입니다.

CKErrorFields

CloudKit에서 사용하는 오류 상수를 보유합니다.

CKFetchDatabaseChangesOperation

데이터베이스 변경 내용을 가져오는 작업입니다.

CKFetchNotificationChangesOperation

CKOperation ret.. /.. /summary_set.sh CKFetchNotificationChangesOperation A

CKFetchRecordChangesOperation

CKDatabaseOperation 변경되거나 삭제 CKRecord 된 개체에 대한 데이터를 검색하는 입니다.

CKFetchRecordsOperation

CKDatabaseOperation 특정 CKRecord 개체를 검색하는 입니다.

CKFetchRecordZoneChangesConfiguration

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchRecordZoneChangesOperation

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchRecordZoneChangesOptions

레코드 영역 변경 내용을 가져오는 방법을 제어하는 옵션이 포함되어 있습니다.

CKFetchRecordZonesOperation

CKDatabaseOperation iCloud에서 개체를 검색하는 CKRecordZone 입니다.

CKFetchShareMetadataOperation

여러 공유에 대한 공유 메타데이터를 가져오는 작업입니다.

CKFetchShareParticipantsOperation

공유 레코드에 대한 공유 참가자를 가져오는 작업입니다.

CKFetchSubscriptionsOperation

CKDatabaseOperation iCloud에서 개체를 검색하는 CKSubscription 입니다.

CKFetchWebAuthTokenOperation

CloudKit 대시보드에서 지정된 API 토큰에 대한 웹 인증 토큰을 반환하는 작업입니다.

CKLocationSortDescriptor

지정된 위치에서의 거리에 따라 레코드를 정렬합니다.

CKMarkNotificationsReadOperation

푸시 알림을 읽은 것으로 표시합니다. 일반적으로 푸시 알림을 사용하여 레코드 변경 내용을 추적하는 앱에서 사용됩니다.

CKModifyBadgeOperation

CKOperation 현재 디바이스 또는 모든 사용자의 디바이스에서 앱 아이콘의 배지를 수정하는 입니다.

CKModifyRecordsOperation

CKDatabaseOperation 하나 이상의 CKRecord 개체에 대한 변경 내용을 커밋하는 입니다.

CKModifyRecordZonesOperation

CKDatabaseOperation 레코드 영역에 변경 내용을 커밋하는 입니다.

CKModifySubscriptionsOperation

CKDatabaseOperation 하나 이상의 CKSubscription 개체에 대한 변경 내용을 커밋하는 입니다.

CKNotification

앱으로 전송된 푸시 알림입니다.

CKNotificationID

컨테이너에서 보낸 푸시 알림을 고유하게 식별합니다.

CKNotificationInfo

트리거 조건이 충족될 때 생성되는 푸시 알림의 유형을 지정합니다.

CKOperation

CloudKit 데이터베이스에 대해 실행되는 작업에 대한 추상 기본 클래스입니다.

CKOperationConfiguration

CloudKit 작업의 동작을 구성합니다.

CKOperationGroup

CloudKit 작업의 일괄 처리 그룹을 나타냅니다.

CKQuery

CloudKit 데이터베이스에 대한 쿼리를 지정합니다.

CKQueryCursor

의 결과 집합에 현재 중지점을 보유합니다 CKQuery.

CKQueryNotification

개체에 의해 생성된 푸시 알림입니다 CKSubscription .

CKQueryOperation

CKDatabaseOperation 를 실행하는 입니다CKQuery.

CKQuerySubscription

개발자가 쿼리를 기반으로 알림을 만들 수 있습니다.

CKRecord

CloudKit 내에서 데이터를 구성하는 Key-Value 쌍의 사전입니다.

CKRecordID

데이터베이스 내에서 을 CKRecord 고유하게 식별합니다.

CKRecordValue

앱 개발자는 CloudKit 데이터베이스에 저장된 개체에 강력한 입력을 제공하는 이 인터페이스를 서브클래싱해서는 안 됩니다. 사용자 지정 데이터 유형이 지원되지 않습니다.

CKRecordZone

관련 CKRecord 개체를 구성할 수 있습니다. 기본적으로 프라이빗 데이터베이스와 공용 데이터베이스에는 모두 단일 영역이 있습니다.

CKRecordZoneID

데이터베이스 내에서 을 CKRecordZone 고유하게 식별합니다.

CKRecordZoneNotification

내의 변경 내용으로 인해 발생하는 푸시 알림입니다 CKRecordZone.

CKRecordZoneSubscription

영역 변경 내용을 기록하는 구독입니다.

CKReference

단일 CKRecordZone내의 개체 간에 CKRecord 1:M 관계를 정의합니다.

CKServerChangeToken

의 버전을 식별하는 읽기 전용 개체입니다 CKRecord. 업데이트된 데이터를 가져올 때 기존 토큰을 전달하면 서버에서 변경 내용만 반환하여 효율성을 높일 수 있습니다.

CKShare

공유 레코드를 나타냅니다.

CKShareKeys

다양한 CloudKit 클래스에서 사용되는 상수입니다.

CKShareMetadata

공유 레코드 공유 메타데이터를 나타냅니다.

CKShareParticipant

공유 참가자에 대한 데이터를 포함합니다.

CKSubscription

서버의 변경 내용을 추적하는 영구 쿼리입니다. CKQueryNotification을 참조하십시오.

CKUserIdentity

사용자 또는 사용자를 조회하는 데 사용되는 정보를 포함합니다.

CKUserIdentityLookupInfo

사용자를 조회하는 데 사용할 수 있는 데이터를 포함합니다.

인터페이스

ICKRecordValue

프로토콜 CKRecordValue의 필수 메서드(있는 경우)를 나타내는 인터페이스입니다.

열거형

CKAccountStatus

사용자의 iCloud 계정을 사용할 수 있는지 여부를 나타내는 값을 열거합니다.

CKApplicationPermissions

다른 앱 사용자가 전자 메일 주소로 현재 사용자를 검색할 수 있음을 나타내는 값을 열거합니다.

CKApplicationPermissionStatus

사용 권한을 얻으려고 시도할 때 애플리케이션이 가질 수 있는 상태를 열거합니다.

CKDatabaseScope

데이터베이스가 프라이빗, 공유 또는 공용인지 여부를 알려주는 값을 열거합니다.

CKErrorCode

CloudKit 오류 조건을 열거합니다.

CKNotificationType

푸시 알림을 생성할 수 있는 이벤트를 열거합니다.

CKOperationGroupTransferSize

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKQueryNotificationReason

데이터 수명 주기 알림을 트리거할 수 있는 영구 스토리지 이벤트를 열거합니다.

CKQuerySubscriptionOptions

에서 알림을 발생시키는 시간 또는 시간을 CKSubscription 열거합니다.

CKRecordSavePolicy

레코드를 저장해야 하는 시기 또는 시기를 제어하는 정책을 열거합니다.

CKRecordZoneCapabilities

영역이 수행할 수 있는 특수 작업을 열거합니다.

CKReferenceAction

대상 레코드를 삭제할 때 참조를 삭제할지 여부를 제어하는 값을 열거합니다.

CKShareParticipantAcceptanceStatus

참가 요청을 공유하기 위한 응답을 열거합니다.

CKShareParticipantPermission

사용자 공유 권한을 열거합니다.

CKShareParticipantRole

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKShareParticipantType

공유 참가자 유형을 열거합니다.

CKSubscriptionOptions

쿼리 기반 구독에 대한 푸시 알림 동작을 제어하기 위한 플래그를 열거합니다.

CKSubscriptionType

구독 유형을 열거합니다.

대리자

CKAcceptPerShareCompletionHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKDatabaseDeleteSubscriptionHandler

메서드에 대한 DeleteSubscription(String, CKDatabaseDeleteSubscriptionHandler) 완료 처리기입니다.

CKDiscoverUserInfosCompletionHandler

애플리케이션 개발자는 이 위임을 구현하고 M:CloudKit.CKDiscoverUserInfosOperation.Complete* 속성에 할당하여 반환되는 사용자 정보를 처리할 수 있습니다.

CKFetchDatabaseChangesCompletionHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchPerShareMetadataHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchRecordChangesHandler

속성에 대한 대리자 AllChangesReported 입니다.

CKFetchRecordsCompletedHandler

속성에 대한 대리자 Completed 입니다.

CKFetchRecordZoneChangesFetchCompletedHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchRecordZoneChangesTokensUpdatedHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchRecordZoneChangesWithIDWasDeletedHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKFetchSubscriptionsCompleteHandler

속성에 대한 대리자 Completed 입니다.

CKFetchWebAuthTokenOperationHandler

CloudKit 네임스페이스는 iCloud에 대한 액세스를 제공합니다.

CKMarkNotificationsReadHandler

속성에 대한 대리자 Completed 입니다.

CKModifyRecordsOperationHandler

속성에 대한 대리자 Completed 입니다.

CKModifyRecordZonesHandler

속성에 대한 대리자 Completed 입니다.

CKModifySubscriptionsHandler

속성에 대한 대리자 Completed 입니다.

CKRecordZoneCompleteHandler

속성에 대한 대리자 Completed 입니다.

설명

CloudKit 네임스페이스를 사용하면 애플리케이션 개발자가 애플리케이션과 iCloud 간의 데이터 흐름을 제어할 수 있습니다. iCloud는 애플리케이션 또는 특정 애플리케이션의 모든 인스턴스 간에 공유되는 "public"과 단일 사용자에게 고유한 "프라이빗" 서버 쪽 데이터 스토리지를 제공합니다. iCloud 스토리지 및 전송은 Apple 디바이스 간에 암호화되고 동기화됩니다. CloudKit은 클라이언트 쪽 지속성 또는 데이터 캐싱을 제공하지 않습니다. CloudKit 기능은 사용자가 활성 인터넷 연결을 사용하는 동안에만 사용할 수 있습니다.

CloudKit에서 가장 높은 수준의 클래스는 입니다 CKContainer. CloudKit 컨테이너(Apple 설명서에서 "유비쿼티 컨테이너"라고도 함)는 특정 이름으로 식별되는 정보 저장소입니다. Apple은 "iCloud" 형식의 이름을 사용하는 것이 좋습니다. {역방향 DNS}. {appName}",예: "iCloud.com.mycompany.MyApp". 개발자는 Apple 개발자 포털을 통해 사용할 수 있는 iCloud 대시보드를 사용하여 컨테이너를 만들고 구성해야 합니다.

단일 CKContainer 에는 앱 PublicCloudDatabase의 모든 인스턴스 간에 공유되는 공용 데이터와 사용자별 데이터가 포함된 프라이빗 데이터(참조 PrivateCloudDatabase)가 모두 포함될 수 있습니다. iCloud 내에서 퍼블릭 데이터는 앱의 iCloud 스토리지에 저장되고 프라이빗 데이터는 사용자의 개인 iCloud 스토리지에 저장됩니다. 퍼블릭 CKDatabase 은 iCloud에 로그인되었는지 여부에 관계없이 앱의 연결된 모든 사용자가 사용할 수 있습니다. 프라이빗 CKDatabase 은 사용자가 iCloud에 로그인한 경우에만 적용됩니다. 개발자는 사용자의 로그인 또는 연결 상태 변경에 정상적으로 반응하도록 코드를 작성해야 합니다.

이러한 공용 및 개인 CKDatabase 개체는 구조화된 레코드를 저장합니다. 이러한 개체는 개체로 CKRecord 표시됩니다. 필드와 유사한 키-값 데이터 외에도 이러한 레코드는 큰 개체를 직접(포함하는 CKRecord를 사용하여 검색) 또는 참조로 보유 CKAsset 할 수 있습니다(큰 데이터의 지연 검색 허용).

모든 CKRecord 인스턴스는 내에 CKRecordZone저장됩니다. CKRecordZone 은 기존 데이터베이스 인스턴스와 비슷합니다. 서로 참조할 수 있지만 다른 CKRecordZone 인스턴스에 저장되지 않는 여러 CKRecord 저장소를 포함할 수 있으며 CKRecordZone 개체를 사용하여 여러 CKRecord 저장소에서 원자성 작업을 조정할 수 있습니다. 데이터베이스 인스턴스의 유사성은 범용이 아닙니다. 예를 들어 개발자는 M:CKDatabase.FetchRecordAsync(CKRecordAsync)를 사용하여 영역을 참조하지 않고 에서 CKDatabase 직접 를 검색 CKRecord 할 수 있습니다. 기본값 CKRecordZoneP:CloudKit.CKRecordZone.DefaultRecordZone()을 통해 사용할 수 있습니다. 개발자는 CloudKit 대시보드를 사용하여 추가 영역을 만들고 이를 사용하여 데이터를 논리적으로 분할할 수 있습니다.

CloudKit 앱에는 자격이 있는 com.apple.developer.icloud-services 프로비저닝 프로필과 앱별 번들 식별자(예: "com.mycompany.CloudKitApp")가 필요합니다. 개발자는 이러한 프로비저닝 프로필을 만들고 구성해야 합니다.

다음은 단일 레코드에서 작동하는 CloudKit의 몇 가지 일반적인 용도를 보여 줍니다.

//Create 
private async Task<CKRecord> StoreInCloudKit (string name, CLLocation loc, int stationId)
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;
    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    var recordType = "StationReferences";

    var record = new CKRecord (recordType);
    record ["Name"] = new NSString (name);
    record ["Position"] = loc;
    record ["StationID"] = new NSNumber (stationId);

    var storedRecord = await publicDatabase.SaveRecordAsync (record);
    return storedRecord;
}

//Retrieve (via ID)
private async Task<CKRecord> AccessCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var recordNameIHappenToKnow = "7eaf0432-2fa4-475f-851a-c6a19b3f8587";
    var recordId = new CKRecordID (recordNameIHappenToKnow);
    var record = await publicDatabase.FetchRecordAsync (recordId);

    return record;
}

//Retrieve (query)
private async Task<CKRecord []> QueryCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    Console.WriteLine ($"Default zone name = '{zoneId.ZoneName}' owner = '{zoneId.OwnerName}'");
    /*
    var zoneName = "_defaultZone";
    var ownerName = "__defaultOwner__";
    var zoneId0 = new CKRecordZoneID (zoneName, ownerName);

    Console.WriteLine ($"Assert { zoneId0 == zoneId }");
    */

    var recordType = "StationReferences";

    var location = new CLLocation (19.7303, -155.056);
    var predicate = NSPredicate.FromFormat ("distanceToLocation:fromLocation:(Position, %@) < 100", location);

    var query = new CKQuery (recordType, predicate);

    var result = await publicDatabase.PerformQueryAsync (query, zoneId);
    return result;
}

//Update
private async Task<CKRecord> UpdateInCloudKit (CKDatabase database, CKRecord record, NSString key, NSObject newValue)
{
    record [key] = newValue;
    var modifiedRecord = await database.SaveRecordAsync (record);
    return modifiedRecord;
}

//Delete 
private async Task<CKRecordID> DeleteRecord (CKDatabase database, CKRecord record)
{
    var id = record.Id;
    var deletedId = await database.DeleteRecordAsync (id);
    return deletedId;
}