Développer en Java sur iPhone

Arnaud de la Grandière |
la société Flexycore, fondée à Rennes en 2008 par des anciens de Texas Instrument et de l'INRIA, propose une solution qui permet de coder et débugger, en Java, des applications natives pour iPhone et iPod touch. Baptisée iSpectrum, cette solution compile les classes Java en Objective-C et utilise le SDK d'Apple pour réaliser les applications binaires. iSpectrum permet l'accès aux API natives de l'iPhone, que ce soit les éléments d'interface, comme l'accéléromètre ou le GPS. Flexycore promet également le support d'OpenGL ES à l'avenir.

La solution offre le pilotage du SDK, permettant de faciliter la simulation pour les phases de test.

L'avantage de cette solution est qu'elle permet le déploiement d'un code commun sur les plateforme Android comme App Store avec un seul et unique développement. La solution est gratuite pour les applications finales sous licence libre, pour les projets fermés en revanche il faut contacter l'éditeur pour obtenir une version Pro. Mac OS X 10.4.8 et Eclipse 3.4 sont nécessaires à son installation, sous la forme d'un plug-in. Une version de démonstration, valable 30 jours, est disponible sur le site.

image002
avatar Jerry Khan | 

C'est quoi Java déjà ? :-)

avatar totorino | 

Tu as tord. Java est loin d'être mort. Il est toujours très présent en entreprise et Scala est d'ailleurs en train de lui donner un sérieux coup de boost.
http://www.scala-lang.org/

avatar HAL-9000 | 

Java c'est bon ça ! Du haut niveau, enfin !!!

avatar HAL-9000 | 

@ totorino

+ 1 Java ainsi que C++ (entre autres) sont de plus en plus présents...

avatar chipeau | 

Je trouve dommage de devoir publier obligatoirement le logiciel en open source...

Sachant que même le site de l'éditeur ne respecte pas les engagements ... Le site est un joomla et c'est affiché nulle part..

avatar eTeks | 

Cet outil est une bonne nouvelle. Va falloir que j'essaie ça... :-)
Au passage, MacG (et Jerry Khan au passage), ce serait bien de ne pas oublier un trop vite l'existence de Java, parce qu'à force de lire des articles sur Flash (intéressants sans aucun doute), on en arriverait presqu'à penser qu'il n'y a plus que ça qui existe dans les navigateurs et ailleurs.
Maintenant que Sun a définitivement été avalé par Oracle (ce qui aurait bien mérité une news au passage), j'espère que ça va bouger un peu plus du côté Java.

avatar bebox | 

ah enfin il etait temps d'unifier un peu le developpement ouaip

bonne nouvelle ça

et +1 java est loin d'etre mort on parle meme pas de ça version "light" J2ME qui equipe la majorité des téléphones sur le marché

avatar mediapress (non vérifié) | 

java = très bof...

flash = +1

:-)

avatar gloup gloup | 

@mediapress: tu ne confondrais pas java et javascript par hasard?

avatar MacLeMarin | 

Il faudrait qu'Apple soutienne un peu plus Java.
Rien qu'au niveau des outils de développement, il y a du choix et de la qualité.
Et aussi au niveau des libs, ça cartonne et il en existe pour tous les domaines d'activité et en open source en plus !

De plus, c'est un langage qui (à mon avis) est beaucoup plus accessible que Objective-C.
Mais ça, c'est une question de goût :)

Bref, je ne pense pas que toute la communauté Java va se mettre à Objective-C juste pour développer des applis pour l'iPhone.
Donc bravo à Flexycore. Cela va donner encore plus de possibilités aux développeurs.

avatar mediapress (non vérifié) | 

[b]@gloup gloup: tu ne confondrais pas java et javascript par hasard?[/b]

oui :-)

javascript est pour moi ce qu'est flash à certain...
désolé du commentaire pour java... je retire ce que j'ai dis...

avatar 6ix | 

