次の方法で共有


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 トークンの Web 認証トークンを返す操作。

CKLocationSortDescriptor

指定した場所からの距離に基づいてレコードを並べ替えます。

CKMarkNotificationsReadOperation

プッシュ通知を読み取りとしてマークします。 通常、プッシュ通知を使用してレコードの変更を追跡するアプリで使用されます。

CKModifyBadgeOperation

CKOperation現在のデバイスまたはすべてのユーザーのデバイスで、アプリのアイコンのバッジを変更する 。

CKModifyRecordsOperation

CKDatabaseOperation 1 つ以上CKRecordのオブジェクトに対する変更をコミットする 。

CKModifyRecordZonesOperation

CKDatabaseOperationレコード ゾーンへの変更をコミットする 。

CKModifySubscriptionsOperation

CKDatabaseOperation 1 つ以上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 オブジェクトを整理できます。 既定では、プライベート データベースとパブリック データベースの両方に 1 つのゾーンがあります。

CKRecordZoneID

データベース内の を CKRecordZone 一意に識別します。

CKRecordZoneNotification

CKRecordZoneの変更に起因するプッシュ通知。

CKRecordZoneSubscription

ゾーンの変更を記録するためのサブスクリプション。

CKReference

1 つの 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

アプリケーション開発者は、この delgate を実装し、 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 は、アプリケーションまたは特定のアプリケーションのすべてのインスタンス間で共有される "パブリック" と、1 人のユーザーに固有の "プライベート" の両方のサーバー側データ ストレージを提供します。 iCloud のストレージとトランスポートは、Apple デバイス間で暗号化および同期されます。 CloudKit では、クライアント側の永続化やデータ キャッシュは提供されません。CloudKit 機能は、ユーザーがアクティブなインターネット接続を持っている間にのみ使用できます。

CloudKit の最上位クラスは です CKContainer。 CloudKit コンテナー (Apple ドキュメントでは "Ubiquity コンテナー" と呼ばれることもあります) は、特定の名前で識別される情報ストアです。 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は従来のデータベース インスタンスのようなものです。互いに参照できる複数CKRecordのストアを含めることができますが、他CKRecordZoneのインスタンスCKRecordZoneには格納できません。オブジェクトを使用して、複数CKRecordのストア間でアトミック操作を調整できます。 データベース インスタンスと類似することは普遍的ではありません。たとえば、開発者は M:CKDatabase.FetchRecordAsync(CKRecordID) を使用して、ゾーンを参照せずに から CKDatabase 直接 を取得CKRecordできます。 既定値 CKRecordZoneP:CloudKit.CKRecordZone.DefaultRecordZone()を介して使用できます。 開発者は、CloudKit ダッシュボードを使用して追加のゾーンを作成し、それらを使用してデータを論理的にパーティション分割できます。

CloudKit アプリには、エンタイトルメントとアプリ固有の com.apple.developer.icloud-services バンドル識別子 ("com.mycompany.CloudKitApp" など) を含むプロビジョニング プロファイルが必要です。 開発者は、このようなプロビジョニング プロファイルを作成して構成する必要があります。

次に、1 つのレコードで動作する 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;
}