CloudKit Namespace

Der CloudKit-Namespace bietet Zugriff auf iCloud.

Klassen

CKAcceptSharesOperation

Implementiert einen Vorgang, der freigegebene Datensätze akzeptiert.

CKAsset

Eine große Datei, die einem CKRecord -Objekt zugeordnet ist.

CKContainer

Kapselt Inhalte, die einer App zugeordnet sind, einschließlich freigegebener und privater Daten pro Benutzer.

CKContainer.Notifications

Benachrichtigung, die von der CKContainer Klasse bereitgestellt wird.

CKDatabase

Enthält Daten in einem CKContainer. Ein öffentliches CKDatabase stellt freigegebene Daten bereit, eine private Datenbank enthält die Daten des aktuellen Benutzers.

CKDatabaseNotification

Eine Benachrichtigung zur Datenbankaktivität.

CKDatabaseOperation

Abstrakte Klasse für Vorgänge in einem CKDatabase.

CKDatabaseSubscription

Ein Datenbankabonnement.

CKDiscoverAllContactsOperation

Ein CKOperation , der die IDs aller erkennbaren Kontakte des App-Benutzers abruft.

CKDiscoverAllUserIdentitiesOperation

Ein Vorgang, der alle auffindbaren Benutzer im Adressbuch des Systems abruft.

CKDiscoveredUserInfo

Informationen zu einem Benutzer. Wird von einem CKDiscoverAllContactsOperationzurückgegeben.

CKDiscoverUserIdentitiesOperation

Vorgang, der Nach Benutzern sucht, die einem Kriterium entsprechen.

CKDiscoverUserInfosOperation

Ein CKOperation , der die IDs von auffindbaren Benutzern abruft, deren E-Mail-Adressen oder Datensatz-IDs dem App-Entwickler bereits bekannt sind.

CKErrorCodeExtensions

Erweiterungsmethoden für die CloudKit.CKErrorCode-Enumeration.

CKErrorFields

Enthält von CloudKit verwendete Fehlerkonstanten.

CKFetchDatabaseChangesOperation

Ein Vorgang, der Datenbankänderungen abruft.

CKFetchNotificationChangesOperation

Ein CKOperation , das ret.. /.. /summary_set.sh CKFetchNotificationChangesOperation A

CKFetchRecordChangesOperation

Ein CKDatabaseOperation , der Daten zu geänderten oder gelöschten Objekten abruft CKRecord .

CKFetchRecordsOperation

Ein CKDatabaseOperation , der bestimmte CKRecord Objekte abruft.

CKFetchRecordZoneChangesConfiguration

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchRecordZoneChangesOperation

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchRecordZoneChangesOptions

Enthält Optionen, die steuern, wie Änderungen der Datensatzzone abgerufen werden.

CKFetchRecordZonesOperation

Ein CKDatabaseOperation , der Objekte aus iCloud abruft CKRecordZone .

CKFetchShareMetadataOperation

Ein Vorgang, der freigegebene Metadaten für mehrere Freigaben abruft.

CKFetchShareParticipantsOperation

Ein Vorgang, der freigegebene Teilnehmer für freigegebene Datensätze abruft.

CKFetchSubscriptionsOperation

Ein CKDatabaseOperation , der Objekte aus iCloud abruft CKSubscription .

CKFetchWebAuthTokenOperation

Vorgang, der ein Webauthentifizierungstoken für ein angegebenes API-Token aus dem CloudKit-Dashboard zurückgibt.

CKLocationSortDescriptor

Sortiert Datensätze basierend auf ihrem Abstand zum angegebenen Speicherort.

CKMarkNotificationsReadOperation

Markiert Pushbenachrichtigungen als gelesen. Wird in der Regel von Apps verwendet, die Pushbenachrichtigungen zum Nachverfolgen von Änderungen verwenden.

CKModifyBadgeOperation

Ein CKOperation , der den Badge des App-Symbols entweder auf dem aktuellen Gerät oder auf allen Geräten des Benutzers ändert.