[quote]L'avantage de cette solution est qu'elle permet le déploiement d'un code commun sur les plateforme Android comme App Store avec un seul et unique développement.[/quote]

Faciliter le portage, je veux bien, notamment pour tout ce qui est modèle et traitement des données. Mais qu'en est-il de l'interface ? Cela a beau être du code Java, s'il est traduit uniquement pour supporter les API Cocoa, ça ne tournera pas sur Android…

avatar sebasto72 | 

@mediapress

Ah oui, je me vois bien déployer une application de CRM en flash, ou un ERP tiens, rien que pour citer deux cas qui me viennent à l'esprit.

Le choix d'un langage dépend sans doute du contexte, non ?

avatar mediapress (non vérifié) | 

[b]Le choix d'un langage dépend sans doute du contexte, non ?[/b]

tout à fait d'accord...

avatar ceb33 | 

c'est absolument pas nouveau
pire, ça ressemble a ce que fait deja XMLVM (http://xmlvm.org/iphone) qui permet de compiler sur iphone, android, .NET, python, etc...

avatar yehedmad | 

@ chipeau :
Ce n'est pas obligé que ca soit un projet open source... simplement, dans ce cas, c'est gratuit ;).

@ceb33 :
xmlvm a l'air d'un projet ambitieux. Par contre ca m'a l'air moins "fini" peut-être, pour une utilisation pro. Sur le site ils disent qu'ils ont rendu disponible des sous ensembles d'API cocoa, ou awt, mais je n'ai pas trouvé de documentation pour voir exactement ce que cela représente. (je ne l'ai pas essayé).
Et apparemment c'est un outil en ligne de commande, alors qu'avec iSpectrum il y un plugin Eclipse, un debugger, pas mal d'exemples, un forum...
L'idée d'un simu 100% Java est bonne, mais dans la doc ils disent bien que c'est un boulot énorme et qu'ils ne prévoient pas de l'améliorer :
"Note that re-implementing
Cocoa Touch in Java is a major undertaking in itself and XMLVM only
support a certain subset of the API. While this approach works well for the
demos shipped with XMLVM [...] there are currently no plans to make further
enhancements of the Java-based iPhone emulator"

avatar BeePotato | 

@ MacLeMarin : « Il faudrait qu'Apple soutienne un peu plus Java. »

Java n’a pas vraiment besoin du soutien d’Apple, du coup pourquoi Apple devrait faire un effort particulier ?
Juste pour le plaisir de promouvoir le développement d’applications pour une plateforme différente de celle qu’elle vend ?

« De plus, c'est un langage qui (à mon avis) est beaucoup plus accessible que Objective-C. Mais ça, c'est une question de goût :) »

Juste une question de goût, en effet. D’autant que si on va plus loin que les langages eux-mêmes et qu’on considère les bibliothèques associées, je trouve que l’accessibilité n’est pas du côté de Java.

« Bref, je ne pense pas que toute la communauté Java va se mettre à Objective-C juste pour développer des applis pour l’iPhone. »

En effet. Et c’est une bonne chose : ça filtre ! ;-)

avatar MacLeMarin | 

@ BeePotato
Effectivement, au lieu de "soutenir", j'utiliserai plutôt "supporter".
Il est clair que Apple ne va pas porter une jvm pour l'iPhone (pour l'instant).
Mais le fait que les outils de développement support d'autres langages serait un plus.
Le simple fait de binder l'API de l'iPhone dans une lib Java permettrait aux développeurs Java
d'éviter l'apprentissage de Objective-C et de se concentrer sur la qualité de l'application à livrer.

Enfin, il y a certainement des raisons économico/technico/politico/Jobsico valables pour lesquelles ceci n'exite pas :)

avatar Hindifarai | 

Quand la prochaine jvm libre sortira alors Apple n'aura plus à développer ses jvm en internes (vu la rapidité et la qualité des jvm produites c'est un énorme progrès), les développeurs pourront de nouveau se servir d'osx pour développer en entreprises ce que les clients veulent (du java dans une écrasante majorité du temps) et une jvm sera dispo de manière officieuse pour iphone...

