Une introduction à CloudKit

introduction

CloudKit est un framework Apple introduit avec iOS 8 en 2014. Son objectif est de fournir une solution simple permettant de stocker les données de vos applications dans le nuage à l'aide d'iCloud, en les rendant disponibles sur plusieurs appareils. Certaines des fonctionnalités clés de CloudKit incluent:

  • jusqu'à 1 PB de stockage d'actifs (images, fichiers audio, etc.)
  • jusqu'à 10 To de stockage de base de données (chaînes, nombres, tableaux, etc.)
  • Authentification utilisateur iCloud
  • notifications

Dans ce tutoriel, je vais vous apprendre à configurer et interagir avec CloudKit dans une application iOS en créant un exemple d'application appelé CloudBug. CloudBug affiche une liste de bogues avec un titre et une description, qui sont stockés dans iCloud à l'aide de CloudKit..

Exigences

Ce tutoriel nécessite que vous exécutiez Xcode 6+ et que vous disposiez d'un compte développeur iOS. Vous devrez également télécharger le projet de démarrage depuis GitHub..

1. Configuration du projet

La première chose que vous devez faire après l’ouverture du projet de démarrage est de changer la identifiant de paquet et équipe. Sélectionnez le CloudBug projet dans le Navigateur de projet et choisissez le CloudBug cible de la liste des cibles.

Changer la identifiant de paquet en une chaîne unique en utilisant la notation de service de nom de domaine inverse. Ensuite, sélectionnez l'équipe appropriée pour votre compte développeur.

Ouvrez le Les capacités onglet en haut et activer iCloud en basculant l'interrupteur à droite. Cela révélera les paramètres iCloud pour le CloudBug cible.

Dans les paramètres iCloud, cochez la case intitulée CloudKit activer CloudKit pour la cible CloudBug.

Générez et exécutez l'application sur un périphérique physique dans le simulateur iOS pour voir si tout fonctionne sans erreurs..

2. Création du type d'enregistrement de bogue

Clique le Tableau de bord CloudKit bouton en bas des paramètres iCloud. Cela ouvrira le tableau de bord CloudKit dans votre navigateur. Une fois connecté à votre compte de développeur, le tableau de bord CloudKit devrait apparaître. Avant de continuer, laissez-moi vous guider dans les éléments de la barre latérale gauche.

Schéma

  • Types d'enregistrement fonctionnent de manière similaire à une définition de classe normale. Les enregistrements sont créés comme des instances de classe à partir de ces types.
  • Rôles de sécurité fournir un moyen de laisser différents utilisateurs accéder aux données de différentes manières. Par exemple, un rôle de sécurité pourrait être utilisé pour autoriser uniquement les utilisateurs de niveau administrateur à lire et à écrire les autorisations de données..
  • Types d'abonnement sont utilisés pour gérer les différents abonnements de votre application si ceux-ci ont été implémentés.

Données publiques

  • Enregistrements utilisateur fonctionnent comme des disques ordinaires, sauf qu'ils sont spécifiquement liés à la Utilisateurs type d'enregistrement, qui ne peut pas être supprimé.
  • Zone par défaut est l'endroit où tous vos enregistrements publics et autres données seront stockés.

Données privées

  • Zone par défaut fonctionne exactement comme la zone publique par défaut, sauf qu'elle n'est accessible que par l'utilisateur actuellement connecté..

Admin

  • Équipe où vous pouvez voir d'autres développeurs collaborant sur le projet et modifier leurs autorisations.
  • Déploiement où vous pouvez voir quelles modifications seront apportées au schémaéléments lorsque votre projet entre dans un environnement de production.

Dans ce tutoriel, vous ne vous focaliserez que sur les types d'enregistrement et la zone par défaut publique. L'étape suivante consiste à créer votre premier type d'enregistrement.

Si vous sélectionnez Types d'enregistrement dans la barre latérale à gauche, vous remarquerez qu’un type nommé Utilisateurs existe déjà.