CKModifyRecordsOperation

Ein CKDatabaseOperation , der Änderungen an ein oder CKRecord mehrere -Objekte committet.

CKModifyRecordZonesOperation

Ein CKDatabaseOperation , der Änderungen an Datensatzzonen committet.

CKModifySubscriptionsOperation

Ein CKDatabaseOperation , der Änderungen an ein oder CKSubscription mehrere -Objekte committet.

CKNotification

Eine an die App gesendete Pushbenachrichtigung.

CKNotificationID

Identifiziert eindeutig eine Pushbenachrichtigung, die von einem Container gesendet wird.

CKNotificationInfo

Gibt den Typ der Pushbenachrichtigungen an, die generiert werden, wenn die Triggerbedingung erfüllt ist.

CKOperation

Abstrakte Basisklasse für Vorgänge, die für die CloudKit-Datenbank ausgeführt werden.

CKOperationConfiguration

Konfiguriert das Verhalten eines CloudKit-Vorgangs.

CKOperationGroup

Stellt eine Batchgruppe von CloudKit-Vorgängen dar.

CKQuery

Gibt eine Abfrage für die CloudKit-Datenbank an.

CKQueryCursor

Enthält den aktuellen Stopppunkt im Resultset eines CKQuery.

CKQueryNotification

Eine push-Benachrichtigung, die von einem CKSubscription -Objekt generiert wird.

CKQueryOperation

Ein CKDatabaseOperation , der eine CKQueryausführt.

CKQuerySubscription

Ermöglicht Entwicklern das Erstellen von Benachrichtigungen basierend auf einer Abfrage.

CKRecord

Ein Wörterbuch mit Key-Value Paaren, die Daten in CloudKit strukturieren.

CKRecordID

Identifiziert eine CKRecord innerhalb einer Datenbank eindeutig.

CKRecordValue

App-Entwickler sollten diese Schnittstelle nicht unterklassen, die eine starke Eingabe für Objekte bietet, die in einer CloudKit-Datenbank gespeichert sind. Benutzerdefinierte Datentypen werden nicht unterstützt.

CKRecordZone

Ermöglicht das Organisieren verwandter CKRecord Objekte. Standardmäßig verfügen sowohl die private als auch die öffentliche Datenbank über eine einzelne Zone.

CKRecordZoneID

Identifiziert eine CKRecordZone innerhalb einer Datenbank eindeutig.

CKRecordZoneNotification

Eine Pushbenachrichtigung, die sich aus Änderungen innerhalb eines CKRecordZoneergibt.

CKRecordZoneSubscription

Ein Abonnement zum Aufzeichnen von Zonenänderungen.

CKReference

Definiert eine 1:M-Beziehung zwischen CKRecord Objekten innerhalb einer einzelnen CKRecordZone.

CKServerChangeToken

Ein schreibgeschütztes Objekt, das eine Version von identifiziert CKRecord. Beim Abrufen aktualisierter Daten ermöglicht die Übergabe des vorhandenen Tokens, dass der Server nur die Änderungen zurückgibt, wodurch die Effizienz erhöht wird.

CKShare

Stellt einen freigegebenen Datensatz dar.

CKShareKeys

Von verschiedenen CloudKit-Klassen verwendete Konstanten.

CKShareMetadata

Stellt freigegebene Metadaten für einen freigegebenen Datensatz dar.

CKShareParticipant

Enthält Daten für einen Freigabeteilnehmer.

CKSubscription

Eine persistente Abfrage, die Änderungen auf dem Server nachverfolgt. (Siehe CKQueryNotification.)

CKUserIdentity

Enthält Informationen, die verwendet werden, um einen oder mehrere Benutzer nachzuschlagen.

CKUserIdentityLookupInfo

Enthält Daten, die zum Suchen eines Benutzers verwendet werden können.

Schnittstellen

ICKRecordValue