avatar BeePotato | 

@ MacLeMarin : « Enfin, il y a certainement des raisons économico/technico/politico/Jobsico valables pour lesquelles ceci n'exite pas :) »

Oui, il y a une raison : le fait que ce que tu décris a déjà été fait pour Mac OS, avec le pont Cocoa-Java, sans rencontrer un gros succès. Il y a dix ans, Apple le mettait bien en avant pour surfer sur la mode Java et attirer des développeurs en leur promettant de ne pas avoir à apprendre un nouveau langage.

Mais finalement, ça a été abandonné pour de multiples raisons. Tout d’abord parce que ça représentait un coût de développement non négligeable pour Apple, surtout en comparaison du nombre de développeurs l’utilisant réellement.
Ensuite parce que de toute façon, il fallait tout de même apprendre une nouvelle API, avec une logique bien différente de celle des bibliothèques dont on a l’habitude dans le monde Java. Et cet apprentissage est en fait un effort bien plus important que celui de l’Objective C lui-même.
Également un peu parce que le résultat avait un petit aire boiteux, Java n’étant pas un langage parfaitement adapté pour l’utilisation d’une bibliothèque telle que Cocoa.
Enfin — et surtout, à mon avis — parce que le succès de Mac OS X a rendu inutile cette tentative d’attirer des développeurs via ce genre d’arguments : le nombre d’utilisateurs de ce système est devenu suffisamment intéressant pour que bon nombre de développeurs soient assez motivés pour apprendre le couple Objective C / Cocoa.

Ce dernier point étant encore plus vrai pour iPhone OS, il est clair qu’Apple n’a absolument pas besoin de s’embêter à offrir un accès Java à Cocoa Touch. Les développeurs qui ne sont pas suffisamment intéressés par cette plateforme pour accepter de faire l’effort (somme toute minime) d’apprendre un nouveau langage n’intéressent pas Apple.

avatar MacLeMarin | 

Ce peut être un long débat :)

Je trouve "choquant" lorsque tu dis que les développeurs intéressés mais ne faisant pas l'effort d'apprendre Objective-C n'intéressent pas Apple !

Je pense plutôt que Apple ne propose pas Java pour l'iPhone afin d'éviter que l'on développe des applications "Portables" sur Android ou autres OS mobiles. Ceci afin de garantir que le développeur devant choisir une plate-forme s'oriente et se dévoue à l'iPhone plutôt que de voir la même application proposée sur les plate-fornes concurrentes.
C'est de bonne guerre.

Enfin, je suis un développeur C/C++/Java et j'aimerai développer des applications que je pourrai proposer à des utilisateurs de plusieurs plate-formes... c'est frustrant.

Pour revenir sur MaOSX, il y un nombre incalculable d'applications Java et de plus en plus de développeurs utilisent le Mac pour coder leurs applications. Qu'elles soient de type GUI que de type entreprise.
Tu peux installer Glassfish et Eclipse sur ton Mac, développer ton application entreprise et la déployer sous Windows ou Linux en fonction de l'infrastructure de tes clients.
Essaie de faire ça avec Objective-C...
Je n'est pas tellement cherché mais existe-t-il un compilateur Objective-C pour Windows ou Linux afin qu'un développeur puisse l'apprendre .

Enfin, je m'éloigne :)
Pour en finir, si tu maitrises un langage de programmation, seul l'apprentissage de nouvelles APIs devraient permettre de développer pour une plate-forme.
Qu'une plate-forme soient liée à un langage, ce n'est (à mon avis), pas une bonne idée.

avatar BeePotato | 

« Je trouve "choquant" lorsque tu dis que les développeurs intéressés mais ne faisant pas l'effort d'apprendre Objective-C n'intéressent pas Apple ! »

