Principes de programmation pour iOS

#ide#ios#mobile

Apple a enchaîné plusieurs réussites majeures ces dernières années en proposant des produits technologiques innovants et attractifs tels que l’iPhone ou l’iPad. Ces produits ouvrent la voie à de nouvelles possibilités dans le domaine des téléphones portables et des tablettes tactiles, aussi bien pour répondre aux attentes du grand public que pour certains besoins d’entreprise.

Ces différents appareils ont un socle technique commun, il s’agit du système d’exploitation appelée iOS (originellement iPhone Operating System) sur lequel est basé leur fonctionnement général.

1. Présentation d‘iOS

 

Ce système d’exploitation est un dérivé du Mac OS X (système d’exploitation équipant l’ensemble des ordinateurs distribués par Apple) spécifiquement adapté pour répondre aux besoins des appareils mobiles comme la gestion tactile, le multi-touch et la détection des mouvements de l’appareil (accéléromètre).

La première version du système d’exploitation est apparue en 2007 en même temps que la sortie du premier iPhone et a connu à ce jour trois évolutions majeures de versions afin d’intégrer de nombreuses fonctionnalités comme le push (système d’alerte pour pousser de l’information à l’utilisateur), le copier-coller, le multi-tâches, etc.

iOS est fourni avec quelques applications natives comme la gestion des mails, de calendriers, de photos, de plans, le navigateur Safari mais il est possible d’y installer d’autres applications tierces en les téléchargeant depuis un référentiel d’applications appelé l’AppStore. Pour créer une application destinée à fonctionner sur iOS, il existe plusieurs solutions techniques mais nous allons dans cet article nous focaliser sur la solution « officielle » proposée par Apple. Ce dernier fournit un Sofware Developpement Kit (SDK) gratuit permettant de disposer de l’ensemble des librairies techniques nécessaires et des outils pour coder en Objective-C (langage de programmation objet dérivé du C), simuler les différents appareils et packager ses développements.

2. L’environnement de développement

Avant de commencer, il est important de savoir que le pré-requis à l’installation du SDK d’Apple est de disposer d’un ordinateur fonctionnant sur Mac OS X. Pour continuer, il va donc falloir passer par l’acquisition d’un iMac ou d’un MacBook.

Une fois en possession d’un environement Mac OS X, il faut créer un compte développeur sur le site Web dédié aux développeurs, http://developer.apple.com/programs/register, afin de pouvoir télécharger gratuitement le SDK. Attention, il faut être patient ou avoir une très bonne bande passante car le fichier à récupérer est d’environ 3 Go.

Après l’installation du SDK, on dispose de l’ensemble des librairies nécessaires et d’un environnement de développement complet composé de plusieurs outils :

  • L’éditeur XCode 3 permettant de développer, compiler et déboguer dans le langage Objective-C ;
  • Interface Builder afin de construire avec un éditeur WYSIWYG les écrans des applications en utilisant les librairies de composants graphiques et de faire le lien entre les évènements et les actions sur l’interface avec la partie de code ;
  • Instruments pour analyser les performances afin d’optimiser les applications notamment au niveau de la gestion de l’espace mémoire ;
  • iOS Simulator permettant de tester les développements à partir d’émulateurs d’iPhone et d’iPad.

Les frameworks intégrés au SDK sont organisés en quatre parties qui correspondent au découpage en couche du système :

  • Cocoa Touch : couche de plus haut niveau permettant la gestion des interfaces mais aussi de gérer le multi-tâches, les alertes, etc.
  • Media : couche pour la gestion multimédia comme l’audio et le vidéo mais aussi les aspects graphiques comme le support d’OpenGL pour le rendu 2D et 3D
  • Core Services : couche haute du système comme le support du format XML, l’accès à une base SQLite, etc.
  • Core OS : la couche basse du système avec notamment la gestion de la sécurité

