31/10/2018 4 Minutes read Tech 

iOS7, les fonctionnalités derrière le flat design

On attendait l’arrivée d’iOS7 comme une révolution et le moins que l’on puisse dire c’est qu’elle est bien là !

En effet la première prise en main d’un mobile sous iOS7 est plutôt troublante : toute l’interface a été remise en cause. Apple souhaite rendre l’expérience utilisateur plus agréable et plus pratique sans bouleverser les habitudes des utilisateurs. Par ailleurs, cette nouvelle version se veut plus performante. Ok, c’est bien, c’est beau, c’est “Flat” ! Mais qu’en est il du reste ?

Nous nous sommes donc plongés dans quelques une des nouveautés et améliorations du SDK (JavascriptCore, Multitasking…), en mettant de côté l’API UIKit, largement exposée depuis la sortie des versions beta de l’OS. Nous verrons dans un premier temps que tout n’est pas si nouveau que ça…

1/ JavascriptCore

L’arrivée de JavascriptCore en iOS 7 permet d’interpréter du code javascript au sein d’une application iOS native.

On peut écrire des méthodes et manipuler des objets entre les 2 languages (ce qui peut être pratique en terme de pattern lorsqu’on a 2 projets web et appli native iOS). De base, JavascriptCore n’est pas prévu pour interpréter le DOM. Cependant, il existe des API publiques qui ont ouvert cette possibilité.

La plus probante : Ejecta (anciennement , est une API publique créée par les développeurs d’ImpactJS déjà très connue dans le monde d’HTML5).

Les développeurs d’Ejecta ont pris le soin de créer une couche permettant de travailler l’audio et le canvas. C’est une API construite essentiellement pour le jeu et les animations.

Pour entrer un peu dans le détail, Ejecta utilise le moteur JavascriptCore pour executer le code javascript tandis que le HTML5 et la WebGL API sont wrappés nativement en OpenGL pour la couche graphique et OpenAL pour l’audio. On peut également jouir de quelques API JS existantes concernant les gestures, l’accéléromètre et autres features du genre.

L’avantage d’une telle solution est l’accessibilité à une techno plus ouverte. En effet il sera plus simple pour des développeurs confirmés de créer un jeux ou de lécher quelques animations en utilisant des API comme ThreeJS ou CAAT plutôt que la couche OpenGL native qui demande plus des connaissances spécifiques.

En terme de performance, quelques démos sont disponibles sur le site officiel d’ImpactJS et elles sont plutôt prometteuses.

Reste à voir si Ejecta va évoluer avec la venue de JavascriptCore dans le SDK iOS7 ou encore un portage Android ?

Réference :

http://impactjs.com/ejecta

2/ Multitasking

Le multi-tâche voit apparaître avec iOS7 2 de nouvelles fonctionnalités intéressantes :

Background fetch et Remote Notification. De plus, la nouvelle API URLSession permettra de tirer le meilleur parti de ces nouveautés.

Background Fetch

Permet de mettre a jour du contenu avant le retour de l’utilisateur sur l’application.

Son fonctionnement est simple : l’appareil détecte la fréquence avec laquelle vous utilisez une application et décide du moment idéal pour appeler une méthode déterminée, même elle éteinte.

Le développeur a la possibilité de règler la fréquence de mise à jour. Côté utilisateur, on peut paramétrer cette option via le menu “Règlages”.

Apple affirme que ce système est prévu pour économiser l’utilisation de la batterie au maximum.

Cette nouvelle fonctionnalité est très utile pour les applications qui ont besoin de petites mises à jour d’UI régulières : Flux RSS, Réseaux Sociaux, Magazines, Météo.

Remote Notification

Permet de recevoir une notification silencieuse (ou non) et de traiter son contenu même lorsque l’application est en veille. On peut ainsi, au réveil de l’application, lancer la mise à jour d’un contenu (en tâche de fond) et prévenir localement l’utilisateur lorsque celle-ci est terminée.

Très utile pour les applications qui ont besoin de mises à jour ponctuelles mais dont le contenu peut être consulté plus tard : Messagerie, Contenu synchronisé (Dropbox, Drive…), Application TV (épisodes, flux de bandes annonces…)

Background Transfert Service

Transférer des données en tâche de fond n’est pas une nouveauté. Mais avant iOS7, une fois l’application mise en veille, le transfert était limité dans le temps et on ne pouvait pas charger de grosses données.

L’API NSURLSession, qui fait son apparition avec iOS7, nous permet d’ajouter des tâches de fond de téléchargement ou d’envoi de fichiers sur un server.

Lorsque la tâche est executée en fond, cette feature ne fonctionne qu’en Wi-Fi afin de préserver les données et la batterie. Le développeur à la possibilité de choisir l’interface réseau (3G/Wifi) lorsque l’application est active.

Cette API est utile pour le transfert de données lourdes : Photos, Vidéos…

C’est surtout cette API qui permet de tirer toute la puissance des 2 nouveautés liées au multitasking (Background fetch et Remote Notification).

3/ Multipeer Connectivity

Ce nouveau framework est un ensemble de classes qui facilite les développeurs à connecter plusieurs appareils entre eux via l’interface réseau et permet aux utilisateurs d’échanger facilement des données entre eux.

L’API peut être utilisée :

  • pour des tutoriaux interactifs
  • de l’édition de document collaborative (document/photo)
  • de l’échange de fichiers

    Elle fonctionne grâce au wifi ou au bluetooth et désormais en peer to peer, c’est-à-dire sans la nécessité d’une connexion internet. De plus, le framework va choisir pour nous la meilleure interface réseau pour effectuer les échanges et il est possible de sécuriser le tout. Le flow se découpe en 2 phases :

  • découverte d’appareils voisins (détection…)
  • connexion à une session (échange…)

Le système de session permet à tout appareil d’être hôte ou client. On appelle l’hôte : le Browser et le client : l’Advertiser. Chaque device est identifié par un peerID qui doit être unique et chaque session est identifiée par un sessionType. Le framework nous propose un ensemble de classes très simple à mettre en place pour la découverte et la connexion. Cependant la manière simple est aussi celle qui embarque l’UI d’Apple. Mais pas de panique, ces 2 phases peuvent également être entièrement customisées. Cela demande plus de travail mais laisse libre cours aux graphistes et UX pour imaginer une autre interface utilisateur. On recense 3 types de transferts :

  • Messages
  • Streaming
  • Ressources

Message

Le transfert de message permet un envoi instantané de données en un seul paquet (inférieur à quelques kB) : messagerie instantanée, événement ponctuel…

Streaming

On peut créer un flux entre 2 appareils. Les données sont envoyées en plusieurs paquets et sont décodés côté client : vidéo, son…

Ressources

L’apparition de nouveaux objets au sein du framework iOS7 (NSProgress…), va permettre d’utiliser le peer to peer pour des échanges de ressources (images, texte…) provenant du disque de l’appareil ou de l’extérieur. Côté client, l’enregistrement de la ressource se fait de manière transparente pour le développeur. Chaque device utilise l’interface réseau de son choix (Bluetooth ou WiFi) et un système d’authentification et de cryptages des données est aussi au menu pour sécuriser le tout.

iOS7 n’est pas seulement une refonte de l’interface et même si nous n’avons pas traité toutes les nouvelles facettes du SDK (SpriteKit, iBeacon, PassBook…), il faut admettre qu’Apple a fait du bon travail. Il nous promet un bel avenir tant au niveau de l’amélioration des applications existantes que pour  la création de nouveaux concepts.

A vos claviers !