C’est pourtant le cas !
Je précise ce que je voulais dire, juste pour être sûr d’éviter toute incompréhension : Apple voit déjà débarquer tellement de développeurs pour iPhone OS, et ce malgré la nécessité pour la plupart d’entre eux d’apprendre Objective C, qu’on se demande bien quel intérêt elle aurait à faire des efforts pour attirer en plus ceux qui ne veulent faire aucun effort particulier pour développer sur cette plateforme.
D’autant qu’on est en droit de soupçonner que ces développeurs, s’ils ne sont pas tentés de faire le moindre effort pour s’adapter aux règles de développement de cette plateforme, risquent fort d’être également du genre à ne pas faire d’efforts pour adapter l’interface et l’ergonomie de leurs programmes. Ce qu’Apple préfère évidemment éviter.
Bref, grâce au succès de l’iPhone auprès du public et auprès des développeurs, Apple peut se payer le luxe de sélectionner les développeurs autorisés à viser cette plateforme.

Notons tout de même que l’examen d’entrée n’est pas bien difficile : il faut accepter de lire un peu de doc et de ne pas juste cliquer sur un bouton « recompiler » pour porter son logiciel sur iPhone.

avatar BeePotato | 

« Je pense plutôt que Apple ne propose pas Java pour l'iPhone afin d'éviter que l'on développe des applications "Portables" sur Android ou autres OS mobiles. »

Plus haut, tu parlais de « binder l'API de l'iPhone dans une lib Java », ce qui est quelque chose d’imaginable, même si je comprends pourquoi Apple ne le fait pas : après tout, ça resterait des applications native iPhone, juste développées en Java plutôt qu’en Objective C.

Mais si tu te mets à parler d’applis Java portables sur d’autres plateformes, ça sous-entend qu’on ne parle plus d’utiliser Cocoa Touch en Java, mais bien d’utiliser des bibliothèques non spécifiques à l’iPhone, telles que Swing. Et là, il est clair qu’Apple n’est pas du tout intéressée.

Mais, à mon avis, pas du tout pour la raison que tu cites, qui est : « Ceci afin de garantir que le développeur devant choisir une plate-forme s'oriente et se dévoue à l'iPhone plutôt que de voir la même application proposée sur les plate-fornes concurrentes. »

La raison est plus simple : de telles applis ne seraient PAS des applis iPhone.
Ce serait des applis pour la plateforme Java, avec une interface conçue pour cette plateforme, c’est-à-dire pour rien en particulier, et en particulier pas pour l’iPhone. Bref, aucun intérêt pour Apple.

Remarquons de plus que l’utilisation d’Objective C n’est pas un truc arrivé de nulle part, soudainement, juste pour l’iPhone, ce qui pourrait laisser croire à cette théorie du complot avec une stratégie machiavélique visant à enfermer les développeurs dans une plateforme.
Non, c’est juste qu’Apple ayant pris Mac OS et Cocoa comme base pour créer iPhone OS et son SDK, elle a naturellement visé le moindre effort en réutilisant le même environnement de développement, ce qui était parfaitement logique.

avatar BeePotato | 

« Enfin, je suis un développeur C/C++/Java et j'aimerai développer des applications que je pourrai proposer à des utilisateurs de plusieurs plate-formes... c'est frustrant. »

Disons plutôt que tu aimerais que tout les utilisateurs utilisent la même plateforme : celle que tu as utilisée pour développer l’application que tu veux vendre (que ce soit Java+Swing ou C++ et Qt, ou autre chose encore). C’est compréhensible et humain, puisque ça te permettrait de ne pas faire d’efforts supplémentaires.
Mais contrairement à ce que certains vendeurs de rêve essayent de nous faire croire depuis longtemps, le développement multi-plateformes ce n’est pas ça.

Microsoft en a eu une démonstration avec Office et sa catastrophique version 6 pour Mac.

« Pour revenir sur MaOSX, il y un nombre incalculable d'applications Java »

Il y a le même nombre incalculable d’applications Java que sur n’importe quel autre système où tourne la plateforme Java.
Ce ne sont pas pour autant des applications pour Mac OS.
Le nombre d’applications Mac écrites en Java est nettement plus faible.

