Mise à jour des applications iOS avec GroundControl

L'envoi d'une mise à jour sur l'App Store est inévitable si vous souhaitez apporter des améliorations majeures à une application. Cependant, il est fastidieux et fastidieux de passer par le processus de révision de l'App Store pour de simples modifications. Dans cet article, je vais vous montrer comment mettre à jour une application à distance à l'aide du projet GroundControl..


introduction

L’idée de GroundControl est simple: l’application récupère une liste de propriétés distante et met à jour sa NSUserDefaults avec le contenu de la liste de propriétés. Même si de nombreuses applications téléchargent des données à partir d'un backend dédié pour mettre à jour leur contenu de manière dynamique, la stratégie que je vais exposer dans cet article est idéale si un backend dédié n'est pas une option ou dépasse les exigences de votre application..

La configuration présentée dans ce tutoriel est légère et peu coûteuse. Non seulement il est peu coûteux, mais il est également facile à entretenir, ce qui est un facteur souvent négligé par les clients et les développeurs..

Il est important de souligner que les listes de propriétés sont idéales pour de petites quantités de données et ne doivent pas être utilisées pour remplacer un backend dédié. Si une application doit être mise à jour quotidiennement avec un nouveau contenu, la stratégie présentée dans ce tutoriel ne suffira pas..

Pour illustrer l’assemblage de toutes les pièces, nous allons créer une application iOS nommée de manière appropriée. Télécommande. Même si l’application elle-même ne fera pas grand chose, en intégrant GroundControl pour mettre à jour ses applications. NSUserDefaults Nous verrons à quel point il est facile de mettre à jour une application à distance avec un minimum de temps système. Commençons.


Étape 1: Configuration du projet

Créez un nouveau projet dans Xcode en sélectionnant le Application à vue unique modèle de la liste des modèles (figure 1). Nommez votre application Télécommande, entrez un identifiant d'entreprise, définissez iPhone pour la famille d'appareils, et vérifiez Utiliser le comptage automatique des références. Assurez-vous de décocher les cases restantes pour ce projet. Indiquez à Xcode où vous souhaitez enregistrer votre projet et appuyez sur le bouton Créer bouton (figure 2).


Étape 2: GroundControl

Le nom de Mattt Thompson pourrait vous sembler familier. Il est l’un des créateurs et la force motrice d’AFNetworking, la bibliothèque de réseaux la plus populaire pour iOS et OS X. GroundControl est basé sur AFNetworking et offre une solution simple pour configurer à distance une application en mettant à jour ses applications. NSUserDefaults. Il le fait à travers une catégorie sur NSUserDefaults, ce qui permet NSUserDefaults se mettre à jour de manière asynchrone avec une liste de propriétés distante.

Peu importe où se trouve la liste de propriétés, tant qu'elle est accessible via le protocole HTTP (S) et que le type de contenu de la réponse est défini sur application / x-plist.

Sur la page GitHub de GroundControl, Mattt fournit deux exemples de mise en œuvre du côté serveur de l'histoire, une implémentation Ruby et une implémentation Python. Cependant, je vous ai promis que la configuration serait légère et peu coûteuse. Au lieu d’utiliser un serveur que vous devez maintenir, nous utiliserons Service de stockage simple d'Amazon ou S3. Comme je l'ai expliqué précédemment, les exigences sont simples: 1) le fichier doit être une liste de propriétés et 2) le type de contenu de la réponse doit être application / x-plist. Amazon S3 est un ajustement parfait.

AWS S3 est non seulement parfaitement adapté à la gestion de fichiers statiques, mais il a gagné ses galons au fil des ans. Même si votre application figure dans le top 10 de l'App Store, S3 continuera de vous transmettre la liste des propriétés sans problèmes. Avant d’aller sur la console AWS (Amazon Web Services), vous devez d’abord intégrer GroundControl à votre projet..


Étape 3: Ajout de AFNetworking et GroundControl

GroundControl est construit sur AFNetworking, ce qui signifie que vous devez ajouter AFNetworking à votre projet Xcode. Même si nous pourrions ajouter AFNetworking et GroundControl à l'aide de CocoaPods, nous ajouterons les deux bibliothèques manuellement, car certains d'entre vous ne sont peut-être pas familiers avec CocoaPods. Téléchargez la dernière version de AFNetworking et GroundControl et faites glisser chaque bibliothèque dans votre projet Xcode. Assurez-vous de copier le contenu du dossier dans votre projet en cochant la case intitulée Copier des éléments dans le dossier du groupe de destination (si nécessaire) et n'oubliez pas d'ajouter les deux bibliothèques à la cible de contrôle à distance (figures 3 et 4).

