Verwenden von iCloud mit Xamarin.iOS

Mit der iCloud-Speicher-API in iOS 5 können Anwendungen Benutzerdokumente und anwendungsspezifische Daten an einem zentralen Speicherort speichern und auf diese Elemente auf allen Geräten des Benutzers zugreifen.

Es gibt vier Arten von Speicher verfügbar:

  • Schlüsselwertspeicher – um kleine Datenmengen mit Ihrer Anwendung auf anderen Geräten eines Benutzers freizugeben.

  • UIDocument-Speicher – zum Speichern von Dokumenten und anderen Daten im iCloud-Konto des Benutzers mithilfe einer Unterklasse von UIDocument.

  • CoreData - SQLite-Datenbankspeicher .

  • Einzelne Dateien und Verzeichnisse – zum Verwalten von vielen verschiedenen Dateien direkt im Dateisystem.

In diesem Dokument werden die ersten beiden Typen – Key-Value Paare und UIDocument-Unterklassen – und die Verwendung dieser Features in Xamarin.iOS erläutert.

Wichtig

Apple stellt Tools zur Verfügung, die Entwickler dabei unterstützen, die Datenschutz-Grundverordnung (DSGVO) der Europäischen Union umzusetzen.

Anforderungen

  • Die neueste stabile Version von Xamarin.iOS
  • Xcode 10
  • Visual Studio für Mac oder Visual Studio 2019.

Vorbereiten der iCloud-Entwicklung

Anwendungen müssen für die Verwendung von iCloud sowohl im Apple-Bereitstellungsportal als auch im Projekt selbst konfiguriert werden. Führen Sie vor der Entwicklung für iCloud (oder testen Sie die Beispiele) die folgenden Schritte aus.

So konfigurieren Sie eine Anwendung ordnungsgemäß, um auf iCloud zuzugreifen:

  • Suchen Sie Ihre TeamID – melden Sie sich bei developer.apple.com an, und besuchen Sie die Mitgliedercenter-Kontozusammenfassung >>, um Ihre Team-ID (oder einzelne ID für einzelne Entwickler) abzurufen. Es wird eine 10-Zeichenzeichenfolge ( A93A5CM278 z. B. ) sein – dies ist Teil des "Containerbezeichners".

  • Erstellen Sie eine neue App-ID – Um eine App-ID zu erstellen, führen Sie die schritte aus, die im Abschnitt "Bereitstellung für Store Technologien" des Leitfadens "Gerätebereitstellung" beschrieben sind, und überprüfen Sie iCloud als zulässiger Dienst:

Check iCloud as an allowed service

  • Erstellen Sie ein neues Bereitstellungsprofil – Um ein Bereitstellungsprofil zu erstellen, führen Sie die schritte aus, die im Gerätebereitstellungshandbuch beschrieben sind.

  • Fügen Sie den Containerbezeichner zu "Entitlements.plist" hinzu – das Containerbezeichnerformat ist TeamID.BundleID. Weitere Informationen finden Sie im Leitfaden zum Arbeiten mit Berechtigungen .

  • Konfigurieren Sie die Projekteigenschaften – Stellen Sie in der Info.plist-Datei sicher, dass der Bundle-ID-Satz beim Erstellen einer App-ID entspricht; Das iOS-Paketsignatur verwendet ein Bereitstellungsprofil, das eine App-ID mit dem iCloud-App Service enthält, und die ausgewählte Datei "Benutzerdefinierte Berechtigungen". Dies kann in Visual Studio im Projekteigenschaftenbereich erfolgen.

  • Aktivieren Sie iCloud auf Ihrem Gerät – wechseln Sie zu Einstellungen > iCloud, und stellen Sie sicher, dass das Gerät angemeldet ist. Wählen Sie die Option " & Dokumentedaten " aus und aktivieren Sie sie.

  • Sie müssen ein Gerät verwenden, um iCloud zu testen - es funktioniert nicht auf dem Simulator. Tatsächlich benötigen Sie wirklich zwei oder mehr Geräte, die sich mit derselben Apple-ID angemeldet haben, um iCloud in Aktion zu sehen.

Key-Value Storage

Schlüsselwertspeicher ist für kleine Datenmengen vorgesehen, die ein Benutzer auf Geräten beibehalten kann – z. B. die letzte Seite, die sie in einem Buch oder Magazin angezeigt haben. Schlüsselwertspeicher sollten nicht zum Sichern von Daten verwendet werden.