Pour aller plus loin, il est cependant nécessaire de s’inscrire en ligne au « iOS Developper Program » (http://developer.apple.com/programs/ios) dont le coût s’élève à 99$ par an. Cet investissement permet de :

  • déployer les applications réalisées directement sur son appareil (iPhone ou iPad) ainsi que sur celui de ses amis (afin d’aller plus loin que le simulateur) ;
  • pouvoir télécharger gratuitement la dernière version de l’outil de développement XCode 4 (en vente au prix de 4.99$) qui intègre directement Interface Builder afin d’éviter les allers-retours entre les deux outils ;
  • pouvoir soumettre son application à l’AppStore afin de rendre disponible celle-ci à l’ensemble des utilisateurs d’iPhone ou d’iPad.

A noter que le SDK comprend également un grand nombre de documents, d’exemples de code et d’accès à des vidéos pour faciliter la prise en main de l’environnement de développement.

3. Arborescence d’un projet


Fig. 2 : arborescence d’un projet
L’outil de développement propose plusieurs templates de projets permettant d’initialiser une application de base selon le besoin : application avec une seule vue, application avec des onglets, etc. Ces projets ont une arborescence commune qui est composée de répertoires et fichiers :

  • Classes : ce répertoire contient le code source de l’application avec deux types de fichiers (il est possible d’y créer des sous-répertoires pour y organiser le code source selon ses besoins) :
    • les interfaces (fichiers avec les extensions h) qui contient les déclarations des variables et des méthodes ;
    • les classes (fichiers avec les extensions m) implémentant les interfaces.
  • Other Sources : contient la classe main.m qui est le lanceur de l’application.
  • Resources : contient plusieurs types de fichiers :
    • le fichier « plist » (Property List File) permettant de paramétrer et décrire l’application (comme par exemple le chemin vers l’image représentant l’icône de l’application) ;
    • Les fichiers représentant les interfaces graphiques appelé fichiers nib (avec les extensions xib) qui sont modifiables à partir de l’outil « Interface Builder ».
  • Frameworks : contient l’ensemble des librairies fournies avec le SDK :
    • UIKit* : classes permettant de construire et interagir avec l’interface utilisateur (par exemple UIButton correspondant à un bouton) ;
    • Foundation* : classes de base du langage Objective-C (par exemple NSString représentant une chaine de caractères) ;
    • CoreGraphics : classes permettant d’interagir sur les aspects graphiques (par exemple CGColor permettant de gérer des couleurs).
  • Products : contient le fichier avec l’extension « app » correspondant à l’application compilée prête à être installée sur un iPhone ou un iPad (un script de création de l’archive d’application est disponible lors de la création du projet).

* Les frameworks UIKit et Foundation représentent l’ensemble des API correspondant à la couche Cocoa Touch

4. Principe de programmation

Comme nous venons de le voir, lorsqu’un projet est créé avec l’outil de développement fourni avec le SDK, un certain nombre de répertoires et de fichiers sont automatiquement générés afin de disposer d’une structure de base de l’application. .

La programmation d’une application nécessite une bonne prise en main de l’outil de développement, une grande connaissance du langage Objective-C et une maîtrise du design pattern MVC (modèle-vue-contrôleur).

Gestion des vues

La composition des vues se réalise graphiquement par l’intermédiaire de l’outil Interface Builder qui s’ouvre automatiquement en cliquant sur les fichiers à l’extension « xib » (à partir de la version 4 de l’outil de développement Xcode, la gestion des vues est directement intégrée évitant d’avoir à naviguer entre plusieurs fenêtres).

Fig. 3 : création de la vue

A partir d’une palette offrant l’ensemble des composants graphiques des librairies du SDK, il est possible de réaliser un glisser-déposer des éléments visuels disponibles vers une vue afin de construire complètement sa propre page.

Voici les principaux types d’objets qui y sont proposés :

  • Objets « Controllers » permettent d’ajouter des contrôleurs à associer à sa vue ;
  • Objets « Data Views » permettent d’ajouter des éléments tels que des images, des tableaux, des cartes, des parties de sites Web, etc. ;
  • Objets « Inputs & Values » permettent d’introduire des éléments graphiques comme les boutons, des champs de saisie et du texte, etc. ;
  • Objets « Windows, Views & Bars » permettent d’afficher des fenêtres, des vues particulières et des boutons pour la navigation.

Chaque élément ajouté peut être disposé et ajusté graphiquement sur la vue mais peut être également paramétré selon ses propres caractéristiques par l’intermédiaire d’une fenêtre de gestion des attributs. Par exemple, il est possible de choisir la couleur de fond d’un bouton, la couleur du texte des labels, l’alignement des images, etc.

Gestion des contrôleurs

Il faut désormais passer à la partie de code afin de programmer la classe correspondant au contrôleur référencé au niveau de la vue.

La première étape consiste à renseigner l’interface de la classe du contrôleur afin de déclarer les attributs correspondant aux éléments graphiques que l’on souhaite manipuler et les différentes méthodes qui vont correspondre à des actions de l’utilisateur sur notre page :

Ensuite, il faut réaliser l’implémentation de la classe du contrôleur dans le langage Objective-C :

Il est possible d’implémenter d’autres méthodes permettant de réaliser des actions selon le changement d’orientation de l’appareil, en cas de réception d’un appel, etc.

Lien entre la vue et le contrôleur

Une fois la vue construite et le contrôleur implémenté, il faut désormais faire le lien entre les attributs de nos deux entités. Pour cela, l’outil Interface Builder permet de réaliser cette association graphiquement en tirant des liens entre les attributs déclarés de la classe et les éléments graphiques de l’écran. Ceci est également valable pour l’exécution de méthodes que l’on peut associer à une action de l’utilisateur comme par exemple le clic sur un bouton.

Fig. 4 : association graphique entre les attributs/méthodes et les éléments graphiques

Dans le design pattern MVC, un des rôles du contrôleur est de fournir à la vue les informations provenant du modèle. Pour cela, une gestion de données est nécessaire afin de pouvoir lire des fichiers ou accéder à une base afin de notamment pouvoir gérer une persistance de l’information.

5. Gestion de données

Il est tout d’abord important de signaler que les données sont cloisonnées par application par l’intermédiaire de la notion de « Sandbox » (bac à sable en français) d’application pour des raisons de sécurité et pour éviter de mauvaises interactions entre les différentes applications. Cela signifie que chaque application dispose de son propre espace dont voici les principaux répertoires pour y stocker des données :

  • Document : contient les documents de l’utilisateur et les données de l’application qui peuvent être notamment partagés
  • Library/Preferences : permet de stocker les préférences de l’utilisateur s’appuyant sur un mécanisme de fichiers de propriétés (pfiles) avec des API spécifiques pour facilement les manipuler
  • Library/Caches : contient les fichiers de données qui peuvent persister entre plusieurs lancements de l’application ou pendant la mise à jour de l’application.
  • tmp : contient les fichiers de données temporaires qui peuvent être supprimés entre plusieurs lancements de l’application. Le système gère automatiquement une purge de ces fichiers lorsque l’application est arrêtée.

Comme nous venons de le voir, il est possible de gérer des fichiers de propriétés mais d’autres formats de données sont utilisables nativement :

  • SQLite : une librairie est intégrée pour gérer une base de données SQLite afin de réaliser un développement basé sur des requêtes SQL ;
  • Fichiers XML : une API est disponible pour parser des flux XML, permettant ainsi de pouvoir lire et écrire des fichiers dans ce format ;
  • Fichiers multimédias : plusieurs API sont fournies afin de gérer des photos mais aussi des données de contact ;
  • Calendrier : l’accès au calendrier de l’utilisateur est possible, ce qui représente une source de données intéressante pour la gestion d’évènements.

6. Conclusion

Apple propose avec iOS une solution technique aboutie permettant de réaliser des applications vraiment bien adaptées pour les appareils de type mobile ou tablette. La force de la solution est de s’appuyer sur la même base technique et les concepts qui ont fait le succès du système Mac Os X maîtrisé depuis de nombreuses années par la société. Le revers de la médaille est qu’il s’agit d’un système d’exploitation propriétaire, destiné uniquement aux appareils de la marque Apple, contrairement à la majorité de ses principaux concurrents (Android et Windows Phone notamment) qui sont eux ouverts à de nombreux fabricants de mobiles et de tablettes.

Ceci dit, la stabilité et la robustesse du système sont vraiment au rendez-vous puisque iOS est spécifiquement mis en place pour ses propres appareils. Cependant, des lenteurs sont apparues sur les anciens modèles de l’iPhone avec les dernières versions. Ainsi, il faut au minimum un iPhone 3GS pour pouvoir utiliser confortablement iOS 4.x. Le côté « fermé » du système d’exploitation peut être un frein pour certains utilisateurs qui ne souhaitent pas forcément utiliser iTunes, ce logiciel étant effectivement obligatoire pour gérer les mises à jour du système. iTunes offre néanmoins une facilité d’utilisation pour les néophytes en informatique.

D’un point de vue technique, on peut déplorer l’absence du support d’Adobe Flash Player (voulue par Apple) pour les versions actuelles de iOS, rendant impossible l’accès à certains sites s’appuyant sur cette technologie.

D’un point de vue plus orienté développement, Apple fournit un SDK de qualité avec de nombreuses documentations sous la forme de iBooks, de vidéos, de codes d’exemple, etc. L’outil de développement est très avancé et assez simple à prendre en main notamment pour créer un nouveau projet. Par contre, même si le langage Objective-C a la force d’être un langage orienté objet, cela reste malgré tout complexe à appréhender et globalement laborieux. Le fait de devoir gérer soit même l’allocation de la mémoire peut être un frein pour une certaine partie de développeurs. Par ailleurs, la gestion entre la vue et le contrôleur est assez déroutante au premier abord même si une bonne partie est gérée graphiquement. L’outil de construction des interfaces est cependant vraiment bien fait et permet de facilement concevoir des applications avancées.

Références

http://developer.apple.com/devcenter/ios
http://developer.apple.com/programs/ios