AFNetworking s'appuie sur le Configuration du système et Services de base mobiles cadres pour certaines de ses fonctionnalités. Il est donc nécessaire de lier votre projet à ces cadres. Sélectionnez votre projet dans le Navigateur de projet et sélectionnez le Télécommande cible de la liste des cibles. Choisir Phases de construction en haut, ouvrez le Lien binaire avec des bibliothèques tiroir et ajoutez les deux cadres à votre projet (figure 5).

Avant de pouvoir travailler avec AFNetworking et GroundControl, nous devons mettre à jour la version du projet. Prefix.pch fichier en ajoutant une instruction d'importation pour les cadres que nous venons d'ajouter au projet. Jetez un coup d'œil à l'extrait ci-dessous pour plus de précisions.

 // // En-tête de préfixe pour tous les fichiers source de la cible 'Contrôle à distance' dans le projet 'Contrôle à distance' // #import  #ifndef __IPHONE_4_0 #warning "Ce projet utilise des fonctionnalités uniquement disponibles dans iOS SDK 4.0 et versions ultérieures." #endif #ifdef __OBJC__ #import  #importation  #importation  #importation  #fin si

Étape 4: Intégration de GroundControl

Nous commençons par ajouter deux instructions d'importation au fichier d'implémentation du délégué d'application, une pour AFNetworking et une autre pour GroundControl. Si vous utilisez AFNetworking à différents endroits de votre projet, il peut être judicieux d’ajouter l’instruction d’importation pour AFNetworking à celle de votre projet. Prefix.pch fichier.

 #import "AFNetworking.h" #import "NSUserDefaults + GroundControl.h"

Intégrer GroundControl est la partie la plus facile car il ne nécessite que deux lignes de code. Dans le délégué de l'application applicationDidBecomeActive: méthode, nous appelons une méthode d'assistance pour initialiser GroundControl.

 - (void) applicationDidBecomeActive: (UIApplication *) application // Initialize GroundControl [self initializeGroundControl]; 

