<?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>Webd &#187; Astuce</title>
	<atom:link href="http://webd.fr/category/pro/astuce-pro/feed" rel="self" type="application/rss+xml" />
	<link>http://webd.fr</link>
	<description>Le blog de Julien Quéré</description>
	<lastBuildDate>Wed, 08 Sep 2010 16:39:53 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Astuces développement iPhone 8: Modifier le __MyCompanyName__</title>
		<link>http://webd.fr/707-developpement-iphone-modifier-le-__mycompanyname__</link>
		<comments>http://webd.fr/707-developpement-iphone-modifier-le-__mycompanyname__#comments</comments>
		<pubDate>Tue, 02 Jun 2009 08:12:37 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=707</guid>
		<description><![CDATA[Je vois assez souvent, dans les fichiers de code qui passent entre mes mains, des en-têtes comme ceci: // Created by Julien on 17/01/09. // Copyright 2009 __MyCompanyName__. All rights reserved. Le problème porte sur __MyCompanyName__. Il serait bien plus propre de le remplacer par une valeur personnalisée (et automatique de préférence). Pour ceci, Apple [...]]]></description>
			<content:encoded><![CDATA[<p>Je vois assez souvent, dans les fichiers de code qui passent entre mes mains, des en-têtes comme ceci: </p>
<pre lang="objc">
//  Created by Julien on 17/01/09.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
</pre>
<p>Le problème porte sur <code>__MyCompanyName__</code>. Il serait bien plus propre de le remplacer par une valeur personnalisée (et automatique de préférence). Pour ceci, Apple a tout prévu &#8230;<br />
<span id="more-707"></span><br />
Il suffit tout simplement de modifier <code>ORGANIZATIONNAME</code> de <code>PBXCustomTemplateMacroDefinitions</code> dans la configuration de Xcode. En ligne de commande, ça donne (dans mon cas):</p>
<pre lang="text">
defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions {"ORGANIZATIONNAME"="Julien Quéré - http://webd.fr";}'
</pre>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/707-developpement-iphone-modifier-le-__mycompanyname__/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 7: Deux NSDate sont-elles du même jour ?</title>
		<link>http://webd.fr/586-astuces-developpement-iphone-nsdate-comparaison-jour</link>
		<comments>http://webd.fr/586-astuces-developpement-iphone-nsdate-comparaison-jour#comments</comments>
		<pubDate>Fri, 15 May 2009 07:06:42 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=586</guid>
		<description><![CDATA[Voilà un problème simple qui s&#8217;est posé lors d&#8217;un de mes développement: comme vérifier si deux dates sont bien le même jour ? Ceci, en gardant les notions de fuseau horaires et compagnie. Bien que le problème soit simple, la solution n&#8217;est pas si anodine que cela. Il s&#8217;agit, dans un premier temps, de préciser [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà un problème simple qui s&#8217;est posé lors d&#8217;un de mes développement: comme vérifier si deux dates sont bien le même jour ? Ceci, en gardant les notions de fuseau horaires et compagnie. Bien que le problème soit simple, la solution n&#8217;est pas si anodine que cela.<br />
<span id="more-586"></span><br />
Il s&#8217;agit, dans un premier temps, de préciser dans quel calendrier on se situe. Ici, on est tout simple dans le calendrier <code>NSGregorianCalendar</code>. Ensuite, on extrait le composant de la date qui nous intéresse (ici: le jour). Puis, il ne reste plus qu&#8217;a comparer les deux composants extraits pour déterminer si les deux <code>NSDate</code> sont bien le même jour. </p>
<p>Voici la méthode qui fait cela (en étendant <code>NSDate</code> au passage) et l&#8217;utilisation: </p>
<p>Ajoute dans la classe NSDate en dérivant</p>
<pre lang="objc">
// Le .h
#import <foundation>

@interface NSDate (NSDateAdditions)
-(BOOL) isTheSameDayAsThisDate:(NSDate*)date;
@end
</pre>
<pre lang="objc">
// Le .m
@implementation NSDate (NSDateAdditions)

-(BOOL) isTheSameDayAsThisDate:(NSDate*)date {
	NSCalendar *gregorian = [[NSCalendar alloc]	initWithCalendarIdentifier:NSGregorianCalendar];
	NSDateComponents *comps1 = [gregorian components:NSDayCalendarUnit fromDate:date];
	NSDateComponents *comps2 = [gregorian components:NSDayCalendarUnit fromDate:self];
	[gregorian release];
	return ([comps1 isEqual:comps2]);
}

@end
</pre>
<pre lang="objc">
// startDate et endDate étant deux NSDate
if([startDate isTheSameDayAsThisDate:endDate])
{
	NSLog(@"startDate et endDate sont le même jour");
}
</pre>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/586-astuces-developpement-iphone-nsdate-comparaison-jour/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 6: Récupérer l&#8217;UDID</title>
		<link>http://webd.fr/526-astuces-developpement-iphone-6-recuperer-ludid</link>
		<comments>http://webd.fr/526-astuces-developpement-iphone-6-recuperer-ludid#comments</comments>
		<pubDate>Mon, 11 May 2009 09:14:54 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=526</guid>
		<description><![CDATA[Il peut être utile, dans une application, de connaître l'UDID de façon logicielle. Ainsi, on identifie de façon unique et certaine l'équipement sur lequel notre application s'exécute. Pour récupérer l'UDID, rien de plus simple ...]]></description>
			<content:encoded><![CDATA[<p>L&#8217;UDID (<i>Universal Device Identifier</i>) d&#8217;un iPhone est, comme son nom l&#8217;indique, un identifiant unique pour chaque iPhone / iPod. Si vous avez déjà eu à générer des fichiers de provisioning, vous connaissez bien cet identifiant. En effet, c&#8217;est ce dernier que l&#8217;on doit transmettre à Apple quand on veut rajouter un iPhone / iPod dans la liste des appareils autorisés pour un développement ou une distribution. </p>
<p>Il peut être utile, dans une application, de connaître ce fameux UDID de façon logicielle. Ainsi, on identifie de façon unique et certaine l&#8217;équipement sur lequel notre application s&#8217;exécute. Pour récupérer l&#8217;UDID, rien de plus simple:</p>
<pre lang="objc">
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
</pre>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/526-astuces-developpement-iphone-6-recuperer-ludid/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 5: whatis et ptype</title>
		<link>http://webd.fr/388-astuces-developpement-iphone-5-whatis-et-ptype</link>
		<comments>http://webd.fr/388-astuces-developpement-iphone-5-whatis-et-ptype#comments</comments>
		<pubDate>Wed, 06 May 2009 09:02:38 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=388</guid>
		<description><![CDATA[Dans la même veine que le Print Object en console, voici une nouvelle astuce en console de debug. L&#8217;idée n&#8217;est plus de récupérer la description d&#8217;un objet, mais son type. Ainsi, il y a deux commandes: whatis et ptype. La première permets d&#8217;avoir simplement le type d&#8217;un objet. Ainsi, si on a un objet monDico [...]]]></description>
			<content:encoded><![CDATA[<p>Dans la même veine que le <a href="http://webd.fr/385-astuces-developpement-iphone-2-print-object-en-console">Print Object en console</a>, voici une nouvelle astuce en console de debug. L&#8217;idée n&#8217;est plus de récupérer la description d&#8217;un objet, mais son type. Ainsi, il y a deux commandes: <code>whatis</code> et <code>ptype</code>. La première permets d&#8217;avoir simplement le type d&#8217;un objet. Ainsi, si on a un objet <code>monDico</code> de type <code>NSMutableDictionary</code>, voilà ce que l&#8217;on obtient avec <code>whatis</code>: </p>
<pre lang="objc">
(gdb) whatis monDico
type = NSMutableDictionary *
</pre>
<p><code>ptype</code>, quant à lui est beaucoup plus complet. Si on reprends le même exemple, voilà ce que l&#8217;on obtient: </p>
<pre lang="objc">
(gdb) ptype monDico
type = class NSMutableDictionary : public NSDictionary {
} *
</pre>
<p>Là où <code>ptype</code> prends tout son intérêt, c&#8217;est sur les types personnalisés. Voici deux exemple concret avec des objet perso: </p>
<pre lang="objc">
(gdb) ptype currentRdv
type = class MiniRdv : public NSObject {
  protected:
    NSString *startDateFormated;
    NSString *startTimeFormated;
    NSString *title;
    NSString *personName;
    NSString *personFirstName;
    NSString *personPhoneBookId;
    NSInteger dbId;
} *
</pre>
<pre lang="objc">
(gdb) ptype cell
type = class RdvTableCell : public UITableViewCell {
  protected:
    MiniRdv *miniRdvObject;
    UILabel *topLeftLabel;
    UILabel *bottomLeftLabel;
    UILabel *bottomRightLabel;
    UILabel *topRightLabel;
    UIImageView *avatar;
} *
</pre>
<p>Bref, <code>ptype</code> est un outil indispensable au debug d&#8217;applications !</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/388-astuces-developpement-iphone-5-whatis-et-ptype/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 4: Récupérer le nom de l&#8217;iPhone</title>
		<link>http://webd.fr/420-astuces-developpement-iphone-4-recuperer-le-nom-de-liphone</link>
		<comments>http://webd.fr/420-astuces-developpement-iphone-4-recuperer-le-nom-de-liphone#comments</comments>
		<pubDate>Fri, 01 May 2009 07:56:02 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=420</guid>
		<description><![CDATA[Il peut être très utile de récupérer le nom de l&#8217;iPhone sur lequel notre application s&#8217;exécute (comme iPhone-de-julien). C&#8217;est le cas notamment dans des applications où on appaire deux iPhone au travers d&#8217;un réseau WiFi (par exemple). L&#8217;idée est très simple: on récupère les informations de l&#8217;hôte courant, puis on prend le premier de ses [...]]]></description>
			<content:encoded><![CDATA[<p>Il peut être très utile de récupérer le nom de l&#8217;iPhone sur lequel notre application s&#8217;exécute (comme <cite>iPhone-de-julien</cite>). C&#8217;est le cas notamment dans des applications où on appaire deux iPhone au travers d&#8217;un réseau WiFi (par exemple). L&#8217;idée est très simple: on récupère les informations de l&#8217;hôte courant, puis on prend le premier de ses noms. Ce qui donne au final:</p>
<pre lang="objc">
NSString *deviceName = [[[NSHost currentHost] names] objectAtIndex:0];
</pre>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/420-astuces-developpement-iphone-4-recuperer-le-nom-de-liphone/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 3: Executer un code seulement sur le simulateur</title>
		<link>http://webd.fr/415-iphone-executer-code-seulement-le-simulateur</link>
		<comments>http://webd.fr/415-iphone-executer-code-seulement-le-simulateur#comments</comments>
		<pubDate>Mon, 27 Apr 2009 09:14:00 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=415</guid>
		<description><![CDATA[Il peut être utile parfois de n&#8217;exécuter certains codes que dans le simulateur (ou à l&#8217;inverse: seulement sur un véritable iPhone). Concrètement, c&#8217;est le cas quand on utilise des fonctionnalités non présentes sur le simulateur (accéléromètre par exemple). Pour ce faire, il suffit d&#8217;inclure le code a exécuter sur simulateur entre des directives de compilateur: [...]]]></description>
			<content:encoded><![CDATA[<p>Il peut être utile parfois de n&#8217;exécuter certains codes que dans le simulateur (ou à l&#8217;inverse: seulement sur un véritable iPhone). Concrètement, c&#8217;est le cas quand on utilise des fonctionnalités non présentes sur le simulateur (accéléromètre par exemple). Pour ce faire, il suffit d&#8217;inclure le code a exécuter sur simulateur entre des directives de compilateur: </p>
<pre lang="objc">
#if TARGET_IPHONE_SIMULATOR
  NSLog(@"Bonjour, je suis sir le simulateur");
#else
  NSLog(@"Bonjour, je suis sur un véritable iPhone !");
#endif
</pre>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/415-iphone-executer-code-seulement-le-simulateur/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 2: Print Object en console</title>
		<link>http://webd.fr/385-astuces-developpement-iphone-2-print-object-en-console</link>
		<comments>http://webd.fr/385-astuces-developpement-iphone-2-print-object-en-console#comments</comments>
		<pubDate>Mon, 20 Apr 2009 08:30:24 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=385</guid>
		<description><![CDATA[Je me suis très souvent posé la question suivante: Mais pourquoi ça ne marche pas ? Qu&#8217;est ce qu&#8217;il y a dans cet objet ?. Le fait est que ce n&#8217;est pas très facile de répondre à cette question avec l&#8217;interface de débogage de Xcode. Par contre dans la console de debug, il y a [...]]]></description>
			<content:encoded><![CDATA[<p>Je me suis très souvent posé la question suivante: <cite>Mais pourquoi ça ne marche pas ? Qu&#8217;est ce qu&#8217;il y a dans cet objet ?</cite>. Le fait est que ce n&#8217;est pas très facile de répondre à cette question avec l&#8217;interface de débogage de Xcode. Par contre dans la console de debug, il y a une commande magnifique … </p>
<p>Il s&#8217;agit tout simplement de <code>po</code> (pour <i>Print Object</i>). Pour l&#8217;utiliser, rien de plus simple: mettez un point d&#8217;arrêt là où vous voulez voir ce que contient un objet. Ensuite, faites un simple <code>po monObjet</code>. Par exemple, créons un <code>NSMutableDictionary</code> … </p>
<pre lang="objc">
NSMutableDictionary * monDico = [[NSMutableDictionary alloc] init];
[monDico setObject:@"objet1" forKey:@"clef1"];
[monDico setObject:@"objet2" forKey:@"clef2"];
[monDico setObject:@"objet3" forKey:@"clef3"];
[monDico setObject:@"objet4" forKey:@"clef4"];
[monDico setObject:@"objet5" forKey:@"clef5"];
</pre>
<p>Et voilà ce que nous renvoie la console après un <code>po monDico</code></p>
<pre lang="objc">
(gdb) po monDico
{
    clef1 = objet1;
    clef2 = objet2;
    clef3 = objet3;
    clef4 = objet4;
    clef5 = objet5;
}
</pre>
<p>En fait, <code>po</code> fait appel à la méthode <code>description</code> de l&#8217;objet. Toutes les classes Cocoa de base implémentent cette méthode. Pour les classes personnelles, il vous suffit d&#8217;implémenter le protocole suivant: <code>- (NSString *)description;</code>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/385-astuces-developpement-iphone-2-print-object-en-console/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Astuces développement iPhone 1: Quelques raccourcis claviers</title>
		<link>http://webd.fr/378-astuces-developpement-iphone-1-quelques-raccourcis-claviers</link>
		<comments>http://webd.fr/378-astuces-developpement-iphone-1-quelques-raccourcis-claviers#comments</comments>
		<pubDate>Mon, 13 Apr 2009 09:06:59 +0000</pubDate>
		<dc:creator>Julien Quéré</dc:creator>
				<category><![CDATA[Astuce]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://webd.fr/?p=378</guid>
		<description><![CDATA[Au cours de mes développements iPhone, il y a plein de petites astuces que je découvre. Des petites choses toute bêtes, mais elles peuvent faire gagner pas mal de temps et de confort quand on les utilise les uns à la suite des autres. Voilà pourquoi je pense lancer une série de billets où je [...]]]></description>
			<content:encoded><![CDATA[<p>Au cours de mes développements iPhone, il y a plein de petites astuces que je découvre. Des petites choses toute bêtes, mais elles peuvent faire gagner pas mal de temps et de confort quand on les utilise les uns à la suite des autres. Voilà pourquoi je pense lancer une série de billets où je présenterais les astuces découvertes au fil du temps. </p>
<p>Commençons donc par quelques raccourcis claviers découverts récemment qui me font gagner pas mal de temps: </p>
<ul>
<li><b>Option et double clic</b>: affiche la documentation pour ce qui se trouve sous le curseur (si la documentation existe bien évidement). </li>
<li><b>Commande et double clic</b>: envoie vers la définition (dans le .h) de ce qui se trouve sous le curseur.</li>
<li><b>Commande-Option-Haut</b>: permets de switcher entre le fichier d&#8217;en-tête (.h) et de code (.m) et vice-versa.</li>
<li><b>Commande-B</b>: lance la compilation du projet.</li>
<li><b>Commande-Retour</b>: compile le projet et le lance.</li>
</ul>
<p>Sinon, pour ceux qui veulent un grand poster, il y a l&#8217;image faite par <a href="http://cocoasamurai.blogspot.com/2008/02/complete-xcode-keyboard-shortcut-list.html">Colin Wheeler de Cocoa Samurai</a>. Elle est très (trop ?) complète:</p>
<p><a href="http://webd.fr/wp-content/uploads/2009/04/xcode-shortcuts.png" rel="lightbox[378]" title="xcode-shortcuts"><img src="http://webd.fr/wp-content/uploads/2009/04/xcode-shortcuts-290x300.png" alt="xcode-shortcuts" title="xcode-shortcuts" width="290" height="300" class="aligncenter size-medium wp-image-381" /></a></p>
<p>A bientôt (certainement) pour de nouvelles astuces … </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://webd.fr/378-astuces-developpement-iphone-1-quelques-raccourcis-claviers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
