CloudKit Espace de noms

L’espace de noms CloudKit permet d’accéder à iCloud.

Classes

CKAcceptSharesOperation

Implémente une opération qui accepte les enregistrements partagés.

CKAsset

Fichier volumineux associé à un CKRecord objet .

CKContainer

Encapsule le contenu associé à une application, y compris les données privées partagées et par utilisateur.

CKContainer.Notifications

Notification publiée par la CKContainer classe.

CKDatabase

Contient des données dans un CKContainer. Une base de données publique CKDatabase fournit des données partagées, une base de données privée contient les données de l’utilisateur actuel.

CKDatabaseNotification

Notification sur l’activité de la base de données.

CKDatabaseOperation

Classe abstraite pour les opérations sur un CKDatabase.

CKDatabaseSubscription

Un abonnement à la base de données.

CKDiscoverAllContactsOperation

CKOperation qui récupère les ID de tous les contacts détectables de l’utilisateur de l’application.

CKDiscoverAllUserIdentitiesOperation

Opération qui obtient tous les utilisateurs détectables dans le carnet d’adresses du système.

CKDiscoveredUserInfo

Informations sur un utilisateur. Retourné par un CKDiscoverAllContactsOperation.

CKDiscoverUserIdentitiesOperation

Opération qui recherche les utilisateurs qui correspondent à un critère.

CKDiscoverUserInfosOperation

CKOperation qui récupère les ID des utilisateurs détectables dont les adresses e-mail ou les ID d’enregistrement sont déjà connus du développeur d’application.

CKErrorCodeExtensions

Méthodes d’extension pour l’énumération CloudKit.CKErrorCode.

CKErrorFields

Contient les constantes d’erreur utilisées par CloudKit.

CKFetchDatabaseChangesOperation

Opération qui extrait les modifications de base de données.

CKFetchNotificationChangesOperation

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

CKFetchRecordChangesOperation

CKDatabaseOperation qui récupère les données relatives aux objets modifiés ou supprimésCKRecord.

CKFetchRecordsOperation

CKDatabaseOperation qui récupère des objets spécifiquesCKRecord.

CKFetchRecordZoneChangesConfiguration

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchRecordZoneChangesOperation

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchRecordZoneChangesOptions

Contient des options qui contrôlent la façon dont les modifications de zone d’enregistrement sont extraites.

CKFetchRecordZonesOperation

CKDatabaseOperation qui récupère des CKRecordZone objets à partir d’iCloud.

CKFetchShareMetadataOperation

Opération qui extrait les métadonnées partagées pour plusieurs partages.

CKFetchShareParticipantsOperation

Opération qui extrait les participants partagés pour les enregistrements partagés.

CKFetchSubscriptionsOperation

CKDatabaseOperation qui récupère des CKSubscription objets à partir d’iCloud.

CKFetchWebAuthTokenOperation

Opération qui retourne un jeton d’authentification web pour un jeton d’API spécifié à partir du tableau de bord CloudKit.

CKLocationSortDescriptor

Trie les enregistrements en fonction de leur distance par rapport à l’emplacement spécifié.

CKMarkNotificationsReadOperation

Marque les notifications Push comme lues. Généralement utilisé par les applications qui utilisent des notifications Push pour suivre les modifications d’enregistrement.

CKModifyBadgeOperation

CKOperation qui modifie le badge de l’icône de l’application, soit sur l’appareil actuel, soit sur tous les appareils de l’utilisateur.

CKModifyRecordsOperation

CKDatabaseOperation qui valide les modifications apportées à un ou plusieurs CKRecord objets.

CKModifyRecordZonesOperation

CKDatabaseOperation qui valide les modifications apportées aux zones d’enregistrement.

CKModifySubscriptionsOperation

CKDatabaseOperation qui valide les modifications apportées à un ou plusieurs CKSubscription objets.

CKNotification

Une notification Push envoyée à l’application.

CKNotificationID

Identifie de manière unique une notification Push envoyée à partir d’un conteneur.

CKNotificationInfo

Spécifie le type de notifications Push générées lorsque la condition de déclencheur est remplie.

CKOperation

Classe de base abstraite pour les opérations exécutées sur la base de données CloudKit.

CKOperationConfiguration

Configure le comportement d’une opération CloudKit.

CKOperationGroup

Représente un groupe par lots d’opérations CloudKit.

CKQuery

Spécifie une requête sur la base de données CloudKit.

CKQueryCursor

Contient le point d’arrêt actuel dans le jeu de résultats d’un CKQuery.

CKQueryNotification

