Une introduction à ClockKit

introduction

À la WWDC 2015, Apple a annoncé sa première mise à jour majeure du logiciel Apple Watch, watchOS 2. Cette nouvelle mise à jour comportait de nombreuses nouvelles API et fonctionnalités dont les développeurs pourraient tirer parti, notamment des applications natives, un accès à davantage de matériel Apple Watch et une meilleure communication avec l'application iOS parente..

Dans ce tutoriel, je vais vous montrer comment tirer parti d'une autre nouvelle fonctionnalité, la possibilité de créer des complications de surveillance personnalisées à l'aide du framework ClockKit. Ce tutoriel nécessite que vous exécutiez Xcode 7 sur OS X Yosemite (10.10) ou plus tard.

Si vous ne le savez pas déjà, les complications de l'Apple Watch sont les petits éléments de l'interface qui affichent des informations sur le cadran.

La capture d'écran ci-dessus montre comment cinq complications sont affichées sur le Modulaire regarder le visage en plus de l'heure dans le coin supérieur droit.

1. Mise en place du projet

Créez un nouveau projet dans Xcode, en utilisant le watchOS> Application> Application iOS avec application WatchKit modèle.

Ensuite, configurez le projet comme indiqué ci-dessous, en vous assurant que le Inclure la complication est vérifié.

Une fois que Xcode a créé votre projet, ouvrez le Introduction de WatchKit dans ClockKit dans le Navigateur de projet. Vous verrez un nouveau Configuration des complications section comme indiqué ci-dessous.

Les cinq cases à cocher sous Familles prises en charge représentent les différentes familles de complications que votre application prend en charge. Dans ce tutoriel, nous allons nous concentrer sur les Modulaire Grand famille. Vous pouvez décocher les autres cases pour le moment.

Comme indiqué dans Apple watchOS 2 Guide de transitionIl est vivement recommandé que votre application prenne en charge les cinq familles. L'image suivante montre où ces différentes familles sont utilisées.

Crédit image: Apple watchOS 2 Guide de transition

2. Mise en place de la complication

Pour vous apprendre à utiliser ClockKit, vous allez créer une complication simple qui indique l'heure, le nom et le genre d'émissions télévisées contrefaites sur une station donnée tout au long de la journée..

Pour commencer, ouvrez ComplicationController.swift dans le Introduction de WatchKit dans ClockKit dossier. Xcode a automatiquement créé ce fichier pour vous. Il contient un ComplicationController classe, qui se conforme à et met en œuvre le CLKComplicationDataSource protocole.

Les méthodes associées à ce protocole permettent de fournir à ClockKit des données sur les complications à afficher. Les méthodes du protocole contiennent un gestionnaire que vous devez appeler pour transmettre les données à ClockKit..

Les délais

Lorsque vous fournissez des données à ClockKit, vous le faites sous la forme d'une timeline. Pour ce faire, remplissez la timeline de votre complication avec des objets de données liés à un moment précis. Ces objets de données sont modélisés par le CLKComplicationTimelineEntry classe. Quand un moment particulier est atteint, ClockKit affiche automatiquement le contenu correct pour votre application..

ClockKit récupère et met en cache vos entrées dans la timeline bien avant l'heure à laquelle elles sont censées être affichées. Cela signifie que les données doivent pouvoir être récupérées et planifiées à l'avance. Chaque application dispose d'un budget limité pour actualiser son contenu en arrière-plan. En d'autres termes, les complications sont ne pas un remplacement pour les notifications push ou le centre de notification.

Le principal avantage de fournir des données de cette manière est de maintenir une excellente expérience utilisateur. Le contenu de chaque complication est immédiatement disponible lorsque l'utilisateur lève le poignet. L'un des autres avantages de l'utilisation de ce modèle de données chronologiques est la possibilité d'adopter facilement le nouveau Voyage dans le temps Cela se produit lorsque l’utilisateur tourne la couronne numérique tout en regardant le cadran de la montre et que les données relatives aux complications reflètent le temps écoulé. a voyagé à.

Dans votre code, sous le Configuration de la timeline vous verrez quatre méthodes nécessaires pour configurer la timeline. Pour rendre ce didacticiel simple et facile à comprendre, nous allons uniquement prendre en charge les déplacements dans le temps et fournir des données sur une période allant jusqu'à 24 heures. Pour ce faire, a mis à jour la mise en œuvre des trois premières méthodes, comme indiqué ci-dessous..