Es gibt einige Einschränkungen, die beim Verwenden des Schlüsselwertspeichers beachtet werden sollen:

  • Maximale Schlüsselgröße – Schlüsselnamen können nicht länger als 64 Bytes sein.

  • Maximale Wertgröße – Sie können nicht mehr als 64 Kilobyte in einem einzelnen Wert speichern.

  • Maximale Größe des Schlüsselwertspeichers für eine App – Anwendungen können insgesamt nur bis zu 64 Kilogramm Schlüsselwertdaten speichern. Versucht, Schlüssel außerhalb dieses Grenzwerts festzulegen, schlägt fehl, und der vorherige Wert bleibt erhalten.

  • Datentypen – Nur grundlegende Typen wie Zeichenfolgen, Zahlen und Booleans können gespeichert werden.

Das iCloudKeyValue-Beispiel veranschaulicht, wie es funktioniert. Der Beispielcode erstellt einen Schlüssel namens für jedes Gerät: Sie können diesen Schlüssel auf einem Gerät festlegen und den Wert überwachen, der an andere weitergegeben wird. Außerdem wird ein Schlüssel namens "Shared" erstellt, der auf jedem Gerät bearbeitet werden kann – wenn Sie auf vielen Geräten gleichzeitig bearbeiten, entscheidet iCloud, welche Wert "wins" (mithilfe eines Zeitstempels auf der Änderung) und übertragen wird.

Dieser Screenshot zeigt das Beispiel in der Verwendung. Wenn Änderungsbenachrichtigungen von iCloud empfangen werden, werden sie in der Bildlauftextansicht am unteren Bildschirmrand gedruckt und in den Eingabefeldern aktualisiert.

The flow of messages between devices

Festlegen und Abrufen von Daten

Dieser Code zeigt, wie ein Zeichenfolgenwert festgelegt wird.

var store = NSUbiquitousKeyValueStore.DefaultStore;
store.SetString("testkey", "VALUE IN THE CLOUD");  // key and value
store.Synchronize();

Beim Aufrufen von Sync wird sichergestellt, dass der Wert nur auf lokalem Datenträgerspeicher beibehalten wird. Die Synchronisierung mit iCloud erfolgt im Hintergrund und kann nicht durch Anwendungscode erzwungen werden. Bei guter Netzwerkkonnektivität tritt die Synchronisierung häufig innerhalb von 5 Sekunden auf, wenn das Netzwerk jedoch schlecht (oder getrennt) ist, kann ein Update viel länger dauern.

Sie können einen Wert mit diesem Code abrufen:

var store = NSUbiquitousKeyValueStore.DefaultStore;
display.Text = store.GetString("testkey");

Der Wert wird aus dem lokalen Datenspeicher abgerufen – diese Methode versucht nicht, iCloud-Server zu kontaktieren, um den "neuesten" Wert abzurufen. iCloud aktualisiert den lokalen Datenspeicher entsprechend seinem eigenen Zeitplan.

Löschen von Daten

Um ein Schlüsselwertpaar vollständig zu entfernen, verwenden Sie die Remove-Methode wie folgt:

var store = NSUbiquitousKeyValueStore.DefaultStore;
store.Remove("testkey");
store.Synchronize();

Beobachten von Änderungen

Eine Anwendung kann auch Benachrichtigungen erhalten, wenn Werte von iCloud geändert werden, indem sie einen Beobachter zum NSNotificationCenter.DefaultCenter. Im folgenden Code von KeyValueViewController.csViewWillAppear wird gezeigt, wie Sie diese Benachrichtigungen hören und eine Liste der Schlüssel erstellen, die geändert wurden:

keyValueNotification =
NSNotificationCenter.DefaultCenter.AddObserver (
    NSUbiquitousKeyValueStore.DidChangeExternallyNotification, notification => {
    Console.WriteLine ("Cloud notification received");
    NSDictionary userInfo = notification.UserInfo;

    var reasonNumber = (NSNumber)userInfo.ObjectForKey (NSUbiquitousKeyValueStore.ChangeReasonKey);
    nint reason = reasonNumber.NIntValue;

    var changedKeys = (NSArray)userInfo.ObjectForKey (NSUbiquitousKeyValueStore.ChangedKeysKey);
    var changedKeysList = new List<string> ();
    for (uint i = 0; i < changedKeys.Count; i++) {
        var key = changedKeys.GetItem<NSString> (i); // resolve key to a string
        changedKeysList.Add (key);
    }
    // now do something with the list...
});

