19 mai, 2009
Article abordant:
Developpement, iPhone, Objective-C
Pour ceux qui ne la connaissent pas, MD5 est une méthode permettant d’obtenir une empreinte numérique unique d’un message (au sens large du terme: chaine de caractère ou fichier). Cet algorithme a longtemps été utilisé à des fins de sécurité. Au risque de me répéter: n’utilisez pas MD5 à des fins de sécurité ! Cet algorithme est maintenant faible. Plus d’informations sur Wikipedia EN.
MD5 peut être utilisé pour générer une clef « unique » à partir d’une chaine de caractères. Exemple concret: j’ai des objets représentant des rendez-vous qui naviguent un peu partout (SQLite local, serveur de calendrier distant, …). Il me faut à tout moment pouvoir identifier uniquement un rendez-vous. La solution que j’ai choisi est de générer une somme MD5 à partir du titre du rendez-vous, de la date de création et l’UDID (voir Comment récupérer l’UDID). Voici l’implémentation que j’utilise pour générer mes MD5 (dans le cas présent, c’est une addition de NSString):
La suite du billet, c’est par là »
15 mai, 2009
Astuce abordant:
Developpement, iPhone
Voilà un problème simple qui s’est posé lors d’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’est pas si anodine que cela.
La suite du billet, c’est par là »
11 mai, 2009
Astuce abordant:
Astuce, Developpement, iPhone, Xcode
L’UDID (Universal Device Identifier) d’un iPhone est, comme son nom l’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’est ce dernier que l’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.
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’équipement sur lequel notre application s’exécute. Pour récupérer l’UDID, rien de plus simple:
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
6 mai, 2009
Astuce abordant:
Astuce, Developpement, Xcode
Dans la même veine que le Print Object en console, voici une nouvelle astuce en console de debug. L’idée n’est plus de récupérer la description d’un objet, mais son type. Ainsi, il y a deux commandes: whatis et ptype. La première permets d’avoir simplement le type d’un objet. Ainsi, si on a un objet monDico de type NSMutableDictionary, voilà ce que l’on obtient avec whatis:
(gdb) whatis monDico
type = NSMutableDictionary *
ptype, quant à lui est beaucoup plus complet. Si on reprends le même exemple, voilà ce que l’on obtient:
(gdb) ptype monDico
type = class NSMutableDictionary : public NSDictionary {
} *
Là où ptype prends tout son intérêt, c’est sur les types personnalisés. Voici deux exemple concret avec des objet perso:
(gdb) ptype currentRdv
type = class MiniRdv : public NSObject {
protected:
NSString *startDateFormated;
NSString *startTimeFormated;
NSString *title;
NSString *personName;
NSString *personFirstName;
NSString *personPhoneBookId;
NSInteger dbId;
} *
(gdb) ptype cell
type = class RdvTableCell : public UITableViewCell {
protected:
MiniRdv *miniRdvObject;
UILabel *topLeftLabel;
UILabel *bottomLeftLabel;
UILabel *bottomRightLabel;
UILabel *topRightLabel;
UIImageView *avatar;
} *
Bref, ptype est un outil indispensable au debug d’applications !
1 mai, 2009
Astuce abordant:
Astuce, Developpement, iPhone, Xcode
Il peut être très utile de récupérer le nom de l’iPhone sur lequel notre application s’exécute (comme iPhone-de-julien). C’est le cas notamment dans des applications où on appaire deux iPhone au travers d’un réseau WiFi (par exemple). L’idée est très simple: on récupère les informations de l’hôte courant, puis on prend le premier de ses noms. Ce qui donne au final:
NSString *deviceName = [[[NSHost currentHost] names] objectAtIndex:0];
27 avr, 2009
Astuce abordant:
Astuce, Developpement, Xcode
Il peut être utile parfois de n’exécuter certains codes que dans le simulateur (ou à l’inverse: seulement sur un véritable iPhone). Concrètement, c’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’inclure le code a exécuter sur simulateur entre des directives de compilateur:
#if TARGET_IPHONE_SIMULATOR
NSLog(@"Bonjour, je suis sir le simulateur");
#else
NSLog(@"Bonjour, je suis sur un véritable iPhone !");
#endif