Notification Push générée par un CKSubscription objet .

CKQueryOperation

CKDatabaseOperation qui exécute un CKQuery.

CKQuerySubscription

Permet aux développeurs de créer des notifications basées sur une requête.

CKRecord

Dictionnaire de paires Key-Value qui structurent les données dans CloudKit.

CKRecordID

Identifie de manière unique un CKRecord au sein d’une base de données.

CKRecordValue

Les développeurs d’applications ne doivent pas sous-classer cette interface, qui fournit un typage fort pour les objets stockés dans une base de données CloudKit. Les types de données personnalisés ne sont pas pris en charge.

CKRecordZone

Permet l’organisation des objets connexes CKRecord . Par défaut, la base de données privée et la base de données publique ont une seule zone.

CKRecordZoneID

Identifie de manière unique un CKRecordZone au sein d’une base de données.

CKRecordZoneNotification

Notification Push résultant de modifications dans un CKRecordZone.

CKRecordZoneSubscription

Un abonnement pour enregistrer les modifications de zone.

CKReference

Définit une relation de 1:M entre CKRecord des objets au sein d’un seul CKRecordZone.

CKServerChangeToken

Objet en lecture seule qui identifie une version d’un CKRecord. Lors de l’extraction des données mises à jour, le passage du jeton existant permet au serveur de retourner uniquement les modifications, ce qui augmente l’efficacité.

CKShare

Représente un enregistrement partagé.

CKShareKeys

Constantes utilisées par différentes classes CloudKit.

CKShareMetadata

Représente les métadonnées partagées des enregistrements partagés.

CKShareParticipant

Contient les données d’un participant de partage.

CKSubscription

Requête persistante qui effectue le suivi des modifications sur le serveur. (Consultez CKQueryNotification.)

CKUserIdentity

Contient des informations utilisées pour rechercher un ou plusieurs utilisateurs.

CKUserIdentityLookupInfo

Contient des données qui peuvent être utilisées pour rechercher un utilisateur.

Interfaces

ICKRecordValue

Interface représentant les méthodes requises (le cas échéant) du protocole CKRecordValue.

Énumérations

CKAccountStatus

Énumère les valeurs qui indiquent si le compte iCloud d’un utilisateur est disponible.

CKApplicationPermissions

Énumère une valeur qui indique que d’autres utilisateurs de l’application peuvent découvrir l’utilisateur actuel par adresse e-mail.

CKApplicationPermissionStatus

Énumère les états qu’une application peut avoir lors de la tentative d’obtention d’une autorisation.

CKDatabaseScope

Énumère les valeurs qui indiquent si une base de données est privée, partagée ou publique.

CKErrorCode

Énumère les conditions d’erreur CloudKit.

CKNotificationType

Énumère les événements qui peuvent générer une notification Push.

CKOperationGroupTransferSize

L’espace de noms CloudKit permet d’accéder à iCloud.

CKQueryNotificationReason

Énumère les événements de stockage persistants qui peuvent déclencher des notifications de cycle de vie des données.

CKQuerySubscriptionOptions

Énumère l’heure ou l’heure à laquelle un CKSubscription déclenche une notification.

CKRecordSavePolicy

Énumère les stratégies qui contrôlent quand ou si un enregistrement doit être enregistré.

CKRecordZoneCapabilities

Énumère les opérations spéciales dont une zone est capable.

CKReferenceAction

Énumère les valeurs qui contrôlent si une référence doit se supprimer elle-même lorsque son enregistrement cible est supprimé.

CKShareParticipantAcceptanceStatus

Énumère les réponses pour partager les demandes de participation.

CKShareParticipantPermission

Énumère les autorisations de partage utilisateur.

CKShareParticipantRole

L’espace de noms CloudKit permet d’accéder à iCloud.

CKShareParticipantType

Énumère les types de participants de partage.

CKSubscriptionOptions

Énumère les indicateurs pour contrôler le comportement des notifications Push pour les abonnements basés sur des requêtes.

CKSubscriptionType

Énumère les types d’abonnement.

Délégués

CKAcceptPerShareCompletionHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKDatabaseDeleteSubscriptionHandler

Gestionnaire de saisie semi-automatique pour la DeleteSubscription(String, CKDatabaseDeleteSubscriptionHandler) méthode .

CKDiscoverUserInfosCompletionHandler

Les développeurs d’applications peuvent implémenter ce delgate et l’affecter à la propriété M:CloudKit.CKDiscoverUserInfosOperation.Complete* pour traiter les informations utilisateur retournées.

CKFetchDatabaseChangesCompletionHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchPerShareMetadataHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchRecordChangesHandler

Délégué pour la AllChangesReported propriété .

CKFetchRecordsCompletedHandler

Délégué pour la Completed propriété .

CKFetchRecordZoneChangesFetchCompletedHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchRecordZoneChangesTokensUpdatedHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchRecordZoneChangesWithIDWasDeletedHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKFetchSubscriptionsCompleteHandler

Délégué pour la Completed propriété .

CKFetchWebAuthTokenOperationHandler

L’espace de noms CloudKit permet d’accéder à iCloud.

CKMarkNotificationsReadHandler

Délégué pour la Completed propriété .

CKModifyRecordsOperationHandler

Délégué pour la Completed propriété .

CKModifyRecordZonesHandler

Délégué pour la Completed propriété .

CKModifySubscriptionsHandler

Délégué pour la Completed propriété .

CKRecordZoneCompleteHandler

Délégué pour la Completed propriété .

Remarques

L’espace de noms CloudKit permet aux développeurs d’applications de contrôler le flux de données entre leurs applications et iCloud. iCloud fournit un stockage de données côté serveur, à la fois « public » partagé entre toutes les instances d’une application ou d’applications spécifiques et « privé » propre à un seul utilisateur. Le stockage et le transport iCloud sont chiffrés et synchronisés entre les appareils Apple. CloudKit ne fournit pas de persistance côté client ni de mise en cache des données : la fonctionnalité CloudKit n’est disponible que lorsque l’utilisateur dispose d’une connexion Internet active.

La classe de niveau le plus élevé dans CloudKit est CKContainer. Un conteneur CloudKit (parfois appelé « conteneur Ubiquity » dans la documentation Apple) est un magasin d’informations identifié avec un nom particulier. Apple recommande d’utiliser un nom au format « iCloud. {DNS inversé}. {appName} », par exemple, « iCloud.com.mycompany.MyApp ». Les développeurs doivent créer et configurer leurs conteneurs à l’aide du tableau de bord iCloud, disponible via le portail des développeurs Apple.

Un seul CKContainer peut contenir à la fois des données publiques, qui sont partagées entre toutes les instances de l’application (voir PublicCloudDatabase), et des données privées, qui contiennent des données spécifiques à l’utilisateur (voir PrivateCloudDatabase). Dans iCloud, les données publiques sont stockées dans le stockage iCloud de l’application, tandis que les données privées sont stockées dans le stockage iCloud privé de l’utilisateur. Le public CKDatabase est disponible pour tous les utilisateurs connectés de l’application, qu’ils soient connectés ou non à iCloud. Le privé CKDatabase est uniquement si l’utilisateur est connecté à iCloud. Les développeurs doivent écrire leur code de sorte qu’il réagisse correctement aux modifications apportées à l’état de connexion ou de connexion de l’utilisateur.

Ces objets publics et privés CKDatabase stockent des enregistrements structurés. Ceux-ci sont représentés par CKRecord des objets . En plus des données clé-valeur de type champ, ces enregistrements peuvent contenir CKAsset des objets volumineux soit directement (récupérés avec le contenant CKRecord) soit en tant que références (permettant une récupération différée des données volumineuses).

Toutes les CKRecord instances sont stockées dans un CKRecordZone. Un CKRecordZone est similaire à une instance de base de données traditionnelle : il peut contenir plusieurs CKRecord magasins qui peuvent faire référence les uns aux autres, mais pas à des magasins dans d’autres CKRecordZone instances et CKRecordZone des objets peuvent être utilisés pour coordonner des opérations atomiques entre plusieurs CKRecord magasins. La similitude avec une instance de base de données n’est pas universelle ; par exemple, un développeur peut utiliser M:CKDatabase.FetchRecordAsync(CKRecordID) pour récupérer un CKRecord directement à partir du CKDatabase sans faire référence à la zone. La valeur par défaut CKRecordZone est disponible via P:CloudKit.CKRecordZone.DefaultRecordZone(). Les développeurs peuvent créer des zones supplémentaires à l’aide du tableau de bord CloudKit et les utiliser pour partitionner leurs données logiquement.

Les applications CloudKit nécessitent un profil d’approvisionnement avec le com.apple.developer.icloud-services droit et un identificateur de bundle spécifique à l’application (par exemple, « com.mycompany.CloudKitApp »). Les développeurs doivent créer et configurer ce profil d’approvisionnement.

Voici quelques utilisations classiques de CloudKit qui fonctionnent sur des enregistrements uniques :

//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;
}