« et de plus en plus de développeurs utilisent le Mac pour coder leurs applications. Qu'elles soient de type GUI que de type entreprise. Tu peux installer Glassfish et Eclipse sur ton Mac, développer ton application entreprise et la déployer sous Windows ou Linux en fonction de l'infrastructure de tes clients. »

Oui, Mac OS est un environnement très agréable à utiliser, même pour faire du développement Java.
Ça ne fait pas pour autant de ces développeurs des développeurs pour Mac.

« Essaie de faire ça avec Objective-C… »

Personne n’essaierait vraiment, vu que ce n’est pas le but.
Cela dit, pas mal de monde suit la stratégie de développer le maximum de l’application en code portable (en C ou C++, par exemple) et de développer ensuite l’interface utilisateur de manière propre pour chaque plateforme (donc en utilisant Objective C et Cocoa pour la version Mac).

avatar BeePotato | 

« Pour en finir, si tu maitrises un langage de programmation, seul l'apprentissage de nouvelles APIs devraient permettre de développer pour une plate-forme.
Qu'une plate-forme soient liée à un langage, ce n'est (à mon avis), pas une bonne idée. »

Comme je l’ai dit plus haut, l’apprentissage de nouvelles API est un investissement bien plus important que l’apprentissage d’un nouveau langage, surtout quand ce langage est juste un autre dérivé du C (donc facile à apprendre).
Dans l’apprentissage du développement pour Mac ou pour iPhone, c’est l’apprentissage de Cocoa qui prend du temps, pas l’apprentissage d’Objective C.

Alors bien sûr, on peut toujours souhaiter malgré tout que Cocoa soit directement accessible dans le langage de son choix. Mais vraiment, ça ne fait pas une énorme différence.
Comme je l’ai dit plus haut, dans le cas de Java ça a été fait par Apple dans le passé, avec le pont Cocoa-Java, qui permettait la programmation Cocoa en Java. Mais ça a été abandonné depuis, parce que finalement assez peu utile.
Depuis, Apple tente plutôt d’offrir des accès à Cocoa via des langages de plus haut niveau, qui présentent plus de différences avec Objective C, comme Python ou Ruby.

« Je n'est pas tellement cherché mais existe-t-il un compilateur Objective-C pour Windows ou Linux afin qu'un développeur puisse l'apprendre. »

Oui, ça existe.
Mais encore une fois, ce n’est pas l’apprentissage d’Objective C qui est le plus intéressant ou le plus lourd, c’est l’apprentissage de Cocoa. Et pour ça, il vaut mieux le faire directement sur un Mac (bien qu’on puisse toujours essayer GnuStep si on veut rester sur Linux ou Windows).

avatar Zed-K | 

@ sebasto72 :
Le framework Flex est là pour ça.

avatar sebasto72 | 

@Zed-K
Heu... pour moi Flex c'est une façon de faire une interface Web 2.0, si tu n'as pas les services métier côté serveur (et donc pas en Flex, mais en Java, PHP ou n'importe quoi d'autre genre ColdFusion pour rester chez Adobe), ça sert pas à grand chose pour construire des composants métier.
Me trompé-je ?

[Edit] j'ai fouillé vite-fait, ça a l'air d'être un peu plus que de l'interface utilisateur mais de là à réaliser une application 3-tiers complète, hum... je reste sceptique, en Java c'est J2EE qui est répandu, pas les applets, c'est une régression de vouloir refaire du client-server au sein d'un swf exécuté dans le navigateur. Avis personnel, bien entendu.
[/Edit]

@mediapress
OK, si tu as confondu Javascript et Java :)

@BeePotato
Je partage tes analyses. Tu as complètement raison de dire qu'il faut plus d'investissement pour des API que pour un langage, c'est d'autant plus vrai quand on en connait plusieurs, un peu comme les langues vivantes (il parait, je ne suis pas doué en langues :)

CONNEXION UTILISATEUR