Schnittstelle, die die erforderlichen Methoden (falls vorhanden) des Protokolls CKRecordValuedarstellt.

Enumerationen

CKAccountStatus

Listet Werte auf, die angeben, ob das iCloud-Konto eines Benutzers verfügbar ist.

CKApplicationPermissions

Listet einen Wert auf, der angibt, dass andere App-Benutzer den aktuellen Benutzer anhand der E-Mail-Adresse ermitteln können.

CKApplicationPermissionStatus

Listet die Zustände auf, die eine Anwendung haben kann, wenn versucht wird, eine Berechtigung zu erhalten.

CKDatabaseScope

Listet Werte auf, die angeben, ob eine Datenbank privat, freigegeben oder öffentlich ist.

CKErrorCode

Listet CloudKit-Fehlerbedingungen auf.

CKNotificationType

Listet die Ereignisse auf, die eine Pushbenachrichtigung generieren können.

CKOperationGroupTransferSize

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKQueryNotificationReason

Listet die persistenten Speicherereignisse auf, die Datenlebenszyklusbenachrichtigungen auslösen können.

CKQuerySubscriptionOptions

Listet den Zeitpunkt oder die Zeiten auf, zu denen eine CKSubscription Benachrichtigung ausgelöst wird.

CKRecordSavePolicy

Listet Richtlinien auf, die steuern, wann oder ob ein Datensatz gespeichert werden soll.

CKRecordZoneCapabilities

Listet die speziellen Vorgänge auf, die eine Zone ausführen kann.

CKReferenceAction

Listet Werte auf, die steuern, ob ein Verweis sich selbst löschen soll, wenn der Zieldatensatz gelöscht wird.

CKShareParticipantAcceptanceStatus

Listet Antworten auf Freigabeteilnahmeanforderungen auf.

CKShareParticipantPermission

Listet Benutzerfreigabeberechtigungen auf.

CKShareParticipantRole

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKShareParticipantType

Listet freigabeteilnehmertypen auf.

CKSubscriptionOptions

Listet Flags zum Steuern des Pushbenachrichtigungsverhaltens für abfragebasierte Abonnements auf.

CKSubscriptionType

Listet Abonnementtypen auf.

Delegaten

CKAcceptPerShareCompletionHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKDatabaseDeleteSubscriptionHandler

Vervollständigungshandler für die DeleteSubscription(String, CKDatabaseDeleteSubscriptionHandler) -Methode.

CKDiscoverUserInfosCompletionHandler

Anwendungsentwickler können dieses Delgate implementieren und der M:CloudKit.CKDiscoverUserInfosOperation.Complete* -Eigenschaft zuweisen, um die zurückgegebenen Benutzerinformationen zu verarbeiten.

CKFetchDatabaseChangesCompletionHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchPerShareMetadataHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchRecordChangesHandler

Delegat für die AllChangesReported Eigenschaft.

CKFetchRecordsCompletedHandler

Delegat für die Completed Eigenschaft.

CKFetchRecordZoneChangesFetchCompletedHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchRecordZoneChangesTokensUpdatedHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchRecordZoneChangesWithIDWasDeletedHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKFetchSubscriptionsCompleteHandler

Delegat für die Completed Eigenschaft.

CKFetchWebAuthTokenOperationHandler

Der CloudKit-Namespace bietet Zugriff auf iCloud.

CKMarkNotificationsReadHandler

Delegat für die Completed Eigenschaft.

CKModifyRecordsOperationHandler

Delegat für die Completed Eigenschaft.

CKModifyRecordZonesHandler

Delegat für die Completed Eigenschaft.

CKModifySubscriptionsHandler

Delegat für die Completed Eigenschaft.

CKRecordZoneCompleteHandler

Delegat für die Completed Eigenschaft.

Hinweise

