I. Introduction

Si vous êtes un débutant complet, vous devez suivre tout le guide.
Si vous maîtrisez déjà la programmation procédurale, vous pouvez commencer à la section III de ce guide.
Si vous maîtrisez la programmation objet, vous pouvez commencer à la section IV de ce guide.
Dans tous les cas, avant de commencer vous pouvez lire l'annexe à la section VI qui comporte quelques conseils utiles à toutes les étapes de votre apprentissage. ;)

II. Je suis un débutant complet qui n'a aucune expérience en développement informatique

 

Règle N°1 : n'allez pas trop vite. Vous devez avoir du temps devant vous et ne pas sauter les étapes.
Le langage Objective-C qu'on utilise pour développer sous iOS sur iPhone et iPad est une surcouche du langage C, c'est-à-dire que c'est du C auquel on a ajouté des fonctionnalités supplémentaires. En conséquence, la première étape est de maîtriser le langage C.
Commencez par apprendre le langage C. Voici quelques ressources pour vous y aider.

  • La bible du C et votre nouveau livre de chevet. Si vous avez une copine ou un copain, quittez-la/le. À partir de maintenant, vous dormez avec ce livre : Le langage C norme ANSI qu'on appelle aussi le K&R pour Kernighan et Ritchie. Dennis Ritchie, malheureusement décédé en octobre 2011, est le créateur du langage C et un des développeurs du premier système Unix, Unix étant le noyau de Mac OS X.
    Autant dire qu'en tant que développeur sur les technologies Apple, vous pouvez considérer ce monsieur comme Dieu tout puissant. :D
  • Les tutoriels du site communautaire Developpez.com. Attention, il y a des cours de tous niveaux. Ne vous lancez pas dans des choses trop difficiles. Dans un premier temps contentez-vous des cours d'initiation.
  • Pour voir des choses plus avancées en C, vous trouverez énormément de ressources via votre moteur de recherches préféré tout simplement. Vous trouverez encore une fois de très bons tutoriels sur le site Developpez.com.
  • Si vous souhaitez pousser le vice au maximum, je vous recommande un livre de programmation système sous Unix. Ça vous sera très utile par la suite pour comprendre ce qui se passe vraiment à l'intérieur d'un OS. Ceci dit, ce n'est pas indispensable et si vous êtes pressé vous pouvez passer au chapitre III. Cependant, si vous comptez utiliser ce que l'on appelle le Multithreading plus tard sur iPhone ou iPad, il est particulièrement intéressant de maîtriser les threads en C pour commencer. La maîtrise des threads en Objective-C sur iPhone se révélera d'une facilitée déconcertante par la suite. :)

III. Je maîtrise la programmation procédurale

 

Alors deux possibilités.

  1. Vous maîtrisez la programmation procédurale dans un autre langage que le C. STOP ! Vous allez retourner au chapitre II. La maîtrise du langage C est indispensable. Cependant, comme vous connaissez déjà la programmation, vous irez certainement très vite à apprendre le C.
  2. Vous maîtrisez la programmation procédurale en langage C, vous pouvez continuer. Attention, vous la maîtrisez vraiment ! Avoir copié/collé trois fois du code venant du net sans le comprendre n'est pas considéré comme une maîtrise suffisante pour passer à la suite. ;)

    Que vous soyez dans le cas 1 ou 2, les notions fondamentales que vous devez absolument avoir acquises en langage C sont les suivantes :
  • les types de données ;
  • les pointeurs ;
  • la gestion de la mémoire ;
  • les instructions ;
  • les structures ;
  • les fonctions ;
  • les entrées sorties ;
  • la compilation et le débogage avec gcc/gdb ou llvm/lldb.
    Maintenant, si vous êtes dans le cas 1 retournez à la section II. Pour les autres vous allez devoir apprendre la programmation objet et vous pouvez passer à l'Objective-C. Pour ça, vous pouvez l'apprendre avec n'importe quel cours bien fait d'Objective-C.

    Voici des ressources pour vous aider.
  • Votre nouveau livre de chevet à partir de maintenant, vous pouvez le poser sur le K&R : Programmation Cocoa sous Mac OS X d'Aaron Hillegass. Dans un premier temps, contentez-vous des premiers chapitres pour apprendre l'Objective-C. Inutile d'avancer sur le framework Cocoa tant que vous ne maîtrisez pas le langage Objective-C et la programmation orientée objet.
  • D'abord vous devez apprendre les concepts fondamentaux de la programmation orientée objet (POOProgrammation Orientée Objet) comme l'encapsulation, l'héritage, le polymorphisme, la surcharge, les constructeurs et le destructeur et quelques autres choses.
    Vous avez un cours de POOProgrammation Orientée Objet qui présente les concepts de base en français ici.
    Encore une fois, ne lâchez pas votre moteur de recherche, vous trouverez des tonnes de ressources sur la POOProgrammation Orientée Objet et l'Objective-C très facilement.
  • Chez Apple, les documents Learning Objective-C: A Primer et Programming with Objective-C peuvent vous aider pour apprendre le langage Objective-C.