Ihr Code kann dann einige Aktionen mit der Liste der geänderten Schlüssel ausführen, z. B. das Aktualisieren einer lokalen Kopie dieser Schlüssel oder das Aktualisieren der Benutzeroberfläche mit den neuen Werten.

Mögliche Änderungsgründe sind: ServerChange (0), InitialSyncChange (1) oder QuotaViolationChange (2). Sie können auf den Grund zugreifen und bei Bedarf unterschiedliche Verarbeitung ausführen (z. B. müssen Sie möglicherweise einige Schlüssel als Ergebnis einer QuotaViolationChange entfernen).

Dokument Storage

iCloud Document Storage ist so konzipiert, dass Daten verwaltet werden, die für Ihre App wichtig sind (und dem Benutzer). Es kann verwendet werden, um Dateien und andere Daten zu verwalten, die Ihre App ausführen muss, während gleichzeitig iCloud-basierte Sicherung und Freigabefunktionen auf allen Geräten des Benutzers bereitgestellt werden.

Dieses Diagramm zeigt, wie alles zusammen passt. Jedes Gerät hat Daten, die auf dem lokalen Speicher (dem UbiquityContainer) gespeichert sind, und der iCloud-Daemon des Betriebssystems übernimmt das Senden und Empfangen von Daten in der Cloud. Alle Dateizugriffe auf den UbiquityContainer müssen über FilePresenter/FileCoordinator ausgeführt werden, um gleichzeitigen Zugriff zu verhindern. Die UIDocument Klasse implementiert diese für Sie. In diesem Beispiel wird gezeigt, wie UiDocument verwendet wird.

The document storage overview

Das iCloudUIDoc-Beispiel implementiert eine einfache UIDocument Unterklasse, die ein einzelnes Textfeld enthält. Der Text wird in einer UITextView Und Bearbeitungen werden von iCloud an andere Geräte mit einer Benachrichtigungsnachricht verteilt, die in Rot angezeigt wird. Der Beispielcode behandelt keine erweiterten iCloud-Features wie Konfliktauflösung.

Dieser Screenshot zeigt die Beispielanwendung - nach dem Ändern des Texts und Drücken von UpdateChangeCount wird das Dokument über iCloud auf andere Geräte synchronisiert.

This screenshot shows the sample application after changing the text and pressing UpdateChangeCount

Es gibt fünf Teile für das iCloudUIDoc-Beispiel:

  1. Zugriff auf den UbiquityContainer – bestimmen Sie, ob iCloud aktiviert ist, und wenn dies der Weg zum iCloud-Speicherbereich Ihrer Anwendung ist.

  2. Erstellen einer UIDocument-Unterklasse – erstellen Sie eine Klasse, die zwischen iCloud-Speicher und Ihren Modellobjekten zwischengeschaltet werden soll.

  3. Suchen und Öffnen von iCloud-Dokumenten – Verwenden NSFileManager Sie iCloud-Dokumente und NSPredicate öffnen Sie sie.

  4. Anzeigen von iCloud-Dokumenten – verfügbar gemachte Eigenschaften von Ihrem UIDocument Benutzeroberflächensteuerelement.

  5. Speichern von iCloud-Dokumenten – stellen Sie sicher, dass Änderungen, die in der Benutzeroberfläche vorgenommen wurden, auf Datenträger und iCloud beibehalten werden.

Alle iCloud-Vorgänge werden asynchron ausgeführt (oder sollte ausgeführt werden), sodass sie beim Warten auf etwas nicht blockieren. Sie sehen drei verschiedene Möglichkeiten, dies im Beispiel zu erreichen:

Threads – im AppDelegate.FinishedLaunching anfänglichen AufrufGetUrlForUbiquityContainer, der auf einem anderen Thread ausgeführt wird, um das Blockieren des Hauptthreads zu verhindern.

NotificationCenter – Registrieren für Benachrichtigungen bei asynchronen Vorgängen wie NSMetadataQuery.StartQuery Abschluss.

Abschlusshandler - Übergeben von Methoden zum Ausführen von asynchronen Vorgängen wie UIDocument.Open.

Zugriff auf den UbiquityContainer

Der erste Schritt bei der Verwendung von iCloud Document Storage besteht darin, zu bestimmen, ob iCloud aktiviert ist, und wenn dies der Speicherort des "ubiquity container" (das Verzeichnis, in dem iCloud-aktivierte Dateien auf dem Gerät gespeichert werden).