Mit dem CloudKit-Namespace können Anwendungsentwickler den Datenfluss zwischen ihren Anwendungen und iCloud steuern. iCloud bietet serverseitigen Datenspeicher, sowohl "öffentlich", der von allen Instanzen einer Anwendung oder bestimmten Anwendungen gemeinsam genutzt wird, als auch "private", die für einen einzelnen Benutzer eindeutig ist. iCloud-Speicher und -Transport werden zwischen Apple-Geräten verschlüsselt und synchronisiert. CloudKit bietet keine clientseitige Persistenz oder Datenzwischenspeicherung. Die CloudKit-Funktionalität ist nur verfügbar, wenn der Benutzer über eine aktive Internetverbindung verfügt.

Die höchste Klasse im CloudKit ist CKContainer. Ein CloudKit-Container (in der Apple-Dokumentation manchmal als "Ubiquity-Container" bezeichnet) ist ein Informationsspeicher, der mit einem bestimmten Namen identifiziert wird. Apple rät dazu, einen Namen im Format "iCloud. {reverse DNS}. {appName}", z. B. "iCloud.com.mycompany.MyApp". Entwickler müssen ihre Container über das iCloud-Dashboard erstellen und konfigurieren, das über das Apple-Entwicklerportal verfügbar ist.

Ein einzelner CKContainer kann sowohl öffentliche Daten enthalten, die von allen Instanzen der App freigegeben werden (siehe PublicCloudDatabase), als auch private Daten, die benutzerspezifische Daten enthalten (siehe PrivateCloudDatabase). Innerhalb von iCloud werden öffentliche Daten im iCloud-Speicher der App gespeichert, während private Daten im privaten iCloud-Speicher des Benutzers gespeichert werden. Die Öffentliche CKDatabase ist für alle verbundenen Benutzer der App verfügbar, unabhängig davon, ob sie bei iCloud angemeldet sind oder nicht. Das private CKDatabase ist nur, wenn der Benutzer bei iCloud angemeldet ist. Entwickler müssen ihren Code so schreiben, dass er ordnungsgemäß auf Änderungen im Anmelde- oder Verbindungsstatus des Benutzers reagiert.

Diese öffentlichen und privaten CKDatabase Objekte speichern strukturierte Datensätze. Diese werden durch CKRecord -Objekte dargestellt. Zusätzlich zu feldartigen Schlüssel-Wert-Daten können diese Datensätze große Objekte entweder direkt (abgerufen mit dem enthaltenden CKRecord) oder als Verweise (was einen verzögerten Abruf der großen Daten ermöglicht) enthaltenCKAsset.

Alle CKRecord Instanzen werden in einem CKRecordZonegespeichert. Ein CKRecordZone ist so etwas wie eine herkömmliche Datenbankinstanz: Sie kann mehrere CKRecord Speicher enthalten, die sich möglicherweise aufeinander beziehen, aber nicht auf Speicher in anderen CKRecordZone Instanzen, und CKRecordZone Objekte können verwendet werden, um atomische Vorgänge über mehrere CKRecord Speicher hinweg zu koordinieren. Die Ähnlichkeit mit einer Datenbankinstanz ist nicht universell. Beispielsweise kann ein Entwickler M:CKDatabase.FetchRecordAsync(CKRecordID) verwenden, um direkt CKRecord aus der CKDatabase abzurufen, ohne auf die Zone zu verweisen. Der Standardwert CKRecordZone ist über P:CloudKit.CKRecordZone.DefaultRecordZone()verfügbar. Entwickler können zusätzliche Zonen mithilfe des CloudKit-Dashboards erstellen und diese verwenden, um ihre Daten logisch zu partitionieren.

CloudKit-Apps erfordern ein Bereitstellungsprofil mit der com.apple.developer.icloud-services Berechtigung und einem app-spezifischen Bundle-Bezeichner (z. B. "com.mycompany.CloudKitApp"). Entwickler müssen ein solches Bereitstellungsprofil erstellen und konfigurieren.

Im Folgenden werden einige typische Verwendungen von CloudKit veranschaulicht, die für einzelne Datensätze verwendet werden können:

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