Flash sur iPhone : comment ça marche ?

Arnaud de la Grandière |
Adobe a donc annoncé que la prochaine version de Flash (CS5) permettrait d'exporter des applications pour iPhone. Apple refusant à Flash d'entrer par la grande porte, Adobe a réussi à passer par la fenêtre. Commençons par nous pencher sur l'approche technique qu'Adobe a choisie, et par faire le détail du fonctionnement de Flash.

Flash est basé sur le langage ActionScript, un langage de type script proche de JavaScript. Ce type de langage nécessite un « interprète » : pour pouvoir être exécuté sur tout type de processeurs, il n'est pas compilé en langage machine. En lieu et place, un interprète fait l'interface entre le script et le processeur, en convertissant à la volée les instructions du script en commandes compréhensibles pour le processeur : ainsi, un fichier Flash peut être exécuté sans modification sur toute machine qui dispose du player ad-hoc, quel que soit son processeur ou les API de son système d'exploitation. Flash étant une technologie dédiée au web, et donc susceptible de fonctionner sur tout type de machine, c'est cette approche qui a été choisie (l'ActionScript n'ayant pas vocation à s'adresser à une plateforme matérielle en particulier).

Le problème d'un tel système, c'est que l'interprétation est bien plus lente que l'exécution d'un code compilé. Pour y remédier, on a parfois recours à un compilateur JIT (pour "just-in-time", à la volée), qui, au lieu d'interpréter les commandes, les compile directement en langage machine. C'est certes plus rapide que l'interprétation, mais malgré tout pas autant qu'une compilation "ahead-of-time", qui aboutit à du code assembleur exécutable directement (mais qui n'est donc pas distribuable universellement). D'autre part, la compilation JIT doit se faire très rapidement, au moment de l'exécution, et n'est donc pas aussi finement optimisée qu'une compilation réalisée en amont (celle-ci prend en effet beaucoup plus de temps).

Flash s'est vu adjoindre un compilateur JIT depuis sa version 9, mais reste malgré tout très gourmand en ressources (sans parler de la version Mac très critiquée pour ses lourdeurs), ce qui le rend difficilement exploitable sur des machines plus modestes telles que les smartphones. Apple a fait un choix tranché : pas de Flash sur iPhone ni iPod touch. D'autres constructeurs ont intégré Flash mobile avec plus ou moins de bonheur. Apple et Adobe se sont échangé quelques amabilités sur le sujet, la seconde n'appréciant manifestement pas qu'on pointe du doigt la pesanteur de son logiciel.

Une fois cet état des lieux dressé, comment Adobe compte-t-elle remédier à cette problématique avec Flash CS5 ? Rien de plus simple, en permettant de compiler ActionScript en langage machine ARM (le processeur des iPhone), à l'aide d'une bonne vieille compilation ahead-of-time. Ainsi Flash pourra produire des applications exécutables de la même manière que Xcode le fait avec l'Objective-C. Concrètement, Flash CS5 exploitera LLVM (voir notre une Apple tire le jus des processeurs) pour créer directement une application pour iPhone. Moralité, plus de problèmes de vitesse, une application réalisée avec Flash est susceptible de fonctionner aussi bien que n'importe quelle autre, pour peu du moins qu'Adobe fasse les choses comme il faut.

Certes, on peut se réjouir de la multiplication des points d'entrée sur l'App Store, qui offrent autant d'opportunités d'augmenter le nombre d'applications pour l'iPhone de manière exponentielle. Mais toutes les solutions en la matière ne se valent pas.