Dieser Code befindet sich in der AppDelegate.FinishedLaunching Methode des Beispiels.

// GetUrlForUbiquityContainer is blocking, Apple recommends background thread or your UI will freeze
ThreadPool.QueueUserWorkItem (_ => {
    CheckingForiCloud = true;
    Console.WriteLine ("Checking for iCloud");
    var uburl = NSFileManager.DefaultManager.GetUrlForUbiquityContainer (null);
    // OR instead of null you can specify "TEAMID.com.your-company.ApplicationName"

    if (uburl == null) {
        HasiCloud = false;
        Console.WriteLine ("Can't find iCloud container, check your provisioning profile and entitlements");

        InvokeOnMainThread (() => {
            var alertController = UIAlertController.Create ("No \uE049 available",
            "Check your Entitlements.plist, BundleId, TeamId and Provisioning Profile!", UIAlertControllerStyle.Alert);
            alertController.AddAction (UIAlertAction.Create ("OK", UIAlertActionStyle.Destructive, null));
            viewController.PresentViewController (alertController, false, null);
        });
    } else { // iCloud enabled, store the NSURL for later use
        HasiCloud = true;
        iCloudUrl = uburl;
        Console.WriteLine ("yyy Yes iCloud! {0}", uburl.AbsoluteUrl);
    }
    CheckingForiCloud = false;
});

Obwohl das Beispiel nicht funktioniert, empfiehlt Apple, GetUrlForUbiquityContainer zu aufrufen, wenn eine App zum Vordergrund kommt.

Erstellen einer UIDocument-Unterklasse

Alle iCloud-Dateien und Verzeichnisse (ie. alles, das im Verzeichnis UbiquityContainer gespeichert ist) muss mithilfe von NSFileManager-Methoden verwaltet werden, das NSFilePresenter-Protokoll implementieren und über einen NSFileCoordinator schreiben. Die einfachste Möglichkeit, alles zu tun, ist es nicht, es selbst zu schreiben, sondern unterklassen UIDocument, was alles für Sie tut.

Es gibt nur zwei Methoden, die Sie in einer UIDocument-Unterklasse implementieren müssen, um mit iCloud zu arbeiten:

  • LoadFromContents – übergibt die NSData des Inhalts der Datei, damit Sie in Ihre Modellklasse/es entpacken können.

  • ContentForType – Anforderung, dass Sie die NSData-Darstellung Ihrer Modellklasse/es bereitstellen, um auf datenträger (und cloud) zu speichern.

In diesem Beispielcode aus iCloudUIDoc\MonkeyDocument.cs wird gezeigt, wie UIDocument implementiert wird.

public class MonkeyDocument : UIDocument
{
    // the 'model', just a chunk of text in this case; must easily convert to NSData
    NSString dataModel;
    // model is wrapped in a nice .NET-friendly property
    public string DocumentString {
        get {
            return dataModel.ToString ();
        }
        set {
            dataModel = new NSString (value);
        }
    }
    public MonkeyDocument (NSUrl url) : base (url)
    {
        DocumentString = "(default text)";
    }
    // contents supplied by iCloud to display, update local model and display (via notification)
    public override bool LoadFromContents (NSObject contents, string typeName, out NSError outError)
    {
        outError = null;

        Console.WriteLine ("LoadFromContents({0})", typeName);

        if (contents != null)
            dataModel = NSString.FromData ((NSData)contents, NSStringEncoding.UTF8);

        // LoadFromContents called when an update occurs
        NSNotificationCenter.DefaultCenter.PostNotificationName ("monkeyDocumentModified", this);
        return true;
    }
    // return contents for iCloud to save (from the local model)
    public override NSObject ContentsForType (string typeName, out NSError outError)
    {
        outError = null;

        Console.WriteLine ("ContentsForType({0})", typeName);
        Console.WriteLine ("DocumentText:{0}",dataModel);

        NSData docData = dataModel.Encode (NSStringEncoding.UTF8);
        return docData;
    }
}

Das Datenmodell in diesem Fall ist sehr einfach - ein einzelnes Textfeld. Ihr Datenmodell kann so komplex wie erforderlich sein, z. B. ein Xml-Dokument oder binäre Daten. Die primäre Rolle der UIDocument-Implementierung besteht darin, zwischen Ihren Modellklassen und einer NSData-Darstellung zu übersetzen, die auf dem Datenträger gespeichert/geladen werden kann.

Suchen und Öffnen von iCloud-Dokumenten