Créons un nouveau type d'enregistrement nommé Punaise qui contiendra un titre et une description. Cliquez sur le bouton plus en haut pour créer un nouveau type d'enregistrement..

Remplacez le nom du nouveau type d'enregistrement par Punaise et ajouter deux attributs, Titre et La description. Faire les deux attributs de type Chaîne avec seulement le Question option d'index cochée. Voici à quoi devrait ressembler le nouveau type d'enregistrement.

Cliquez sur sauvegarder en bas à droite pour créer le Punaise type d'enregistrement.

3. Créer des enregistrements dans le tableau de bord CloudKit

Quand vous sélectionnez Zone par défaut sous Données publiques, la Punaise le type d'enregistrement devrait déjà être sélectionné. Créez un nouvel enregistrement en cliquant sur Nouvel enregistrement ou en cliquant sur le bouton plus en haut.

Entrez ce que vous voulez pour l'enregistrement La description et Titre des champs.

Cliquez sur sauvegarder en bas à droite pour créer l'enregistrement. Vous verrez que votre enregistrement a été attribué un enregistrement unique IDCréé rendez-vous amoureux, Modifié rendez-vous amoureux, Créé par identifiant, et Modifié par identifiant. Peu importe le type d'enregistrement sur lequel un enregistrement est basé, il aura toujours ces cinq attributs..

4. Chargement des enregistrements

Revenez à Xcode et ouvrez MasterViewController.swift. En haut, ajoutez une instruction d'importation pour importer la structure CloudKit..

importer CloudKit

Mettre à jour le viewDidLoad méthode en ajoutant l'extrait de code suivant.

let conteneur = CKContainer.defaultContainer () let publicData = container.publicCloudDatabase let requête = CKQuery (recordType: "Bug", prédicat: NSPredicate (format: "TRUEPREDICATE", argumentArray: nil)) publicData.performQuery (query, inZoneWithID: nil) résultats, erreur dans si erreur == nil // Il n'y a pas d'erreur de bogue dans les résultats let newBug = Bug () newBug.title = bogue ["Titre"] comme! String newBug.description = bug ["Description"] comme! String self.objects.append (newBug) dispatch_async (dispatch_get_main_queue (), () -> Annuler dans self.tableView.reloadData ()) autre println (error)

Voyons ce qui se passe dans cet extrait de code.

  • Premièrement, nous obtenons une référence au conteneur par défaut pour votre application. Ce conteneur contient les types d'enregistrement et les enregistrements créés dans le tableau de bord CloudKit. Vous pouvez créer plusieurs conteneurs avec un identifiant unique dans le répertoire. Inspecteur cible> Capacités.
  • Deuxièmement, nous obtenons une référence à la base de données publique du conteneur. Le format est le même pour la base de données privée.
  • Nous créons ensuite une requête pour le Punaise type d'enregistrement en utilisant un NSPredicate exemple. Ce prédicat peut être utilisé pour filtrer les résultats de la requête, par exemple, récupérer uniquement les enregistrements créés ou modifiés après une certaine date. Pour cet exemple, nous récupérons tous les enregistrements de type Punaise.
  • Ensuite, nous demandons à la base de données d’exécuter la requête, ce qui déclenche une requête asynchrone. Lorsque la demande est terminée, le bloc d’achèvement est exécuté, nous remettant un résultats tableau et un Erreur objet.
  • Si la Erreur objet est néant, nous parcourons les éléments du résultats tableau et créer un local Punaise exemple pour chaque enregistrement. Chaque Punaise l'instance est ajoutée à la source de données de la vue table et la vue table est rechargée sur le thread principal.

Générez et exécutez votre application pour voir si l'enregistrement créé dans le tableau de bord CloudKit est chargé dans CloudBug..