func getSupportedTimeTravelDirectionsForComplication (complication: CLKComplication, avec gestionnaire de handler: (CLKComplicationTimeTravelDirections) -> Void  func getTimelineEndDateForComplication (complication: CLKComplication, avec gestionnaire Handler: (NSDate?) -> Annulation) handler (NSDate (timeIntervalSinceNow: (60 * 60 * 24))

La quatrième méthode de la Configuration de la timeline section, getPrivacyBehaviorForComplication (_: withHandler :), est utilisé pour spécifier si vous souhaitez ou non que le contenu de votre complication soit affiché lorsque le périphérique est verrouillé ou non. La valeur par défaut transmise au gestionnaire, ShowOnLockScreen, signifie que les données seront toujours visibles.

Modèles

Faites défiler vers le bas de la ComplicationController classe et trouver le getPlaceHolderTemplateForComplication (_: withHandler :) méthode. Dans cette méthode, vous créez et passez un CLKComplicationTemplate Retour au gestionnaire pour les données que vous souhaitez afficher. Dans ce tutoriel, vous allez utiliser le CLKComplicationTemplateModularLargeStandardBody modèle, qui affiche trois lignes de texte. Pour chaque émission télévisée, ces trois lignes vont être:

  • heure de début et de fin 
  • prénom
  • genre

Il existe de nombreux modèles disponibles dans les cinq familles de complications. L'image suivante montre les modèles disponibles et met en évidence celui que nous allons utiliser dans ce tutoriel..

Crédit d'image: créer des complications avec ClockKit (WWDC 2015)

Fournisseurs de texte

Étant donné que l'espace disponible pour le contenu est limité sur un affichage de montre, et plus encore dans les complications de petite taille, vous fournissez des données texte à ClockKit, à l'aide de CLKTextProvider objets. Ces fournisseurs cherchent à éviter de tronquer le contenu, ce qui entraînerait une mauvaise expérience utilisateur. Avec ces fournisseurs de texte, vous décrivez vos intentions concernant le contenu que vous souhaitez afficher, puis ClockKit gère le formatage final pour vous..

Par exemple, si vous souhaitez afficher une date dans votre complication, vous utilisez le CLKDateTextProvider avec une date spécifiée et un ensemble d'unités (mois, jour, heure, etc.). Cela formatera correctement la date pour l'espace disponible. Un exemple de ceci serait de prendre la date "jeudi 22 octobre" et de pouvoir la formater pour:

  • Jeudi 22 octobre
  • Jeudi 22 octobre
  • 22 octobre
  • 22

Pour obtenir une liste complète des fournisseurs de texte et des modèles disponibles dans ClockKit, consultez le document Framework Framework ClockKit d’Apple..

Maintenant que vous connaissez les modèles de base et les fournisseurs de texte, vous êtes prêt à créer un modèle pour votre complication. dans le getPlaceHolderTemplateForComplication (_: withHandler :) méthode, ajoutez le code suivant:

func getPlaceholderTemplateForComplication (complication: CLKComplication, withHandler handler: (CLKComplicationTemplate?) -> Void) // Cette méthode sera appelée une fois par complication prise en charge, et sera mis en cache avec template = : NSDate (), endDate: NSDate (timeIntervalSinceNow: 60 * 60 * 1.5)) template.body1TextProvider = CLKSimpleTextProvider (texte: "Afficher le nom, shortText:" Nom ") shortText: nil) gestionnaire (modèle)

Avec ce code, vous créez un Corps standard modèle pour le Modulaire Grand famille et lui donner trois fournisseurs de texte. le CLKSimpleTextProvider les objets doivent être simples. le CLKTimeIntervalTextProvider prend deux dates et les formate dans une chaîne, telle que "10h00-15h30" ou "13h00-2h45".

3. Tester la complication

Maintenant que nous avons configuré notre chronologie et fourni à ClockKit un modèle pour notre complication, nous pouvons enfin tester les résultats de notre travail. En haut à gauche de votre fenêtre Xcode, choisissez votre cible de complication et l'un des simulateurs disponibles. Cliquez sur le bouton de lecture pour créer et exécuter votre application..

Lorsque le simulateur Apple Watch sera lancé, le visage de la montre ci-dessous vous sera probablement présenté:

Pour tester votre complication, vous devez suivre quelques étapes..

Étape 1

presse Commande + Maj + 2 simuler un contact forcé et cliquer sur le cadran.

Étape 2

presse Commande + Maj + 1, glisser vers la droite au Modulaire face et cliquez sur le Personnaliser bouton.

Étape 3

Glissez vers la droite, appuyez sur la complication du milieu et faites défiler vers le bas, en utilisant votre trackpad ou votre souris pour simuler la couronne numérique.

Étape 4

Simulez à nouveau le contact forcé pour revenir au sélecteur de cadran de montre et choisissez la Modulaire visage.

Toutes nos félicitations. Vous venez de recevoir la toute première complication ClockKit à apparaître sur un cadran de montre Apple Watch. Il est temps à présent de commencer à le remplir avec des données (fausses) réelles.

4. Fournir des données à ClockKit

Avant de créer des entrées de chronologie pour notre complication, nous allons d’abord créer un Spectacle struct pour modéliser facilement nos données, puis créer des valeurs de ce nouveau type. Ajoutez l'extrait de code suivant à ComplicationController.swift, avant le début de la ComplicationController définition de classe.

struct Afficher nom de var: String var nom abrégé: String? var genre: String var startDate: NSDate longueur de var: NSTimeInterval let heure: NSTimeInterval = 60 * 60 let shows = [Afficher (nom: "Into the Wild", nom abrégé: "Into Wild", genre: "Documentary", startDate: NSDate (), durée: heure * 1,5), Spectacle (nom: "24/7", nom court: nil, genre: "Drame", date de début: NSDate (timeIntervalSinceNow: hour * 1.5), durée: heure), Spectacle (nom : "Comment devenir riche", shortName: "Devenir riche", genre: "Documentaire", date de début: NSDate (timeIntervalSinceNow: hour * 2.5), durée: heure * 3), Show (nom: "NET Daily", shortName: nil, genre: "News", startDate: NSDate (timeIntervalSinceNow: hour * 5.5), durée: hour)]

Comme vous pouvez le constater, nous créons le Spectacle structure et créer un tableau statique qui contient quatre spectacles. Vous utiliserez ce tableau comme source de données pour votre complication..

dans le ComplicationController classe, trouver le getCurrentTimelineEntryForComplication (_: withHandler :) méthode et ajoutez le code suivant:

func getCurrentTimelineEntryForComplication (complication: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry?) -> Void)) // Appelez le gestionnaire avec la ligne de temps actuelle (voir CLOComplicationTimelineEntry?) -> Void. startDate: show.startDate, endDate: NSDate (timeInterval: show.length, sinceDate: show.startDate)) template.body1TextProvider = CLKSimpleTextProvider (texte: show.name, shortText: show.shortName) template.body2_TextProvider = CLKSimple_serveur) .genre, shortText: nil) let entry = CLKComplicationTimelineEntry (date: NSDate (heureInterval: heure * -0,25, depuisDate: show.startDate), gestionnaire ComplicationTemplate: (modèle)

