<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Lab &#187; code</title>
	<atom:link href="http://cyrilgodefroy.com/blog/index.php/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://cyrilgodefroy.com/blog</link>
	<description>You are here</description>
	<lastBuildDate>Fri, 06 Aug 2010 08:58:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Développer pour l&#8217;iPhone &#8211; Chapitre 1 &#8211; Partie 3 &#8211; Pratique XCode / Interface Builder</title>
		<link>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-3-pratique-xcode-interface-builder/</link>
		<comments>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-3-pratique-xcode-interface-builder/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 18:02:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iPhone Dev]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://cyrilgodefroy.com/blog/?p=908</guid>
		<description><![CDATA[Pour améliorer un peu le fonctionnement de notre Salut les copains et apprendre à manier un peu mieux les outils qui sont disponibles, on va utiliser et exploiter différents éléments d&#8217;interface, et commencer à faire un peu de code. On restera assez bref dans les explications sur le code en Objective-C, c&#8217;est pour la suite. [...]]]></description>
			<content:encoded><![CDATA[<p>Pour améliorer un peu le fonctionnement de notre Salut les copains et apprendre à manier un peu mieux les outils qui sont disponibles, on va utiliser et exploiter différents éléments d&#8217;interface, et commencer à faire un peu de code. On restera assez bref dans les explications sur le code en Objective-C, c&#8217;est pour la suite. On est vraiment plus dans la maîtrise des outils.</p>

<p>Nous allons afficher les informations que l&#8217;on peut récupérer comme informations sur l&#8217;appareil, votre iPhone, votre iPod, c&#8217;est pratiquement une des premières applications que j&#8217;ai faite moi même (la première) après avoir vu les vidéos d&#8217;explications disponibles sur iTunes developer.</p>

<p>Nous allons aussi faire en sorte de faire fonctionner cette interface!</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz001.png" alt="" /></p>

<p>On va commencer justement par réaliser cette interface. Nous en avons déjà un bout, continuons sur cette lancée. On ouvre donc à nouveau le nib SalutViewController. On vérifie que le fond est bien d&#8217;un blanc immaculé, et non d&#8217;un gris clair.</p>

<p>Dans la bibliothèque, accessible par Tools / Library ou ⇧⌘L, on retrouve le segmented control, qui dans sa vue par défaut se présente avec un 1 et un 2. On le saisit et on le dépose au bon endroit.</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz002.png" alt="" /></p>

<p>On voit qu&#8217;on a que deux sélections. En sélectionnant cet objet, on fait apparaître la fenêtre d&#8217;attributs ⇧⌘1 si elle n&#8217;est pas visible, et on augment le nombre de segments (de 2 à 4). Comme les segments sont un peu petits, on peut augmenter la taille générale de l&#8217;objet. On peut aussi changer le style.</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz003.png" alt="" /></p>

<p>Une fois que c&#8217;est fait, on peut changer les intitulés des contrôles de la barre de contrôle. On choisit dans la liste déroulante chaque segment l&#8217;un après l&#8217;autre puis on change son nom. On peut remarquer à l&#8217;occasion que chaque segment a un numéro de 0 à 3.</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz004.png" alt="" /></p>

<p>On va ensuite rajouter le switch et le slider. Prenez les dans la bibliothèque et déposez les dans votre vue. Remarquez en manipulant ces objets comment Interface Builder vous présente des guides de positionnement, alignant les objets, laissant de la marge entre l&#8217;objet et le bord de la vue etc. Plaçons enfin le bouton et les trois UILabels. Notre interface est visuellement achevée.</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz005.png" alt="" /></p>

<p>Les textes des boutons et des labels ne sont pas bons alors changeons les. Sélectionnez chaque objet l&#8217;un après l&#8217;autre et changez son texte soit dans l&#8217;interface soit dans l&#8217;inspecteur d&#8217;attributs.</p>

<p><img src="/blog/wp-content/uploads/2009/03/01-03interfacebuilderecransnapz006.png" alt="" /></p>

<p>Pour commencer tout doucement avec &#8220;le truc qui pose des problèmes aux gens&#8221;, les connexions, nous allons juste appeler des méthodes. Si vous êtes un développeur WebObjects ou même Tapestry en Java, vous n&#8217;aurez aucun souci. Sinon, n&#8217;hésitez pas à relire cette page, à poser des questions. Si vous n&#8217;avez jamais fait de développement GUI, tant mieux : vous êtes encore tout frais.</p>

<p>On va utiliser le debugger du pauvre NSLog, comme ça:</p>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;NSLog(@&quot;Methode toto appelée&quot;);</div></div>

<p>Commençons par créer une méthode pour le bouton central. Nous allons la déclarer dans le fichier .h et l&#8217;implémenter dans le fichier .m .</p>

<h2>SalutViewController.h</h2>

<p><code>#import &lt;UIKit/UIKit.h&gt;</code></p>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@interface SalutViewController : UIViewController { <br />
&nbsp; &nbsp;<br />
} &nbsp;<br />
<br />
- (IBAction) buttonPressed:(id) sender; &nbsp;<br />
<br />
@end</div></div>

<h2>SalutViewController.m</h2>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#import &quot;SalutViewController.h&quot; &nbsp;<br />
<br />
@implementation SalutViewController &nbsp;<br />
<br />
- (IBAction) buttonPressed:(id) sender{ &nbsp;<br />
&nbsp; &nbsp; NSLog(@&quot;On a appuyé sur le bouton&quot;); &nbsp;<br />
} &nbsp;<br />
.... &nbsp;<br />
<br />
}</div></div>

<p>(Note: je ne colle pas toutes les méthodes, seulement celles qui m&#8217;intéressent)</p>

<p>Il faut maintenant coder comment déclencher cette action. Ou le faut il? Non ce n&#8217;est pas nécessaire. Interface Builder permet de connecter simplement le bouton avec la méthode, pour faire en sorte que le message par défaut du bouton soit lié à la méthode écrite. Pour le faire, on va connecter le bouton à la méthode dans SalutViewController. Allez, un petit screencast, mais avant pesnez à sauvegarder vos fichiers:</p>

<script language="JavaScript" type="text/javascript">
  QT_WriteOBJECT_XHTML('/blog/wp-content/uploads/2009/03/01-connexionaction.mov', '640', '416', '',
    'autoplay', 'false',
    'emb#bgcolor', 'black',
    'align', 'middle'); 
</script>

<p>Vous avez vu? Simple. Pas besoin de chercher midi à 14 heures.</p>

<h1>Ce qui peut ne pas marcher</h1>

<p>Le screencast ne donne peut être pas le bon résultat pour vous. A cela quelques raisons fréquentes que je vais  rassembler ici. Première chose il faut bien sauvegarder vos fichiers  de code avant de regarder dans Inerface Builder. Quand vous le faites, XCode prévient Interface Builder dans votre dos qu&#8217;il doit relire la définition de l&#8217;objet, le fichier .h.</p>

<p>Deuxième chose qui peut clocher : votre méthode doit accepter certains objets en paramètres et renvoyer void ou IBAction. Avec IBAction, vous êtes certains que Interface Builder sait que l&#8217;on a définit cette méthode pour qu&#8217;il puisse la manger, s&#8217;en servir. De son côté l&#8217;objet que vous allez actionner va toujours s&#8217;envoyer lui même comme paramètre de la méthode. Comme les objets peuvent être de nature de différente, on a l&#8217;habitude d&#8217;accepter <code>id</code> comme paramètre (ce qui désigne un objet).</p>

<p>Tout ça c&#8217;est ce qui peut déconner dans le fichier .h . Maintenant vous pouvez faire des erreurs dans le fichier .m Par exemple vous pouvez oublier complètement d&#8217;implémenter la méthode. Le compilateur vous préviendra avec un warning, mais ce n&#8217;est pas une cause d&#8217;échec de la compilation. Si vous vous trompez de syntaxe, ou que vous changez le type de retour de la méthode ou les objets pris en entrée, cela a le même (désastreux) effet. A l&#8217;utilisation, ce type d&#8217;erreur conduit à un crash suite à une erreur de type obc_exception_throw .</p>

<p>Si vous ne voyez pas votre méthode apparaître quand vous essayez de connecter, cherchez du côté de la signature de la méthode, dans le ficheir .h : bons paramètres, bon retour.</p>

<p>Enfin, vous pouvez oublier de faire la connexion. Alors évidemment, le bouton ne fait rien.</p>

<h1>Allez, niveau supérieur</h1>

<p>Le niveau supérieur, c&#8217;est dans l&#8217;autre sens : connecter des variables du code avec l&#8217;interface. On va faire simple, on va commencer juste avec le UILabel du début. Pour expliquer le concept, disons cela :</p>

<p>Quand l&#8217;interface se réveille, elle sait quel type d&#8217;objet contrôleur doit être désarchivé avec elle. En effectuant les connexions, on lie les variables de l&#8217;interface qui se réveille avec les variables de l&#8217;objet contrôleur correspondant.</p>

<p>Il faut donc avoir des variables dans le code, dans le header, pour les lier aux objets présents dans l&#8217;interface. Notre code ressemble alors à cela:</p>

<p><code>#import &lt;UIKit/UIKit.h&gt;</code></p>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@interface SalutViewController : UIViewController { &nbsp;<br />
&nbsp; &nbsp; IBOutlet UILabel *salutLabel; &nbsp;<br />
} &nbsp;<br />
&nbsp; <br />
- (IBAction) buttonPressed:(id) sender; &nbsp;<br />
<br />
@end</div></div>

<p>On sauvegarde et on effectue la connexion entre le code et l&#8217;interface pour que le code sache quel est l&#8217;objet correspondant, et que l&#8217;interface sache avec quelle variable du contrôleur lier l&#8217;objet qui revient à la vie.</p>

<p>Et hop, screencast :</p>

<script language="JavaScript" type="text/javascript">
  QT_WriteOBJECT_XHTML('/blog/wp-content/uploads/2009/03/01-connexionoutlet.mov', '640', '416', '',
    'autoplay', 'false',
    'emb#bgcolor', 'black',
    'align', 'middle'); 
</script>

<p>Nous avons rajouté la variable salutLabel qui est un objet de type UILabel au code. Puis nous avons connecté la variable au bon objet dans l&#8217;interface.</p>

<p>Nous allons maintenant simplement changer le contenu du texte de salutLabel. Pour ce faire on va utiliser la méthode  liée au bouton tout à l&#8217;heure. On va le faire pas trop sophistiqué pour le moment. On va remplacer la méthode buttonPressed en rajoutant un changement de la propriété <code>text</code> .</p>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">- (IBAction) buttonPressed:(id) sender{<br />
&nbsp; &nbsp; NSLog(@&quot;On a appuyé sur le bouton&quot;);<br />
&nbsp; &nbsp; salutLabel.text = @&quot;salut les aminches&quot;;<br />
}</div></div>

<p>Voilà! On a donc fait un truc très simple. Même si le concept vous parait encore un peu étranger, ne vous posez pas plus de questions que cela pour le moment. A l&#8217;usage, un jour, si c&#8217;est encore un peu obscur, votre cerveau va s&#8217;éclaircir et verra la lumière.</p>

<p><a href="/blog/wp-content/uploads/2009/03/01-03-salut.zip">Téléchargez le projet à cette étape</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-3-pratique-xcode-interface-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer pour l&#8217;iPhone &#8211; Chapitre 1  &#8211; Partie 2 &#8211; Interface Builder</title>
		<link>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-2-interface-builder/</link>
		<comments>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-2-interface-builder/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 16:58:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://cyrilgodefroy.com/blog/?p=887</guid>
		<description><![CDATA[Interface Builder, une invention française cocorico Si vous ne me croyez pas : Jean Marie Hullot Passé cette boutade, parlons un peu d&#8217;Interface Builder. Pour ceux qui ne connaissent pas, Interface Builder est une révolution pour le design d&#8217;interface. en tout cas il utilise un paradigme différent des autres interfaces de création d&#8217;interface. En effet [...]]]></description>
			<content:encoded><![CDATA[<h1>Interface Builder, une invention française cocorico</h1>

<p>Si vous ne me croyez pas : <a href="http://en.wikipedia.org/wiki/Interface_Builder">Jean Marie Hullot</a></p>

<p>Passé cette boutade, parlons un peu d&#8217;Interface Builder. Pour ceux qui ne connaissent pas, Interface Builder est une révolution pour le design d&#8217;interface. en tout cas il utilise un paradigme différent des autres interfaces de création d&#8217;interface. En effet Interface Builder ne crée pas un modèle de code qu&#8217;il faudra rééditer ensite, mais un document d&#8217;interface qu&#8217;il archive sous forme de fichier, pour le désarchiver à l&#8217;exécution.</p>

<p>Ces fichiers .xib que vous voyez sont ( à peu de choses près) les mêmes que ceux qui sont dans votre application. Les objets y sont séchés à froid. Au désarchivage, on les reconnecte avec le code qui les concerne et ils reprennent vie.</p>

<p>Dans les faits, ça donne ça : double cliquez sur SalutViewController.xib. Interface Builder s&#8217;ouvre et vous présente le contenu du bundle (paquet) du bundle j&#8217;ai dit, avec la vue principale ouverte et une bibliothèque d&#8217;objets disponibles. Pour utiliser les objets, on les met dans la vue, on les connecte avec le code, on sauvegarde et voilà. C&#8217;est tout. Pas de génération de code, rien.</p>

<p>Et si on le faisait?</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz001.png" alt="" /></p>

<p>Tout d&#8217;abord, dans Interface Builder, je préfère avoir la visualisation des objets en liste. Cette présentation en liste permet en effet de montrer l&#8217;arbre de tous les objets et la façon dont ils s&#8217;insèrent les uns dans les autres. Commençons par l&#8217;objet le plus rempli, MainWindow.xib : dans XCode, double cliquez dessus pour l&#8217;ouvrir. Vous avez une fenêtre avec cinq objets.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz002.png" alt="" /></p>

<p>Si vous choisissez l&#8217;affichage en liste, cela donne aussi cela.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz003.png" alt="" /></p>

<p>Le premier objet est SalutAppDelegate, un objet créé automatiquement pour vous à la création du projet. Il hérite de NSObject.</p>

<p>Le second objet est window, qui représente la seule fenêtre de cette application.</p>

<p>Sélectionnez votre SalutAppDelegate et faites apparaître la fenêtre de propriétés ⇧⌘1 ou Tools / Attributes inspector. Dans cette fenêtre il y a 4 onglets : attributs, connexion, tailles et identité. Le premier onglet ici ne sert à rien car SalutAppDelegate n&#8217;a aucun attribut qui se rapporte à l&#8217;interface. Le second onglet montre les différentes connexions qui peuvent être faites entre cet objet et les autres objets accessibles par interface builder. Ainsi, ici l&#8217;objet SalutAppDelegate a deux variables qui peuvent être liées à d&#8217;autres objets : viewController et window . La première est liée à l&#8217;objet SalutViewController présent juste en dessous, la deuxième est liée à la fenêtre Window.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz004.png" alt="" /></p>

<p>Pour le bénéfice de l&#8217;exercice, nous allons casser les liens faits automatiquement, et les refaire.</p>

<p>Dans la fenêtre des connexions, cliquez sur la petite croix présente entre viewController et Salut View Controller, puis sur la petite croix présente entre window (la variable window de l&#8217;objet SalutAppDelegate) et Window (la fenête créée dans Interface Builder). Allez, on va carrément effacer l&#8217;objet Window. On le sélectionne dans MainWindow.xib et on appuie sur la touche Backspace.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz005.png" alt="" />
<img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz006.png" alt="" /></p>

<p>Si on sauvegarde et qu&#8217;on va dans XCode et qu&#8217;on compile&#8230;. Patatras! Une belle application avec un bel écran noir.</p>

<p>Retournons dans Interface Builder. On fait apparaître la bibliothèque des objets en appuyant sur ⇧⌘L ou Tools / Library. Vous voyez tous les objets disponibles par défaut pour une application Cocoa Touch. Parcourez la liste et quand vous voyez Window, sélectionnez la et faites un drag &amp; drop vers la fenêtre MainWidow.xib : vous venez de créer un objet de type Window qui sera accessible au démarrage.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz007.png" alt="" /></p>

<p>Nous allons maintenant connecter la variable window de SalutAppDelegate à cette fenêtre. Il existe trop de façons de faire les connexions. On utilisera toujours la même ici : on sélectionne l&#8217;objet d&#8217;origine, on appuie sur Ctrl, on drag vers l&#8217;objet qui nous intéresse, soit dans la fenêtre .xib, soit dans l&#8217;interface elle même, on lâche et on sélectionne la &#8216;prise&#8217; l&#8217;outlet qui convient.</p>

<p>Tiens, un petit screencast :</p>

<script language="JavaScript" type="text/javascript">
  QT_WriteOBJECT_XHTML('/blog/wp-content/uploads/2009/03/01-connexion.mov', '640', '416', '',
    'autoplay', 'false',
    'emb#bgcolor', 'black',
    'align', 'middle'); 
</script>

<p>Maintenant, nous allons rétablir la connexion entre viewController (la variable de SalutAppDelegate) et le le controller présent dans la fenêtre .xib . Allez y je ne vous aide pas.</p>

<p>On est revenu dans l&#8217;état d&#8217;origine de l&#8217;interface.</p>

<p>On va se concentrer maintenant sur deux choses : la fenêtre window, et le rapport entre le fichier source dans XCode et l&#8217;objet dans Interface builder.</p>

<p>La fenêtre Window est la vue de base de toute votre application, la fenêtre dans laquelle toutes les vues vont s&#8217;afficher. En fait quand vous allez ajouter des objets de la librairie, vous allez ajouter des vues en cascade, et c&#8217;est pour cela que j&#8217;aime bien la vue liste : elle montre la cascade de vues. Les vues ont des supervues (les vues qui les continennent) et des sous vues (les vues qu&#8217;elles contiennent éventuellement). On ne peut toutefois pas remonter plus haut que la vue de la fenêtre : celle ci n&#8217;a pas de supervue.</p>

<p>Cette fenêtre va nous aider à faire le lien avec la deuxième question, celle du rapport entre le code et Interface Builder. Si vous ouvrez dans XCode le code SalutAppDelegate.h, vous voyez que deux variables sont définies :</p>

<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;@interface SalutAppDelegate : NSObject &lt;UIApplicationDelegate&gt; {&lt;br /&gt;<br />
&nbsp; &nbsp; UIWindow *window;&lt;br /&gt;<br />
&nbsp; &nbsp; SalutViewController *viewController;&lt;br /&gt;<br />
&nbsp;}&lt;br /&gt;<br />
@property (nonatomic, retain) IBOutlet UIWindow *window;&lt;br /&gt;<br />
@property (nonatomic, retain) IBOutlet SalutViewController *viewController;&lt;br /&gt;</div></div>

<p>Ce sont les deux variables que l&#8217;on retrouve dans Interface Builder. Pourquoi sont elles disponibles dans Interface Builder? C&#8217;est parce que l&#8217;on a ajouté le mot clé IBOutlet devant. Si vous rajoutez une nouvelle variable, sous la forme d&#8217;une variable mais en omettant ce IBOutlet, vous ne verrez pas la prise apparaître dans Interface Builder.</p>

<p>C&#8217;est une erreur assez commune et qu&#8217;il m&#8217;arrive encore de faire de temps en temps. Pensez y. Les autres propriétés et variables de l&#8217;objet SalutAppDelegate ne sont pas accessibles à Interface Builder.</p>

<p>Quand l&#8217;interface faite avec Interface Builder est &#8216;initée&#8217;, initialisée, les variables deviennent les objets représentés dans Interface Builder. Il n&#8217;est donc pas nécessaire de créer ces objets : ils sortent de leur hibernation et ils sont là, tout simplement. Pas d&#8217;alloc, d&#8217;init etc pour eux.</p>

<p>On va retourner faire joujou avec les vues. On a vu que Window est la vue principale de l&#8217;application, celle dans laquelle on met tout. Alors ouvrez dans Interface Builder cette fenêtre et déposez y des objets avec vue : Label, Switch, TextField. etc. Sauvegardez et retournez dans XCode lancer l&#8217;application. Qu&#8217;est ce que vous obtenez? la même fenêtre grise qu&#8217;avant. Que se passe-t-il? Vos nouveaux objets sont en fait cachés par une autre vue qui vient par dessus, la vue de l&#8217;objet Salut View Controller.</p>

<p>C&#8217;est ce que fait le code</p>

<p><code>[window addSubview:viewController.view];</code></p>

<p>dans SalutAppDelegate.</p>

<p>Rouvrez donc Window et effacez les objets inutiles. Allons plutôt mettre des objets utiles dans la vue de SalutViewController. Dans XCode, double cliquez sur SalutViewController.xib et ajoutez un Label (UILabel) à cette fenêtre, toujours en drag &amp; drop. Changez la taille de cet objet dans l&#8217;interface pour qu&#8217;il soit bien large et au centre. Puis dans ses attributs allez changer le texte. Ou changez le en double cliquant sur le texte Label dans l&#8217;interface.</p>

<p><img src="/blog/wp-content/uploads/2009/03/interface-builderecransnapz008.png" alt="" /></p>

<p>Lancez votre application. Ca y est, les objets ajoutés sont visibles!</p>

<p><a href="/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-3-pratique-xcode-interface-builder/">La Suite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-2-interface-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer pour l&#8217;iPhone &#8211; Chapitre 1 &#8211; Partie 1 &#8211; Salut les Copains!</title>
		<link>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-1-salut-les-copains/</link>
		<comments>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-1-salut-les-copains/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 20:32:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://cyrilgodefroy.com/blog/?p=874</guid>
		<description><![CDATA[Nous allons aujourd&#8217;hui succomber à une coutume ancestrale qui veut que tout livre de programmation, toute découverte d&#8217;un nouveau langage ou d&#8217;une nouvelle plateforme commence par l&#8217;écriture d&#8217;un Hello World. Hello World (Salut les Copains pour cette version toute en français) est une manière de découvrir l&#8217;environnement de travail et de commencer à développer sans [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons aujourd&#8217;hui succomber à une coutume ancestrale qui veut que tout livre de programmation, toute découverte d&#8217;un nouveau langage ou d&#8217;une nouvelle plateforme commence par l&#8217;écriture d&#8217;un Hello World. Hello World (Salut les Copains pour cette version toute en français) est une manière de découvrir l&#8217;environnement de travail et de commencer à développer sans être brusqué, tout doux.</p>

<p>On va essayer d&#8217;y aller tout tout doux alors.</p>

<h1>Lancer XCode</h1>

<p>Commençons par lancer XCode. Il est dans Developer/Applications. Vous aurez envie de le mettre dans votre Dock pour y avoir rapidement accès.</p>

<p>Vous êtes accueillis par cet écran</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz001.png" alt="" /></p>

<p>et si vous cliquez sur iPhone, par celui ci:</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz002.png" alt="" /></p>

<p>Les informations présentées sur cet écran sont toutes disponibles sur le site web, dans la section iPhone, et dans la documentation. Vous pouvez lire quelques instants, et passer à autre chose en fermant la fenêtre. Si vous ne vouslez plus voir cette fenêtre au démarrage, décochez la case en bas à gauche.</p>

<p>XCode a une vue de document, contrairement à d&#8217;autres environnements que vous connaissez peut être comme Eclipse. Cela signifie que si vous n&#8217;ouvrez aucun document (texte, projet, code etc) , vous n&#8217;avez rien à l&#8217;écran, comme dans la plupart des applications Mac. Par ailleurs, comme vous pouvez créer des documents de nature très différente, XCode ne vous propose pas un document par défaut.</p>

<p>On va donc créer un nouveau projet.</p>

<h1>Créer un nouveau projet</h1>

<p>Allez dans File / New Project&#8230; ou pressez ⇧⌘N (pomme shift N &#8211; commande shift N). Apparaît l&#8217;assistant de création de projet qui vous propose tous les modèles disponibles par défaut sur votre XCode:</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz003.png" alt="" /></p>

<p>Ne nous dispersons pas avec une Kernel extension ou un projet WebObjects (ah bah non, ceux ci n&#8217;existent plus) et choisissons la première ligne à gauche : iPhoneOS applications. Nous avons une série de 6 modèles préexistants que nous ne détaillerons pas ici. On va simplement choisir un des plus simples qui  est View Based Application. Puis on clique sur Choose&#8230;.</p>

<p>Le plus dur est fait&#8230; presque car il faut maintenant trouver un nom à ce projet. On choisit Salut  et on on indique un emplacement où le déposer. Par défaut, XCode propose Documents ce qui n&#8217;est pas plus mal qu&#8217;un autre endroit. Personnellement j&#8217;ai créé un répertoire iPhone à la racine de mon répertoire personnel et je ets mes projets dedans. Je lui ai même donné une petite icone d&#8217;iPhone pour m&#8217;en souvenir. Pour l&#8217;occasion du bouquin, je crée même un nouveau dossier iPhoneBook dans mon dossier maison.</p>

<p>Cette fois le plus dur est fait!</p>

<p>XCode ouvre en effet une fenêtre contenant tout un tas d&#8217;objets à gauche, un tas de nom de fichier en haut. Tous les fichiers sont là. Ne soyez pas intimidé. Repérez le bouton &#8220;Build and Go &#8221; avec une grosse flèche verte et un marteau et cliquez dessus.</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz004.png" alt="" /></p>

<p>L&#8217;application se compile et en quelques secondes un iPhone apparaît sur votre écran et vous montre avec fierté&#8230;.   un écran vide!</p>

<p><img src="/blog/wp-content/uploads/2009/03/simulateur-iphoneecransnapz001.png" alt="" /></p>

<p>Vous êtes devenu développeur iPhone, et vous pouvez rivaliser avec les premières applications apparues sur l&#8217;AppStore.</p>

<p>Si vous avez un peu plus d&#8217;ambition que cela, passons à l&#8217;étape suivante.</p>

<h1>Faire connaissance avec XCode</h1>

<p>Quittez le simulateur et votre première application iPhone. Retournons ensemble dans XCode. Première chose, la fenêtre est un peu chétive. J&#8217;ai tendance à l&#8217;agrandir pour qu&#8217;elle prenne 80% de l&#8217;écran. Elle est découpée en 4 portions : la barre d&#8217;outils, la liste de fichiers (réels et virtuels) à gauche, la fenêtre des détails en haut à droite, et la fenêtre de contenu ou éditeur, en bas à droite.</p>

<p>Je déteste cette mise en page. Je commence par aller dans les préférences de XCode pour afficher le mode &#8220;tout en un&#8221; qui évite d&#8217;avoir des fenêtres différentes. Il faut fermer le projet courant pour le faire.</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz006.png" alt="" /></p>

<p>Ensuite, au fur et à mesure que je développe je passe mon temps à cacher la fenêtre de détail en faisant ⇧⌘E .</p>

<p>La fenêtre de gauche vous montre tous les fichiers, les réglages et les résultats de votre projet. En cliquant sur un triangle, vous ouvrez comme dans le Finder, et vous voyez le contenu du groupe. Cliquez d&#8217;abord sur le groupe de Salut, puis sur Classes, Other Sources, Resources etc. Vous verrez tous les fichiers qui constituent votre projet.</p>

<p>En cliquant sur un fichier, par exemple  SalutAppDelegate.h, vous le voyez s&#8217;ouvrir dans la fenêtre de l&#8217;éditeur, et prendre la place principale de la fenêtre de détail : fermez cette fenêtre inutile. Toujours dans les préférences, vous pouvez régler pour qu&#8217;elle reste fermée. On a alors une belle fenêtre et on peut se concentrer en ayant de l&#8217;espace.</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz007.png" alt="" /></p>

<p>Première astuce, pour passer du fichier .h (le header) au fichier .m (l&#8217;implémentation), les touches ⇧⌘ et flèches haut sont judicieusement passées. Vous allez passer de l&#8217;un à l&#8217;autre souvent, voilà une astuce qui vous simplifiera la vie.</p>

<p>En fonction du type de fichier choisi dans la gauche, XCode vous propose un éditeur différent. Par exemple si vous cliquez sur info.plist (dans le groupe Resources), vous aurez un éditeur de property list. Certains fichiers doivent être édités à l&#8217;extérieur, c&#8217;est le cas des .xib (ou .nib).</p>

<p>Reprenons la liste de la fenêtre de gauche. Le groupe Classes représente le cœur de votre programme. C&#8217;est là que vous mettrez toutes vos classes Objective-C qui feront fonctionner votre application. Vous pouvez créer des groupes à l&#8217;intérieur de ce groupe, pour vous simplifier et mieux organiser vos fichiers. J&#8217;ai des groupes habituels comme Business (classes de définition d&#8217;objets persistants dans une base de données), Controllers (le plus gros) pour tous les View Controllers, des classes utilitaires dans Utilities etc etc.</p>

<p>Le groupe suivant, je n&#8217;y vais pratiquement pas. Il contient le fichier .pch de header qui s&#8217;applique à toutes vos classes, et le fichier main.m : car pour ceux qui ne le savent pas, l&#8217;Objective-C, c&#8217;est du C. C&#8217;est donc la fonction main qui lance l&#8217;application. Dans des cas extrêmes, vous pouvez mettre du code là dedans pour effectuer des tâches en un seul coup. On verra si on en a besoin, mais c&#8217;est rare.</p>

<p>Le groupe Resources contient les &#8216;media&#8217; de votre application : images, interface, fichiers de configuration etc. Dans notre cas présent, il contient deux définitions d&#8217;interface, et une liste de propriétés (une plist, ou property list).</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz008.png" alt="" /></p>

<p>Le groupe Frameworks commence à etre un peu bizzare, car il contient la liste des librairies qui seront liées à votre application. Les frameworks sont des librairies avec des ressources, et le moyen développé par Next et Apple de faire des librairies réutilisables par tous avec du code et des ressources (interface, boutons etc). Ici, les fichiers ne sont pas vraiment dans le projet : si vous allez voir dans le répertoire Salut, vous ne trouverez pas ces frameworks.</p>

<p>Ces frameworks sont toujours fournis par Apple, aussi bien sur l&#8217;iPhone que sur le simulateur : pas besoin de les copier.</p>

<p>Le dernier groupe Products contient le résultat de vos compilations réussies : l&#8217;application lancée tout à l&#8217;heure s&#8217;y trouve. Si vous doublez cliquez dessus, vous aurez une erreur, car elle ne peut fonctionner que sur le simulateur ou l&#8217;iPhone. Si vous allez dans Build / Clean et que vous acceptez les valeurs par défaut, vous allez effacer la version compilée. Le &#8220;produit&#8221; n&#8217;est plus là, et il apparaît alors en rouge.</p>

<p>Le fait de déplacer des fichiers dans l&#8217;arborescence ne change pas leur emplacement sur le disque avec les groupes que l&#8217;on a vu. Si vous voulez ranger les vrais fichiers, vous pouvez le faire dans le Finder, puis revenir dans XCode pour lui indiquer les bons chemins.</p>

<p><img src="/blog/wp-content/uploads/2009/03/finderecransnapz002.png" alt="" />
La structure du dossier salut : pas de dossier resources, ni frameworks&#8230;.</p>

<p>XCode est aussi le principal lieu de lecture de la documentation, là où on en a besoin. Pour accéder à la documentation d&#8217;une classe, il suffit de double cliquer dessus en appuyant sur ⌥ en même temps. Normalement la première fois que vous accéderez à la documentation, elle ne sera pas téléchargée. Maintenant est un bon moment de le faire, alors sélectionnez Help / Documentation, puis à gauche la bibliothèque qui correspond à votre version d&#8217;iPhone (2.2 ou 2.2.1). Le logiciel vous propose alors d&#8217;y souscrire. Bon téléchargement!</p>

<p>Une fois que la doc est chargée, choisissez d&#8217;ouvrir SalutAppDelegate.h et double cliquez sur UIWindow en maintenant ⌥ appuyé. La documentation de cette classe apparaît. Vous pouvez naviguer dedans comme dans toute bonne page html. Appuyez sur commande ⌘ en cliquant sur un lien pour l&#8217;ouvrir dans une autre fenêtre, ⌘ et backspace pour revenir dans l&#8217;historique etc etc.</p>

<p>Dans la vue &#8220;all in one&#8221;, la fenêtre principale est alternativement en mode edition et en mode debug. Commencez par poser un point d&#8217;arrêt dans le fichier SalutAppDelegate.m en cliquant dans la gouttière à gauche de [window addSubView].</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz009.png" alt="" /></p>

<p>Relancez votre application : dès qu&#8217;elle rencontre ce point d&#8217;arrêt dans son exécution, elle s&#8217;arrête. XCode revient au premier plan (devant votre simulateur iPhone). Cliquez alors sur le debugger symbolisé par la bombe insecticide pour changer de vue.</p>

<p><img src="/blog/wp-content/uploads/2009/03/xcodeecransnapz010.png" alt="" /></p>

<p>On a une vue avec quatre fenêtres : la pile des instructions exécutées, la vue des variables et des différents objets, le code et le log. C&#8217;est ma vue préférée, celle où je passe des heures à m&#8217;arracher les cheveux pour des broutilles&#8230;</p>

<p>La barre d&#8217;outil change aussi : continue, step into etc. Ces outils vous permettent d&#8217;avance pars à pas dans vos méthodes, les unes dans les autres pour savoir ce qui cloche.</p>

<p>Arrêtons là pour la découverte de XCode, et passons à l&#8217;éditeur d&#8217;interface, Interface Builder.</p>

<p><a href="http://cyrilgodefroy.com/blog/index.php/2009/03/chapitre-1-partie-2-interface-builder/">La Suite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-1-partie-1-salut-les-copains/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer pour l&#8217;iPhone &#8211; Chapitre 0 &#8211; avant de commencer</title>
		<link>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-0-avant-de-commencer/</link>
		<comments>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-0-avant-de-commencer/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 19:45:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[programme développeur]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://cyrilgodefroy.com/blog/?p=848</guid>
		<description><![CDATA[Oui, car avant de commencer, il faut être équipé. Configuration matérielle Pour développer pour l&#8217;iPhone il faut un Mac avec processeur Intel. Un Mac Mini suffit amplement. J&#8217;ai personnellement travaillé pendant plusieurs mois sur un MacBook Air, une superbe machine mais pas une bête de course. Ne vous lancez pas dans l&#8217;aventure Hackintosh, vous y [...]]]></description>
			<content:encoded><![CDATA[<p>Oui, car avant de commencer, il faut être équipé.</p>

<h1>Configuration matérielle</h1>

<p>Pour développer pour l&#8217;iPhone il faut un Mac avec processeur Intel. Un Mac Mini suffit amplement. J&#8217;ai personnellement travaillé pendant plusieurs mois sur un MacBook Air, une superbe machine mais pas une bête de course. Ne vous lancez pas dans l&#8217;aventure Hackintosh, vous y perdrez certainement plus de temps et vous serez perdant in fine.</p>

<p>Non, il ne faut pas un Mac PowerPC. J&#8217;ai bien dit un Mac Intel.</p>

<p>Pour tester vos applications, il faut ensuite un iPod Touch ou un iPhone. Suivant le type d&#8217;application que vous ferez, il suffira peut être d&#8217;un iPod Touch 1 ou d&#8217;un iPhone 1, et non de l&#8217;iPhone 3G. Mais si vous choisissez un iPod Touch comme destination et plateforme de tests, n&#8217;oubliez pas qu&#8217;au point de vue matériel il vous manquera plusieurs choses :
* la possibilité de se connecter au réseau à peu près partout
* la caméra
* le GPS</p>

<p>A part cela, les différences sur le papier sont peu nombreuses entre les deux.</p>

<h1>Configuration logicielle</h1>

<p>Il faut avoir Leopard comme système d&#8217;exploitation. C&#8217;est obligatoire.</p>

<p>Un seul programme est nécessaire pour développer des applications pour l&#8217;iPhone. XCode 3.1. Pour l&#8217;obtenir gratuitement, rendez vous sur le site développeur d&#8217;Apple, (http://developer.apple.com). Là, vous allez vous inscrire pour avoir le sdk gratuit (free) en deux étapes distinctes.</p>

<p>Vous rentrez dans la partie inscription, et je vous conseille de lire les termes des contrats auxquels vous adhérez. Tout d&#8217;abord, entrez une nouvelle Apple ID si vous n&#8217;en avez pas. Si vous avez déjà acheté de la musique sur iTunes, ou un produit chez Apple, vous avez déjà un apple ID : utilisez l&#8217;adresse email correspondant à votre achat et le mot de passe que vous lui avez associé.</p>

<p>Une fois toutes vos coordonnées indiquées, vous devez indiquer quels sont vos secteurs d&#8217;activité préférés, votre expérience de la plate forme etc. Vous devez surtout lire le contrat qu&#8217;Apple vous propose. Une fois celui ci accepté, vous êtes inscrit.</p>

<p>Fin de la première étape.</p>

<p>La deuxième étape démarre dès que vous recevez l&#8217;email de confirmation d&#8217;Apple. Celui ci permet de valider votre inscription et valide votre adresse email.</p>

<p>En cliquant sur l&#8217;adresse dans le mail, vous arrivez au portail de développement iPhone, en étant déjà identifié. Il ne vous reste qu&#8217;à télécharger le SDK de près de 2 Go. Armez vous d&#8217;un peu de patience.</p>

<p>Voici un petit screencast de présentation de l&#8217;ensemble des opérations:</p>

<script language="JavaScript" type="text/javascript">
  QT_WriteOBJECT_XHTML('/blog/wp-content/uploads/2009/03/01-inscription-sdk.mov', '960', '616', '',
    'autoplay', 'false',
    'emb#bgcolor', 'black',
    'align', 'middle'); 
</script>

<h1>Adhérer au programme développeur</h1>

<p>Un élément qui fait grincer beaucoup de dents pour des raisons qui m&#8217;échappent est que pour pouvoir installer une application que vous développez, il faut la signer et que pour la signer il faut adhérer au programme développeur iPhone qui est payant. A la date d&#8217;aujourd&#8217;hui, le programme coûte 79 euros TTC.</p>

<p>Cette étape peut prendre un peu plus de temps. En effet, il faut s&#8217;inscrire au programme, attendre qu&#8217;Apple valide cet élément, vous recevez un mail et vous avez accès au paiement du programme. Prévoyez quelques jours de marge dans le pire des cas.</p>

<p>Cet accès au programme vous permet de récupérer un certificat Apple, de faire une demande de certificat pour votre poste de travail, de signer vos applications pour certains appareils avec votre certificat. Ce que cela vous permet surtout c&#8217;est d&#8217;uploader directement votre application sur votre iPhone ou iPod pour la tester en conditions réelles, ce qui est indispensable. Cela vous permet ensuite de faire une version AdHoc pour distribuer à vos testeurs ou clients. Enfin, cela permet de la mettre sur l&#8217;AppStore pour la distribuer partout dans le monde.</p>

<h1>Installez XCode</h1>

<p>Une fois XCode téléchargé, installez le sur la partition principale de votre ordinateur. Cela prend un peu de temps. Une fois fait, vous êtes enfin prêt à développer pour l&#8217;iPhone.</p>

<p><a href="http://cyrilgodefroy.com/blog/index.php/2009/03/chapitre-1-salut-les-copains/">La Suite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-chapitre-0-avant-de-commencer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développer pour l&#8217;iPhone &#8211; Préface</title>
		<link>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-preface/</link>
		<comments>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-preface/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 18:51:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://cyrilgodefroy.com/blog/?p=842</guid>
		<description><![CDATA[Bonjour et bienvenue dans cette toute nouvelle catégorie. L&#8217;envie me titillait depuis quelque temps déjà, à la fois suite à mon implication dans la création d&#8217;un &#8220;groupe &#8221; de développeurs iPhone en France, et suite à ma participation au Barcamp de novembre 2008 à LaCantine sur l&#8217;iPhone : apparemment de nombreuses personnes aimeraient développer des [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour et bienvenue dans cette toute nouvelle catégorie.</p>

<p>L&#8217;envie me titillait depuis quelque temps déjà, à la fois suite à mon implication dans la création d&#8217;un &#8220;groupe &#8221; de développeurs iPhone en France, et suite à ma participation au <a href="http://barcamp.org/iPhoneDevCampParis3">Barcamp de novembre 2008</a> à LaCantine sur l&#8217;iPhone : apparemment de nombreuses personnes aimeraient développer des compétences pour cette plateforme nouvelle et excitante qu&#8217;est l&#8217;iPhone, mais les ressources pour le faire ne sont pas encore disponibles.</p>

<p>Pour rendre cet accès plus disponible, j&#8217;ai décidé de consacrer jusqu&#8217;à une heure de mon temps chaque jour à rédiger un article pour vous faire découvrir ce que je sais. Pour ce que je ne sais pas, sur internet je pourrai vous renvoyer vers d&#8217;autres personnes, d&#8217;autres livres, des articles etc.</p>

<p>Un peu à la mode de <a href="http://www.37signals.com">37signals</a> et de <a href="http://gettingreal.37signals.com/">Getting Real</a>, mon ambition est aussi de développer ces articles jusqu&#8217;à ce qu&#8217;ils aient assez de corps pour faire un livre. Je l&#8217;annonce d&#8217;ores et déjà à ceux qui pensent que tout doit être gratuit : le livre ne le sera pas.</p>

<p>En attendant, les articles seront disponibles régulièrement sur ce blog, entrecoupés de réponses aux commentaires et de séances de développement (car il faut bien que je développe aussi). Profitez en et n&#8217;hésitez pas à répandre le mot autour de vous.</p>

<h1>Qui suis je pour écrire un livre?</h1>

<p>Quelqu&#8217;un qui a envie de le faire, avant tout. C&#8217;est une aventure longue et semée d&#8217;embûches, de désillusions. Il faut donc avoir du courage et de l&#8217;envie.</p>

<p>Ensuite, je développe pour l&#8217;iPhone depuis juin 2008. J&#8217;avais auparavant commis quelques petites applications pour MacOs X en 2000-2001. Je ne suis pas un super spécialiste d&#8217;Ojective-C, du C encore moins, je n&#8217;ai pas de passé de formateur.</p>

<p>J&#8217;ai déjà écrit deux e-books, un premier sur <a href="http://cyrilgodefroy.com/fr/produits/reussirvosphotos.php">la photographie numérique</a>, et un autre sur <a href="http://cyrilgodefroy.com/fr/produits/maxperf.php">la performance des pages web</a>. Mes qualités de rédacteur ne sont pas au top (je suis le premier à détecter des défauts quand je me relis), mais elles ne sont pas non plus exécrables. Disons que je suis dans une honnête moyenne pour de la documentation de ce niveau.</p>

<p>Je suis impliqué dans la création et l&#8217;existence d&#8217;un &#8220;groupe&#8221; français de développeurs iPhone, à titre personnel et ce depuis juin 2008. J&#8217;ai ouvert un site sous la forme d&#8217;un <a href="http://www.fidug.org">Wiki</a> pour former un point de rassemblement de développeurs iPhone, et j&#8217;essaie d&#8217;organiser régulièrement des réunions de développeurs iPhone à Paris, pour partager des expériences, montrer des projets, boire des bières, etc.</p>

<h1>Comment lire et suivre ce blog</h1>

<p>Les règles du jeu? Je m&#8217;engage à écrire et consacrer une heure par jour à cet ouvrage. J&#8217;hésite encore sur les week ends, ca il faut bien que je me repose et que je me consacre à ma famille et à mes autres projets personnels. Cela ne veut pas forcément dire que je pourrai publier tous les jours de la semaine non plus : entre le code buggé qui ne fonctionne pas et le manque d&#8217;inspiration, la nécessité parfois de passer plusieurs heures pour préparer un long article ou un long chapitre, je n&#8217;y crois pas.</p>

<p>Le contenu sera à la fois du texte et de longues explications où à la fin du paragraphe vous ne vous souviendrez plus du début, des exemples très concis, des petites applications. Le but est d&#8217;être très proche de la pratique, et d&#8217;éviter au maximum de vous mettre dans une situation de lecteur passif.</p>

<p>Les sujets seront les plus divers possibles. On commencera par le tout début de l&#8217;installation, on ira voir la plupart des secteurs du développement sur iPhone sauf (et à moins l&#8217;aide d&#8217;autres rédacteurs) OpenGL ES, on ira traîner du côté de l&#8217;optimisation des programmes, à la fois avec Instruments et avec clang.</p>

<p>Le contenu pourra aussi être sous la forme de screencasts car parfois il faut voir les choses pour les comprendre. Je ne sais pas encore comment les mettre dans un livre ceux là…</p>

<p>Pour être tenu au courant des mises à jour et des nouveaux articles, le mieux est de s&#8217;abonner au fil RSS de la catégorie.</p>

<p>Je n&#8217;hésiterai pas à rééditer les articles au fur et à mesure pour améliorer le contenu global des articles. Je ferai dans ce cas un encart de description des modifications.</p>

<p>Les premières semaines de publication devraient être sans couture car je vais prendre un peu d&#8217;avance : je ne commence à publier que quand j&#8217;ai déjà un certain nombre d&#8217;articles sous la main. J&#8217;espère que vous vous régalerez et que ce sera vraiment utile pour vous.</p>

<p><a href="http://cyrilgodefroy.com/blog/index.php/2009/03/chapitre-0-avant-de-commencer/">La Suite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cyrilgodefroy.com/blog/index.php/2009/03/developper-pour-liphone-preface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
