Le C

Commençons par le plus simple : du code C
Aucune particularité sur l'iPhone par rapport à un PC Gnu/linux, puisque le compilateur est le même. Attention toutefois, les entêtes téléchargés à l'étape précédente ne sont pas (encore) installés dans un répertoire standard (à vrai dire j'ai essayé de créer un package .deb, mais il ne s'est pas installé car il y a un conflit avec des fichiers fournis par odcc-utils, je dois creuser là-dessus..)
gdb est aussi disponible, ainsi que glibc. On a donc pas mal de possibilités pour coder des fonctions "outils".

L'objective-C

Programmer sur son iPhone c'est bien, avoir une interface c'est mieux. Utiliser les fonctionnalités propres à l'iPhone aussi.
Du coup, on n'a pas d'autre choix que d'utiliser les bibliothèques de fonctions Apple, et donc de passer à l'Objective-C. C'est un C étendu, orienté objet. Rien de révolutionnaire, juste une nouvelle syntaxe à apprendre, si on est familier d'autres langages objet.
Pour les personnes ayant peu d'expérience de programmation, cette doc présente le langage à partir des bases. Pour ceux qui sont plus à l'aise, http://pierre-chatelier.developpez.com/tutoriels/mac/objectivec/migration/ est une mine d'informations qui évite de tout reprendre au début. Pour ce qui est des fonctions elles-mêmes, la doc d'Apple, bien fournie, contient toutes les informations intéressantes.

Le packaging

Etape à ne pas négliger, si on ne veut pas installer tout n'importe où et pouvoir désinstaller facilement ses applis. Ici pas de RPMs ;-( mais des .deb. En fait, pour des premiers pas de packaging, la construction est beaucoup plus simple. Il suffit d'installer son arborescence dans un répertoire temporaire, et d'y créer un fichier DEBIAN/control de la forme suivante :

 Package: mapremiereappli
 Version: 0.1

Puis un petit dpkg-deb --build rep_tempo

Application : Télécharger http://antirez.com/misc/iphone-helloworld-1.tar.gz (on peut aussi jeter un oeil sur ce bon tuto en anglais qui détaille l'arborescence d'une appli

Editer le Makefile pour pour prendre en compte le chemin des entêtes du SDK :

 CFLAGS += -I"/var/mobile/dev/include"

Modifier la section install et uninstall, pour pouvoir choisir la destination d'installation :

 install: dist
         /bin/cp -r $(BUILDDIR)/$(APPFOLDER) $(DESTDIR)/Applications/$(INSTALLFOLDER)
         @echo "Application $(INSTALLFOLDER) installed"
         echo killall SpringBoard
 uninstall:
         /bin/rm -fr $(DESTDIR)/Applications/$(INSTALLFOLDER)
         echo killall SpringBoard


Ensuite, on installe dans un répertoire qu'on vient de créer

 make 
 mkdir -p hellloworld-0.1/DEBIAN 
 echo -e "Package: mapremiereappli\nVersion: 0.1" > hellloworld-0.1/DEBIAN/control
 make install DESTDIR=$PWD/hellloworld-0.1
 dpkg-deb --build hellloworld-0.1

on passe en root

 su -
 dpkg-deb --install hellloworld-0.1 $rep_de_dev/hellloworld-0.1.deb
 exit

On relance le SpringBoard pour prendre kes changements en compte :

 killall SpringBoard

Et voilà !

Maintenant qu'on a une appli qui fonctionne et qui s'installe, on peut commencer à la modifier. Par contre, c'est là qu'on a une petite différence avec le pc : taper simplement

 /Applications/HelloWorld.app/HelloWorld

ne permet pas de lancerdirectement l'appli, du coup c'est génant pour débugger. On peut alors passer par syslog, mais si on est fainéant comme moi, j'ai trouvé une petite astuce : on tape la commande, puis on tape sur l'icône sur l'iPhone. Et là, magie, l'appli se lance par dessus le springboard, et les printf et les erreurs s'affichent dans le terminal.

Voilà c'est tout pour ce soir !