À noter que pour développer pour iOS, vous devez absolument avoir une bonne connaissance des design patterns !

Apple indique que les concepts les plus importants à connaître sont les patterns Model View Controller, Delegation, Target-action ainsi que les techniques de Block objects et Sandboxing.

En réalité, Cocoa utilise une vingtaine de design patterns différents décrits dans le Cocoa Fundamentals Guide. D'après moi, vous ne pouvez pas commencer à développer pour iOS sans connaître et avoir bien compris au minimum Model View Controller, Delegation, Chain of Responsibility et Template Method ainsi que la manière dont ils sont utilisés dans Cocoa. Vous pourrez découvrir et apprendre les autres au fur et à mesure de votre progression.

IV. Je maîtrise la programmation objet

 
  1. Vous maîtrisez la programmation objet seulement en VB, C#, Java ou PHP mais vous n'avez jamais fait de C. STOP ! Retournez à la section II car vous n'avez pas les connaissances nécessaires des pointeurs et de la gestion de la mémoire. Évidemment vous irez 100 fois plus vite qu'un vrai débutant mais prenez le temps de repasser sur la section II et d'acquérir de bonnes bases en langage C. Cela vous sera d'une grande aide pour la suite.
  2. Vous maîtrisez la programmation objet en VB, C#, Java, PHP ou C++ et vous avez déjà fait du C et/ou C++. Parfait, vous avez juste à vous familiariser avec la syntaxe d'Objective-C qui est un peu déroutante au début (inspirée du langage Smalltalk) et vous pouvez attaquer tout de suite la programmation Cocoa. Si vous venez du C++, le mieux est de commencer avec le document de Pierre Chatelier qui est une excellente introduction pour passer tranquillement du C++ à l'Objective-C.
  • Chez Apple, les documents Learning Objective-C : A Primer et Programming with Objective-C peuvent vous aider pour apprendre le langage Objective-C.
  • Votre nouveau compagnon à partir de maintenant s'appelle Programmez pour iPhone/iPad. Il est tourné vers la pratique et se présente sous la forme d'une quarantaine de fiches thématiques très complètes allant du premier Hello World à Core Data en passant par la gestion du GPS, la création d'un delegate, le multitâche, les timers, ou encore la publicité iAd, SQLite, ou le parsing XML… liste non exhaustive bien entendu. ;)
    Ce livre comporte énormément d'exemples de code et la qualité de celui-ci vous aidera à assimiler les bonnes pratiques à respecter tout en vous faisant découvrir de multiples facettes du développement iOS. En bref, si vous codez comme eux, vous ne codez pas comme un cochon. Il est très important de prendre de bonnes habitudes dès vos premiers pas en programmation.
    Par contre, attention au piège que représente un ouvrage de ce type. Du fait que beaucoup de code est fourni, la tentation de recopier bêtement de nombreuses portions de code sans les avoir vraiment comprises est grande. N'utilisez jamais du code que vous n'avez pas produit vous-même dans une application. Vous le regretterez quand viendra le moment d'en assurer la maintenance. ;)
  • Un livre de référence : Programmation Cocoa sous Mac OS X d'Aaron Hillegass. Vous pouvez sauter quelques chapitres qui ne concernent que Mac OS X et pas le développement iOS mais tout le reste est bon à prendre pour démarrer avec Cocoa.
  • Inscrivez-vous sur l'iOS Dev Center si ce n'est pas déjà fait et mettez-le en favoris. Vous y trouverez la documentation de référence du SDK et si vous êtes familiarisés avec le MSDN ou de la Javadoc vous vous y sentirez comme chez vous.

V. Ça y est je Maîtrise ! Avec un grand M !