Si vous voyez une erreur dans la console Xcode similaire à celle ci-dessous, assurez-vous que vous êtes connecté au compte iCloud approprié sur votre appareil de test. Ceci est également vrai si vous utilisez CloudBug dans le simulateur iOS..

Taper sur le bogue dans la vue tableau devrait présenter le contrôleur de vue de détail avec la description du bogue.

5. Créer des enregistrements

Bien que charger des données depuis iCloud via CloudKit puisse être très utile, CloudBug doit également permettre aux utilisateurs de créer de nouveaux enregistrements. Dans MasterViewController.swift, ajoutez l'extrait de code suivant au receiveBug (_ :) méthode.

let container = CKContainer.defaultContainer () let publicData = container.publicCloudDatabase let record = CKRecord (recordType: "Bug") record.setValue (bug.title, pourKey: "Titre") record.setValue (bug.description, pourKey: " Description ") publicData.saveRecord (record, completionHandler: record, erreur dans si erreur! = Nil println (error))

Les deux premières lignes doivent être familières. Nous obtenons une référence au conteneur par défaut et à la base de données publique. Nous créons un CKRecord par exemple, définir des valeurs pour le Titre et La description clés, et enregistrer l'enregistrement sur iCloud.

Notez que le record objet renvoyé d'iCloud dans le saveRecord (_: completionHandler :) le gestionnaire d'achèvement inclut les valeurs que vous avez définies manuellement ainsi que les cinq attributs par défaut que nous avons vus précédemment dans le tableau de bord CloudKit.

Générez et exécutez votre application, puis publiez un nouveau bogue en appuyant sur le bouton plus en haut à droite, en remplissant les champs de titre et de description. Robinet Poster et enregistrer le nouvel enregistrement dans iCloud dans la base de données CloudKit.

Revisitez le tableau de bord CloudKit et accédez au Zone par défaut sous Données publiques. Si tout s'est bien passé,vous devriez voir deux Punaise enregistrements dans la base de données.

6. Supprimer des enregistrements

Terminons ce tutoriel en permettant aux utilisateurs de supprimer un bogue. Ajoutez l'extrait de code suivant au tableView (_: commitEditingStyle: forRowAtIndexPath :) méthode juste au-dessus objects.removeAtIndex (indexPath.row).

let conteneur = CKContainer.defaultContainer () let publicData = container.publicCloudDatabase let bug = self.objects [indexPath.row] let requête = CKQuery (recordType: "Bug", prédicat: NSPredicate (format: "(Title ==% @) AND (Description ==% @) ", argumentArray: [bug.title, bug.description])) publicData.performQuery (requête, inZoneWithID: nil, completionHandler: résultats, erreur dans si erreur == nil si results.count > 0 let record: CKRecord! = Résultats [0] en tant que! CKRecord println (record) publicData.deleteRecordWithID (record.recordID, completionHandler: recordID, erreur dans if error! = Nil println (error)) else println (error))

Pour supprimer un enregistrement, nous créons une requête comme précédemment. Pour supprimer un enregistrement, cependant, nous créons un prédicat correspondant au titre et à la description du bogue. Le gestionnaire d'achèvement renvoie les résultats de la requête que nous utilisons pour supprimer l'enregistrement correspondant de la base de données publique..

Générez et exécutez l’application, puis supprimez l’un des bogues, soit en glissant vers la droite, soit en appuyant sur modifier bouton.

Revisitez le tableau de bord CloudKit pour voir si le bogue que vous avez sélectionné a bien été supprimé..

Conclusion

Dans ce tutoriel, vous avez créé votre première application CloudKit en liant votre application à iCloud. Vous avez appris à créer des types et des enregistrements dans le tableau de bord CloudKit et à les charger dans votre application. Outre l'ajout et la suppression d'enregistrements dans le tableau de bord CloudKit, nous avons également décrit l'ajout et la suppression d'enregistrements à l'aide de la structure CloudKit. Si vous avez des commentaires ou des questions, laissez-les dans les commentaires ci-dessous.