Die Beispiel-App behandelt nur eine einzelne Datei - test.txt - daher erstellt der Code in AppDelegate.cs eine NSPredicate und NSMetadataQuery sucht speziell nach diesem Dateinamen. Die NSMetadataQuery Ausführung erfolgt asynchron und sendet eine Benachrichtigung, wenn sie abgeschlossen ist. DidFinishGathering ruft vom Benachrichtigungsbeobachter aufgerufen, stoppt die Abfrage und ruft LoadDocument auf, die die UIDocument.Open Methode mit einem Abschlusshandler verwendet, um zu versuchen, die Datei zu laden und in einer MonkeyDocumentViewControlleranzuzeigen.

string monkeyDocFilename = "test.txt";
void FindDocument ()
{
    Console.WriteLine ("FindDocument");
    query = new NSMetadataQuery {
        SearchScopes = new NSObject [] { NSMetadataQuery.UbiquitousDocumentsScope }
    };

    var pred = NSPredicate.FromFormat ("%K == %@", new NSObject[] {
        NSMetadataQuery.ItemFSNameKey, new NSString (MonkeyDocFilename)
    });

    Console.WriteLine ("Predicate:{0}", pred.PredicateFormat);
    query.Predicate = pred;

    NSNotificationCenter.DefaultCenter.AddObserver (
        this,
        new Selector ("queryDidFinishGathering:"),
        NSMetadataQuery.DidFinishGatheringNotification,
        query
    );

    query.StartQuery ();
}

[Export ("queryDidFinishGathering:")]
void DidFinishGathering (NSNotification notification)
{
    Console.WriteLine ("DidFinishGathering");
    var metadataQuery = (NSMetadataQuery)notification.Object;
    metadataQuery.DisableUpdates ();
    metadataQuery.StopQuery ();

    NSNotificationCenter.DefaultCenter.RemoveObserver (this, NSMetadataQuery.DidFinishGatheringNotification, metadataQuery);
    LoadDocument (metadataQuery);
}

void LoadDocument (NSMetadataQuery metadataQuery)
{
    Console.WriteLine ("LoadDocument");

    if (metadataQuery.ResultCount == 1) {
        var item = (NSMetadataItem)metadataQuery.ResultAtIndex (0);
        var url = (NSUrl)item.ValueForAttribute (NSMetadataQuery.ItemURLKey);
        doc = new MonkeyDocument (url);

        doc.Open (success => {
            if (success) {
                Console.WriteLine ("iCloud document opened");
                Console.WriteLine (" -- {0}", doc.DocumentString);
                viewController.DisplayDocument (doc);
            } else {
                Console.WriteLine ("failed to open iCloud document");
            }
        });
    } // TODO: if no document, we need to create one
}

Anzeigen von iCloud-Dokumenten

Das Anzeigen eines UIDocument-Steuerelements sollte sich nicht von einer anderen Modellklasse unterscheiden – Eigenschaften werden in UI-Steuerelementen angezeigt, möglicherweise vom Benutzer bearbeitet und dann wieder in das Modell geschrieben.

Im Beispiel iCloudUIDoc\MonkeyDocumentViewController.cs wird der MonkeyDocument-Text in einem .UITextView ViewDidLoad lauscht auf die in der MonkeyDocument.LoadFromContents Methode gesendete Benachrichtigung. LoadFromContents wird aufgerufen, wenn iCloud neue Daten für die Datei enthält, sodass die Benachrichtigung angibt, dass das Dokument aktualisiert wurde.

NSNotificationCenter.DefaultCenter.AddObserver (this,
    new Selector ("dataReloaded:"),
    new NSString ("monkeyDocumentModified"),
    null
);

Der Beispielcodebenachrichtigungshandler ruft eine Methode zum Aktualisieren der Benutzeroberfläche auf – in diesem Fall ohne Konflikterkennung oder -auflösung.

[Export ("dataReloaded:")]
void DataReloaded (NSNotification notification)
{
    doc = (MonkeyDocument)notification.Object;
    // we just overwrite whatever was being typed, no conflict resolution for now
    docText.Text = doc.DocumentString;
}

Speichern von iCloud-Dokumenten

Um ein UIDocument zu iCloud hinzuzufügen, können Sie direkt (nur für neue Dokumente) aufrufen UIDocument.Save oder eine vorhandene Datei mithilfe NSFileManager.DefaultManager.SetUbiquitiouseiner vorhandenen Datei verschieben. Der Beispielcode erstellt ein neues Dokument direkt im ubiquity-Container mit diesem Code (hier gibt es zwei Abschlusshandler, eine für den Save Vorgang und eine andere für das Öffnen):