Pas tout à fait. Il vous reste encore à devenir un développeur iOS. Voici les éléments à maîtriser et quelques sources d'informations pour vous y aider.

  • Cocoa Touch : le framework de développement iPod Touch, iPhone et iPad. C'est une version adaptée aux appareils mobiles du framework Cocoa qu'on utilise pour développer sous Mac OS X. À partir de maintenant, la majeure partie de votre travail va consister à découvrir puis apprendre à utiliser les classes de ce framework.
  • Interface builder : l'outil de design d'interface graphique. Vous pouvez lire la section Edit User Interfaces du XCode 4 User Guide. Il est plus que recommandé de lire les iOS Human Interface Guidelines avant de concevoir une application destinée à l'App Store.
  • Instruments : Instruments est une suite de logiciels servant principalement à tester et optimiser les performances de vos applications, à détecter les fuites de mémoire, etc. Comme pour Interface Builder, vous disposez d'un guide très complet : Instruments User Guide.
  • SQLite : la base de données que l'on utilise le plus souvent sur iPhone et iPad. La documentation complète de SQLite est disponible ici.
  • GPS, Accéléromètre, Caméra… : rien de compliqué, pour tous les appareils embarqués dans l'iPhone ou l'iPad il faudra simplement vous débrouiller en farfouillant dans la doc des classes dédiées à ces appareils, toujours sur l'iOS Dev Center.
  • Dessin et animation : pour pouvoir dessiner et faire des animations, vous devez faire connaissance avec deux frameworks, Quartz 2D et Core Animation. Nous les appellerons familièrement Q2 et CA. Venez, ne soyez pas timide, je vais vous présenter. Q2 et CA, voici Développeur Débutant soyez gentils avec lui. Développeur Débutant je te laisse faire connaissance avec eux ici et ici
  • La 3D : si les sympathiques Q2 et CA vous ont ennuyé de par leur simplicité d'esprit et leur facilité à se laisser manipuler, si vous êtes un véritable aventurier des temps modernes, un guerrier du binaire, un vrai de vrai, un barbu, un tatoué qui aime ça et qui en redemande, alors vous pouvez vous frotter aux Démons les plus terrifiants qu'on ait connus de mémoire de développeur, les Maîtres de l'Enfer des Dév, j'ai nommé le Sombre Seigneur OpenGL et le Prince Noir OpenGL ES. Si vous y survivez, courageux aventurier, votre nom sera glorifié pour l'éternité et vous pourrez faire tomber les filles à la prochaine WWDCWorldWide Developpers Conference.

    Bon et puis débrouillez-vous un peu, après tout, si vous êtes arrivé jusqu'ici vous n'avez plus besoin que je vous guide, vous êtes à peu près un développeur confirmé. :)

VI. Annexe : autres conseils utiles

 
  • Avant de demander de l'aide sur un forum, prenez le temps de chercher dans la documentation, sur les moteurs de recherche et avec la fonction recherche du forum. Vous avez de la chance, les informaticiens sont d'une manière générale des gens particulièrement sympathiques qui cultivent certaines valeurs d'entraide, de solidarité et de partage. Néanmoins, songez que vous pouvez être la 1000e personne qui pose la même question. Même nous ça peut nous lasser, ne soyez donc pas étonné si vous vous faites remballer un peu violemment quand la solution était évidente et que vous n'avez pas pris le temps de chercher. Soyez courtois, commencez par un bonjour, finissez par un merci et faites l'effort d'écrire correctement et vous serez toujours bien reçu. Il est primordial de faire l'effort de s'exprimer correctement quand on veut être compris et obtenir une réponse. :)
    Cependant, ne soyez pas timide et n'ayez pas peur de demander de l'aide avant de vous décourager. On ne mord pas si vous vous y prenez bien. :P
  • Ne demandez jamais aux autres de faire votre travail à votre place ! Vous pouvez obtenir de l'aide ou des pistes de recherches mais du code tout fait à copier/coller, non. Ça ne vous rendrait pas service. N'utilisez jamais du code que vous ne comprenez pas dans une application. Ça ne fera que vous créer des ennuis par la suite. :)
  • Faites l'effort de lire en anglais. Oui, c'est dur parfois, que la doc d'Apple ne soit pas traduite, surtout si on est habitué au merveilleux MSDN ou aux montagnes de doc PHP en français par exemple, mais tout le monde doit faire cet effort. Personne ne vous demande de parler un anglais parfait et de parler philosophie avec un Irlandais pendant des heures, juste de lire de la documentation technique. Ce n'est vraiment pas insurmontable même pour les moins polyglottes d'entre nous. ;)
    Si vous ne faites pas cet effort, vous ne vous en sortirez jamais avec le dev iOS et Cocoa. Il y a très peu de ressources traduites. :)
  • Ne commencez pas en voulant faire une application pour l'App Store ! C'est incroyable le nombre de gens qu'on voit nous demander de l'aide après s'être lancé dans un soi-disant projet d'application alors qu'ils sont incapables de faire un simple Hello World sur un iPhone. Commencez par des choses simples. Si vous n'êtes pas capable de faire une application avec une vue, un bouton et un champ texte qui a pour seule fonction l'affichage de quelque chose dans le champ texte lors de l'appui sur le bouton, alors c'est qu'il est trop tôt pour commencer à songer à une application commerciale.
  • Non « Avoir codé quelque chose qui marche » et « Avoir copié/collé le code d'un tuto puis constaté que ce code marche » ne signifient pas la même chose.
  • Bizarrement et pour votre plus grande surprise « Mets @property(nonatomic, retain) UIButton *btnMachin; dans le .h » ne veut absolument pas dire que vous devez écrire « @property(nonatomic, retain) UIButton *btnMachin; » dans le .h ! En réalité, ça veut dire que vous devez aller chercher dans la doc ce que veulent dire les mots-clefs @property, nonatomic et retain et comprendre à quoi ils servent. Ensuite vous pouvez le mettre dans le .h si l'envie vous en prend.

    Bon courage dans votre apprentissage et à bientôt sur le forum ou ailleurs ;)

Remerciements

Merci à ClaudeLELOUPClaudeLELOUP pour la relecture de cet article.

Remerciements spéciaux à Lana.BauerLana.Bauer et _Max__Max_ pour leur accueil parmi les rédacteurs, leur aide précieuse, leur disponibilité et tout le reste.