Vous créez d'abord un modèle de complication, exactement comme avant, et vous le remplissez de contenu. Vous créez alors un CLKComplicationTimelineEntry objet avec deux paramètres:

  • Un rendez-vous
  • un modèle

La date que vous spécifiez ici est l'endroit où cette entrée sera positionnée sur la timeline et affichée à l'utilisateur. Pour notre application, nous donnons à notre chronologie une date de quinze minutes avant le début du spectacle pour qu'il apparaisse sur la montre de l'utilisateur juste avant le début du spectacle..

Ensuite, vous devez fournir à ClockKit tous les autres spectacles que vous avez créés pour votre complication. Ceci est fait dans le getTimelineEntriesForComplication (_: afterDate: limit: withHandler :) méthode. Le paramètre limit de cette méthode existe de sorte qu'une seule application ne puisse pas surcharger le cache ClockKit avec des données et sait exactement combien d'entrées de la timeline elle doit fournir..

Ajoutez le code suivant au getTimelineEntriesForComplication (_: afterDate: limit: withHandler :) méthode en ComplicationController.swift:

func getTimelineEntriesForComplication (complication: CLKComplication, afterDate date: NSDate, limit: Int, withHandler handler: (([CLKComplicationTimelineEntry]? - - Void)) // Appelez le gestionnaire avec les entrées de ligne de temps après la date donnée var: CLKComplicationTimelineEntry] = [] pour afficher dans les spectacles si entry.count < limit && show.startDate.timeIntervalSinceDate(date) > 0Laisser modèle = : show.shortName) template.body2TextProvider = CLKSimpleTextProvider (texte: show.genre, shortText: nil) let entry = CLKComplicationTimelineEntry (date: NSDate (timeInterval: hour * -0.25, sinceDate: show.startDate), entrées spécifiées dans le modèle. ajouter (entrée) gestionnaire (entrées)

Vous créez d’abord un tableau vide de CLKComplicationTimelineEntry objets. Vous parcourez ensuite les émissions que vous avez créées précédemment. Pour chaque émission, si elle commence après la date fournie par ClockKit et que la limite d'entrées n'a pas été dépassée, vous créez un modèle et l'ajoutez au tableau..

À la fin de cette méthode, vous appelez le gestionnaire avec votre tableau. Qui passe néant ou un tableau vide au gestionnaire dira à ClockKit que vous n’avez plus de données à fournir et il cessera d’interroger votre CLKComplicationDataSource objet jusqu'à ce que plus de données sont nécessaires.

Avec ces méthodes en place, vous êtes maintenant prêt à voir votre complication terminée. Cliquez sur le bouton de lecture pour créer et exécuter votre application. Lorsque le simulateur sera lancé pour la première fois, votre complication affichera les données du premier spectacle créé..

Si vous faites ensuite défiler avec votre trackpad ou votre souris pour passer en mode Time Travel, vous verrez que les autres émissions que vous avez créées sont affichées par votre complication au bon moment dans le temps..

Conclusion

Dans ce didacticiel, vous avez appris les principes de base du framework ClockKit et comment créer une complication de visage de montre personnalisée pour Apple Watch. Cela comprenait les cinq familles de complications, les modèles de base et les fournisseurs de texte, ainsi que des données basées sur un calendrier..

Dans votre complication, vous avez également intégré la prise en charge de la fonctionnalité de suivi temporel watchOS 2 et l’ajout de nouvelles données au fil du temps. Comme toujours, si vous avez des commentaires ou des questions, laissez-les dans les commentaires ci-dessous.