var docsFolder = Path.Combine (iCloudUrl.Path, "Documents"); // NOTE: Documents folder is user-accessible in Settings
var docPath = Path.Combine (docsFolder, MonkeyDocFilename);
var ubiq = new NSUrl (docPath, false);
var monkeyDoc = new MonkeyDocument (ubiq);
monkeyDoc.Save (monkeyDoc.FileUrl, UIDocumentSaveOperation.ForCreating, saveSuccess => {
Console.WriteLine ("Save completion:" + saveSuccess);
if (saveSuccess) {
    monkeyDoc.Open (openSuccess => {
        Console.WriteLine ("Open completion:" + openSuccess);
        if (openSuccess) {
            Console.WriteLine ("new document for iCloud");
            Console.WriteLine (" == " + monkeyDoc.DocumentString);
            viewController.DisplayDocument (monkeyDoc);
        } else {
            Console.WriteLine ("couldn't open");
        }
    });
} else {
    Console.WriteLine ("couldn't save");
}

Nachfolgende Änderungen am Dokument werden nicht direkt "gespeichert", sondern wir weisen UIDocument darauf hin, dass es sich geändert UpdateChangeCounthat, und es plant automatisch einen Speichervorgang auf dem Datenträger:

doc.UpdateChangeCount (UIDocumentChangeKind.Done);

Verwalten von iCloud-Dokumenten

Benutzer können iCloud-Dokumente im Verzeichnis "Dokumente" des "ubiquity container" außerhalb Ihrer Anwendung über Einstellungen verwalten. Sie können die Dateiliste anzeigen und zum Löschen wischen. Der Anwendungscode sollte in der Lage sein, die Situation zu behandeln, in der Dokumente vom Benutzer gelöscht werden. Speichern Sie keine internen Anwendungsdaten im Verzeichnis "Dokumente ".

Managing iCloud Documents workflow

Benutzer erhalten außerdem unterschiedliche Warnungen, wenn sie versuchen, eine iCloud-aktivierte Anwendung von ihrem Gerät zu entfernen, um sie über den Status von iCloud-Dokumenten im Zusammenhang mit dieser Anwendung zu informieren.

Screenshot shows a warning for Document Updates Pending.

Screenshot shows a warning for Delete i Cloud.

iCloud-Sicherung

Während die Sicherung auf iCloud kein Feature ist, auf das direkt von Entwicklern zugegriffen wird, kann sich die Art und Weise, wie Sie Ihre Anwendung entwerfen, auf die Benutzererfahrung auswirken. Apple bietet iOS-Daten Storage Richtlinien für Entwickler, die in ihren iOS-Anwendungen befolgt werden sollen.

Die wichtigste Erwägung besteht darin, ob Ihre App große Dateien speichert, die nicht vom Benutzer generiert werden (z. B. eine Magazinleseranwendung, die hunderte plus Megabyte von Inhalten pro Problem speichert). Apple bevorzugt, dass Sie diese Art von Daten nicht speichern, wo sie gesichert werden, um iCloud zu sichern und das iCloud-Kontingent des Benutzers unnötig auszufüllen.

Anwendungen, die große Datenmengen wie dies speichern, sollten sie entweder in einem der Benutzerverzeichnisse speichern, die nicht gesichert sind (z. B. Caches oder tmp) oder verwenden NSFileManager.SetSkipBackupAttribute , um ein Flag auf diese Dateien anzuwenden, sodass iCloud sie während der Sicherungsvorgänge ignoriert.

Zusammenfassung

In diesem Artikel wurde das neue iCloud-Feature eingeführt, das in iOS 5 enthalten ist. Es hat die schritte untersucht, die erforderlich sind, um Ihr Projekt so zu konfigurieren, dass iCloud verwendet wird und dann Beispiele für die Implementierung von iCloud-Features bereitgestellt werden.

Das Beispiel für den Schlüsselwertspeicher veranschaulicht, wie iCloud verwendet werden kann, um eine kleine Menge von Daten zu speichern, die der Art und Weise entsprechen, wie NSUserPreferences gespeichert werden. Das UIDocument-Beispiel zeigt, wie komplexere Daten über iCloud gespeichert und synchronisiert werden können.

Schließlich enthielt es eine kurze Diskussion darüber, wie sich die Ergänzung von iCloud Backup auf Ihr Anwendungsdesign auswirken sollte.