La méthode des assistants ne pourrait être plus simple grâce à la catégorie sur NSUserDefaults fourni par GroundControl. Nous créons l'URL pour la liste de propriétés et le passons comme argument dans registerDefaultsWithURL:. Cela garantira que la liste de propriétés est téléchargée de manière asynchrone. Une fois téléchargé, NSUserDefaults est automatiquement mis à jour avec le contenu de la liste de propriétés.

 - (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://www.example.com/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: url]; 

Une autre option est d'appeler registerDefaultsWithURL: succès: échec: à la place, si vous préférez travailler avec des rappels de succès et d’échec. Pour encore plus de contrôle, GroundControl propose une troisième méthode, registerDefaultsWithURLRequest: succès: échec:. Cette méthode accepte une instance de NSURLDemande ainsi qu'un bloc de succès et d'échec.

Cela pourrait vous surprendre, mais intégrer GroundControl était la partie la plus difficile. Les deux dernières étapes sont (1) la création de la liste de propriétés et (2) le téléchargement sur le S3 d’Amazon..


Étape 5: Créer une liste de propriétés

Créez un nouveau fichier dans Xcode en sélectionnant le Ressource onglet à gauche et en choisissant Liste de propriété à droite (figure 6). Nommez le fichier Télécommande et enregistrez-le sur le bureau de votre ordinateur. Il n'est pas nécessaire de l'ajouter à votre projet Xcode. Le moyen le plus simple de modifier la liste des propriétés est d'utiliser Xcode. Regardez la capture d'écran ci-dessous pour voir à quoi ressemble la liste des propriétés et peut être modifiée dans Xcode (figure 7). N'oubliez pas qu'une liste de propriétés ne peut contenir que des booléens, des dates, des nombres, des données binaires, des chaînes, des tableaux et des dictionnaires. Il est recommandé d’espacer les clés des espaces de noms (par exemple, avec le préfixe de classe du projet) pour s’assurer qu’elles ne sont pas en conflit avec d’autres entrées stockées dans. NSUserDefaults.

Étape 6: Téléchargez la liste des propriétés

Pour utiliser les services Web d'Amazon, vous avez besoin d'un compte Amazon. Les coûts associés au S3 d'Amazon sont extrêmement bas et il est probable que vous ne serez pas facturé pendant un certain temps, car la liste de propriétés ne fait que quelques kilo-octets..

Vous pouvez télécharger la liste de propriétés sur Amazon S3 à l'aide de la console AWS d'Amazon ou à l'aide d'une application prenant en charge S3 d'Amazon, telle que la fantastique transmission de Panic..

Après le téléchargement de la liste de propriétés, il reste trois tâches à effectuer: (1) copier l'URL de la liste de propriétés, (2) accorder un accès public à la liste de propriétés et (3) définir le type de contenu approprié..

Copier l'URL

Dans la console AWS, sélectionnez la liste de propriétés, puis cliquez sur le bouton. Propriétés bouton en haut à droite. Sélectionnez l'onglet nommé Détails dans le panneau des propriétés (figure 8). Copiez le lien de la liste de propriétés et mettez à jour le initializeGroundControl méthode dans le délégué d'application avec l'URL correcte.

Accorder un accès public

Sélectionnez l'onglet nommé Les permissions dans le panneau des propriétés et ajoutez un nouvel ensemble d'autorisations à la liste des propriétés en cliquant sur le bouton Ajouter plus de permissions bouton. Réglez le bénéficiaire sur Toutes les personnes et limiter les autorisations à Ouvrir / Télécharger. Cela garantira que votre application peut télécharger la liste de propriétés. N'oubliez pas de cliquer sur le bouton Enregistrer pour propager les modifications.

Définir le type de contenu

Sélectionnez l'onglet nommé Métadonnées dans le panneau des propriétés et définissez la valeur de la clé Type de contenu à application / x-plist. N'oubliez pas de cliquer sur le bouton Enregistrer pour propager les modifications.


Étape 7: Construire et exécuter

Votre application est maintenant prête à être mise à jour à distance. La manière dont votre application répond aux modifications apportées par la liste de propriétés dépend de votre application. Cet article vous montre seulement à quel point il est facile de mettre à jour une application à distance sans avoir à soumettre une nouvelle version à l'App Store..

Vous pouvez tester si tout fonctionne en modifiant légèrement le initializeGroundControl méthode. Au lieu d'invoquer registerDefaultsWithURL:, nous utilisons registerDefaultsWithURL: succès: échec: fourni par GroundControl. Si vous avez correctement implémenté GroundControl, le dictionnaire du bloc de succès doit contenir les données de la liste de propriétés. Votre application NSUserDefaults sera mis à jour automatiquement.

 - (void) initializeGroundControl NSURL * url = [NSURL URLWithString: @ "https://s3.amazonaws.com/com.mobiletuts.bartjacobs/RemoteControl.plist"]; [[NSUserDefaults standardUserDefaults] registerDefaultsWithURL: succès de l'URL: ^ (NSDictionary * par défaut) NSLog (@ "Defaults>% @", par défaut);  échec: ^ (erreur NSError *) NSLog (@ "Erreur>% @ avec les informations utilisateur% @.", erreur, [erreur userInfo]); ]; 

Dropbox

L’immense succès et le taux d’adoption rapide de Dropbox ont permis l’apparition de nombreuses applications intelligentes et utiles. Pour les personnes non familiarisées avec AWS et Xcode, il peut être plus simple de travailler avec Dropbox. Bien que Dropbox soit une excellente solution et offre la possibilité de rendre un fichier accessible au public en le plaçant dans le dossier public Dropbox, Dropbox ne peut pas être utilisé avec la version actuelle de GroundControl. La raison en est que le type de contenu d’une liste de propriétés fournie par Dropbox est automatiquement défini sur texte simple au lieu des requis application / x-plist. AFNetworking génère une erreur en raison du fait que le type de contenu requis ne correspond pas application / x-plist.

Cependant, il est possible d’utiliser Dropbox pour mettre à jour une application à distance. La mise en garde est que vous devrez faire vous-même une partie du travail lourd, c’est-à-dire télécharger de manière asynchrone la liste des propriétés et mettre à jour les applications. NSUserDefaults.

Malgré l'utilité du dossier public Dropbox, son avenir est incertain. Il est également difficile de savoir s’il existe une limite de bande passante imposée aux fichiers du dossier public Dropbox. En d'autres termes, si vous souhaitez utiliser Dropbox pour la mise à jour à distance d'une application iOS ou OS X, gardez à l'esprit que cela pourrait se rompre à un moment donné ou que votre compte Dropbox pourrait être suspendu en raison du dépassement de certaines limitations..


Conclusion

Il n'est pas toujours nécessaire de créer un backend personnalisé pour une application iOS ou OS X si tout ce que vous avez à faire est de mettre à jour une poignée de paramètres de temps à autre. Les stratégies décrites dans cet article montrent comment mettre à jour une application à distance avec une simple liste de propriétés..

Bien sûr, il existe plusieurs autres possibilités pour mettre à jour une application à distance. Par exemple, il est possible d'utiliser un service tel que Parse. Cependant, je trouve que même Parse est "trop" si tout ce que vous voulez faire est de mettre à jour une poignée de paramètres.