Car l'approche d'Adobe n'est pas sans inconvénients : si l'éditeur ouvre les portes de l'App Store aux innombrables développeurs Flash de tous bords, elle n'en reste pas moins un intermédiaire. Dès lors, si Apple vient à modifier ses API (ce qu'elle fait régulièrement), il en résultera nombre d'incompatibilités. De même, pour peu qu'Adobe ait laissé quelques bugs dans son compilateur, et ce sont toutes les applications développées par ce biais qui en souffriront, sans possible recours.

De même, pour peu que certaines fonctions de l'iPhone ne soient pas prises en compte par le compilateur d'Adobe, (comme c'est le cas pour l'accès au micro ou à la caméra par exemple), il n'y aura aucun moyen de contourner cette limitation. En outre, le « débugage » d'une application iPhone développée avec Flash consistera à tâtonner dans le noir, puisqu'un tel système ne permet aucun outil de traçage du code ni de remonter la piste d'un plantage, la seule manière de tester le code étant de le faire tourner sur un iPhone et de brûler un cierge. Enfin, ce système ne permet d'utiliser aucun des éléments d'interface graphique natifs de l'iPhone, dans lesquels Apple a mis tant d'efforts. Chaque application créée par ce biais proposera donc ses propres ersatz hétéroclites.

Cependant, Adobe est loin d'être la première à proposer une alternative pour le développement sur iPhone. On en compte nombre d'autres, comme Unity, Mono, GameSalad, ou encore Torque 3D qui permettent chacun de créer des applications compatibles iPhone OS sans coder en Objective-C. Cependant, pour la plupart, ces solutions proposent de convertir le code en Objective-C plutôt que de le compiler directement en assembleur ARM, ce qui laisse autrement plus de latitudes de contrôler la chaîne de production, et ce qui répond également aux problématiques soulevées plus haut.

L'autre élément à noter sur la démarche d'Adobe concerne le plan stratégique : pour mieux faire la démonstration de sa solution, Adobe a fait publier par des développeurs tiers une poignée d'applications sur l'App Store, toutes réalisées par le biais de Flash (Chroma Circuit, Trading Stuff, Fickleblox, Just Letters, South Park Avatar Creator, That Roach Game (ci-dessous), Red Hood).

phototahtroachgame


Quel meilleur moyen en effet de montrer la validité du principe que de montrer des applications validées par Apple et publiées sur l'App Store ? Certains pourraient d'ailleurs y voir la démonstration que Flash peut bel et bien fonctionner normalement sur un iPhone, mais ce serait oublier les nombreuses différences entre ce moteur et le player Flash standard. Cependant, aucune des applications en question ne fait figurer de fonctionnalité avancée ou gourmande en ressources, difficile donc de juger de son efficacité. Cependant, les différentes applications ont montré quelques saccades sur des appareils de générations précédentes, ce qui ne laisse guère augurer du meilleur pour des fonctions plus poussées (voir l'article Premier test des applications Flash pour iPhone). N'oublions pas cependant qu'il ne s'agit encore que d'une version bêta (Adobe a annoncé qu'une bêta publique de ses outils sera disponible d'ici la fin de l'année).

Une fois qu'on a fait le tour de la question, il reste cependant une inconnue : comment Apple va-t-elle réagir à cette initiative ? D'une part, c'est un pied de nez autour du bras de fer concernant Flash sur iPhone, et d'autre part Apple perd le contrôle de la façon dont les applications sont créées pour iPhone, qui plus est sans cohérence graphique, et avec le risque de se retrouver avec des applications trop lentes. D'un autre côté, Flash pourrait également offrir une manne de nouvelles applications, permettant à l'App Store de continuer à gagner de l'importance, pour peu que les applications soient dignes d'intérêt. Enfin, si jusqu'ici il fallait obligatoirement avoir un Mac pour compiler une application pour iPhone, avec Flash CS5 il sera possible de le faire également à partir de Windows.
avatar Bjeko | 
@Gstepper : je ne vois vraiment pas ce qui te dérange dans cette histoire : à priori c'est que du "plus" non ? Je vois pas ou se trouve le "moins" pour l'utilisateur ??? Et j'espère vraiment qu'Apple ne va pas adopter une attitude réticente face à ce projet : autant je peux comprendre que Flash direct dans le browser ça puisse concurrencer "les" apps, autant là, sans bypass de iTunes, ils n'ont eux non plus rien à perdre.
avatar GStepper | 
@Bjeko Quid du multi-touch ? Des accéléromètres ? Des fonctions sonores avancées ? AS/Flash n'a jamais été prévu pour ça.. OC/CocoaTouch si et est optimisé pour iPhone (pas seulement au niveau hardware mais aussi au niveau d'OS X)! En l'état actuel de l'API Flash, les apps AS pour iPhone seront de toute manière plus pauvre en intéraction avec le hard et l'OS, c'est donc un gros moins. L'API pourrait évoluer mais dans ce cas finit l'argument qui dit que de très nombreux devs pourront developper en restant sur leurs acquis... Et finit la fameuse "portabilité". Je ne parlerais même pas du passif d'Adobe en ce qui concerne Flash et OS X. Toutefois, chacun fera comme il voudra, pour ma part je veillerais à ne pas avoir de d'app basée sur AS dans mon iPhone.
avatar jean_claude_duss | 
"J'entend bien, mais je vois pas pourquoi Apple se devrait de satisfaire les besoins des devs ActionScript sur sa plateforme la plus lucrative ?" --> ils satisfont rien du tout... ils font rien, c'est adobe qui fait tout ! je vois pas au contraire pourquoi s'en pleindre... ils sont 80 000 apps l'année prochaine ils seront surement à 300 000 ! "tu penses réelement qu'il y a carence ? " --> non non ! c'était pas du tout mon propos :-) Tu connais d'autre plateforme qui ont eu un tel succès ? --> non, et je connais pas beaucoup de plateformes aussi excitantes ! "Pour moi Adobe veut juste prendre sa part du gateau (pardon de marché)en vendant des licences Flash, ca n'est que mon avis." --> bien oui... ca parait normal comme démarche de leur part de vouloir gagner des sous ! au final pour l'utilisateur ca change pas grand chose, les applis en falsh puor iphone seront moins performantes que celles en OC mais pour des milliers de dev, ca ouvre d'iphone sans qu'il n'y ai rien à apprendre...
avatar Goldevil | 
@GStepper : "ActionScript et Flash sont propriétaires et fermés". C'est simplement faux : d'autres logiciels génères du Flash, le format est public, le SDK Flex est gratuit, FlexBuilder est gratuit pour les étudiants et informaticiens sans emplois. Les technologies iPhone sont bien plus protégées. @GStepper : Il est évident que la portabilité va à l'encontre de l'optimisation des performances. On ne peut faire un logiciel universel qui utilise à 100% les ressources de chaque plateforme. Flash est juste un très bon compromis. Développer pour l'iPhone n'est pas gratuit ! Je connais un développeur freelance qui a abandonné l'idée de développer sur iPhone car il ne veux pas investir dans un Mac, seul moyen d'avoir XCode qui est le seul environnement mature de développement pour iPhone OS. En tant que développeur, je ne m'intéresse pas du tout à la création de jeux pour iPhone. Je développe des applications client-serveur web qui doivent être disponibles sur plusieurs plateforme. Avec Flash, je peux récupérer la majorité du code pour fournir une application qui tourne dans un navigateur sur un desktop (Flash), sur un appareil mobile Symbian ou Window mobile (FlashLite) ou encore une application StandAlone pour PC ou Mac (Air). Jusqu'à hier je n'avais aucune solution pour iPhone à moins de refaire une appli complète en Objective C. Je n'ai d'ailleurs ni le temps ni les ressources financières pour cela. Le problème est le même pour le développeur Java. Un logiciel iPhone qui permet de gérer les document ODF n'est pas prêt d'arriver simplement à cause de cela. Le problème est même pire car si Adobe a montré qu'il était possible de compiler de l'ActionScript via LLVM, pour java (bien plus complexe) c'est loin d'être aussi facile. PS: Je ne sais même pas ce que c'est "Blades of Fury" ou "BeatMaker"... et je le vis bien.
avatar GStepper | 
@Goldevil "Développer pour l'iPhone n'est pas gratuit !" Oui et ? Développer en Flash si peut être ? Je l'ai déjà dit et je le répète un mac mini (Snow leopard et Xcode inclus bien sur) coute moins cher qu'une licence Flash Adobe... Et, en plus de développer sur iPhone tu peux aussi développer pour mac. Le tout en étant parfaitement optimisé pour l'iPhone et le mac. " Un logiciel iPhone qui permet de gérer les document ODF n'est pas prêt d'arriver simplement à cause de cela." Euh, je vois pas le rapport là! Oc/cocoa ne peut pas gérer les fichiers XML ? Quand on sait que tous les fichiers de conf d'OS X sont en XML c'est plutot drole... Première nouvelle, d'ailleurs TextEdit.app (Full Objective-C/Cocoa)le fait très bien... "Je ne sais même pas ce que c'est "Blades of Fury" ou "BeatMaker"... et je le vis bien." - Ce 2 exemples d'applis poussée dans leur conception/implementation et deux exemple d'applis que tu n'es pas pret de pouvoir coder en AS/Flash pour iPhone... Pour ma part je vis très bien également sans AUCUNE applis Flash. Tous les gouts sont dans la nature.
avatar setnan | 
Très bon article, vraiment, un plaisir à lire. Je dév sur iPhone depuis 1ans 1/2 et perso ça m'inquiète un peu cette histoire (juste un peu). Ça ouvre les portes à une certaine catégorie d'app, n'utilisant pas l'interface graphique standard d'iPhoneOS (?), et pouvant se passer de tout ce que prive la non-utilisation d'XCode (outils dév, optimisation). Niveau création selon le type de projet il peut être très facile de passer une idée en app flash, bien plus qu'en obj-c, souvent avec très peu d'actionscript. Mais surtout il existe actuellement un parc énormissime de petites apps et jeux flash + ou - sympas (surout moins :) ) qui n'auraient pas beaucoup de modifs à subir pour tourner en 480x320. La tentative d'Adobe est à ranger au coté des Unity, GameSalad & co, mais avec un potentiel incomparablement plus puissant car tronant sur une une manne énorme d'app existante.
avatar GerFaut | 
@ GStepper : pourrais tu me contacter ici : ideiglenes@free.fr ? J'ai quelques questions à te poser... Merci.
avatar YenoIwesa | 
@GStepper: Concernant le multitouch et l'accéléromètre, le développeur Adobe de la vidéo annonce que ces nouvelles API feront partie intégrante de Flash 10.1 (et donc pas seulement pour l'iPhone, mais également pour les OS desktop et autres mobiles, type Android). Dans tous les cas, je ne vois pas pourquoi on se plaindrait de la création d'un nouveau moyen d'accès à l'App Store pour les développeurs. Beaucoup de jeux 3D pour l'iPhone sont développés avec Unity et Torque 3D, deux outils qui permettent déjà de développer un jeu iPhone sur PC, et personne n'en est mort !
avatar Goldevil | 
@GStepper : "Développer pour l'iPhone n'est pas gratuit !" Oui et ? Développer en Flash si peut être ? Ne me fait pas dire ce que je n'ai pas dit (ou plutôt écrit) Ce que je veux exprimer c'est qu'un programmeur qui travaille sur Windows a plus à investir pour commencer à développer pour iPhone. Quand au prix des outils de développement d'Adobe je rappelle encore une fois qu'il y a une solution entièrement gratuite et open source (Flex SDK). Si j'étais développeur Windows only, Flash pourrait bien être la porte d'entrée attendue pour aborder l'iPhone. @GStepper : "Oc/cocoa ne peut pas gérer les fichiers XML". De nouveau je n'ai jamais écrit cela. Ce que je veux dire c'est que le développeur qui veut écrire logiciel iPhone qui ouvre le format ODF doit commencer par se plonger dans ce format de fichier XML et ne peut profiter des librairies Java qu'il trouvera par exemple dans le repository d'OpenOffice. Il y a vraiment beaucoup de boulot et, à ma connaissance, personne n'a eu le courage de le faire. Et pourtant ODF est un chouette format ouvert Il est agréable de programmer pour iPhone non seulement parce que Objective C est sympa mais surtout parce qu'Apple propose des API riches et complètes. Si je veux afficher une image JPEG, je ne dois pas écrire le décodeur. Ele est là la richesse de la plateforme. Le langage, ObjectiveC, n'est finalement qu'un détail. Par contre, si je veux faire quelque chose qui n'est pas proposé par Apple dans son SDK, je démarre from scratch car je ne peux en général pas facilement exécuter du code écrit dans un autre langage. Dans le cadre du développement Mac, il est souvent possible de faire appel à des librairies Java, Python, Perl ou autres car l'environnement est beaucoup plus ouvert et tous ces langages y sont disponibles.
avatar jean_claude_duss | 
"Pour ma part je vis très bien également sans AUCUNE applis Flash. Tous les gouts sont dans la nature. " --> oui, comme plein de monde, ce qu'on comprend pas c'est que tu vive pas bien que certaines personnes aient envie de développer en flash, langage qu'ils connaissent sur le bout des droits... au final si ya pas de différence entre un app flash et une Cocoa ca devrait poser de problèmes à personne !
avatar jean_claude_duss | 
"Ça ouvre les portes à une certaine catégorie d'app, n'utilisant pas l'interface graphique standard d'iPhoneOS "--> Je pense qu'on verra très rapidement des composants falsh qui reprennent exactement l'interface de l'iphone pour faire des applis qui ressemblent à 100% à une appli cocoa
avatar GStepper | 
@ Tous Merci pour toutes ces remarques pertinentes. Time will tell !!! On verra bien ce que cette solution de developpement pourra nous fournir comme application et avec quel niveau de performance (condition critique sur une machine très limitée en ressources). @ Bientot
avatar Stanley Lubrik | 
Flash sur iphone... http://www.youtube.com/watch?v=lzqd5mHWTHE&feature=player_embedded#
avatar Bjeko | 
Je viens de voir que l'accéléromètre sera bien géré par Flash, j'espèere qu'il en sera de même pour le gps, voire même la boussole : ça pourrait donner des applis de visites guidées intéressantes.
avatar jean_claude_duss | 
Je GPS je crois pas qu'ils en parlent, juste récupérer un "point" avec latitude, longitude, je pense pas que ça pose beaucoup de problèmes, mais on aura accès à l'api de google maps.

Pages

CONNEXION UTILISATEUR