Postes de développeurs iPhone freelance

17062010 Dans: Cocoa

Si vous êtes développeurs Objective-C / Cocoa, l'agence Web Un Oeil sur Tout recherche un ou plusieurs freelance pour travailler sur une application iPhone. Pour plus d'informations et de détails concernant l'application, contactez Nicolas CORNET.

PS: Si vous êtes à la recherche de développeurs iPhone, merci de m'envoyer un email ou de laisser un commentaire pour que je sache s'il y aurait du monde intéressé par une section "Emplois" sur Cocoa.fr.

WWDC @ Paris

02062010 Dans: Conférences

Vous voulez vivre la WWDC 2010, mais vous ne pouvez pas vous déplacer aux États-Unis, alors assistez à cet événement avec d'autres développeurs français avec le WWDC Paris. Il s'agit d'une retransmission de la WWDC dans le bar parisien Le 93Montmartre.

Découvrez cet événement et inscrivez vous sur WWDC-Paris.com et suivez les dernières informations sur Twitter (@wwdcparis).

Les vidéos de la conférence C4[2]

19052010 Dans: Conférences, Vidéos

Si vous avez un peu de temps devant vous, je vous invite à visionner les divers enregistrements de la conférence C4[2].

Il est d'ailleurs à noter que Jonathan 'Wolf' Rentzsch à décider d'arrêter l'organisation des conférences C4, après un ras-le-bol consécutif à la close 3.1.1 de la licence d'utilisation de l'iPhone OS (celle qui oblige à utiliser uniquement Objective-C).

Livre: Les design patterns de Cocoa

12032010 Dans: Cocoa

Les éditions Pearson Education publieront prochainement Les design patterns en Cocoa.

Ce livre, traduit en Français par Hervé Soulard, déjà à l'origine de l'excellente traduction de Programmation Cocoa sous Mac OS X, expose la manière dont les design patterns sont mis en œuvre dans Cocoa.

Ce livre intéressera les programmeurs sérieusement investis dans la technologie d'Apple, puisqu'y sont expliqués les choix techniques opérés par ses ingénieurs, et exposées certaines techniques avancées dans l'utilisation des classes de Cocoa et du Runtime Objective-C.

L'AppStore en quelques chiffres

15012010 Dans: iPhone / iPod Touch

GigaOM nous propose sous la forme d'une infographie très bien faite une vision synthétique des principaux chiffres concernant l'AppStore dans son article The Apple App Store Economy.

The Apple App Store Economy

L'éditeur O'Reilly vient de rendre disponible la version beta du livre iPhone 3D Programming qui aborde comme son nom l'indique l'utilisation de la 3D sur iPhone. Le livre est écrit par Philip Rideout devrait sortir en mai 2010 au prix de 35$ environ.

Sur les 10 chapitres que le livre contiendra 6 sont déjà disponibles. Vous trouverez en tous les exemples sous forme de projets XCode sur le site examples.oreilly.com.

Bilan de 2009

03012010 Dans: Cocoa.fr

Maintenant que 2009 est passé, il est de temps de revenir sur cette année pour en tirer quelques leçons et définir quelques buts pour l'année à venir. Tout d'abord, vous avez été encore plus nombreux qu'en 2008 à venir sur Cocoa.fr et c'est ce qui est le plus motivant pour améliorer toujours et encore le site. En terme de chiffres, vous avez été 83 475 visiteurs (contre 28 942 en 2008) à venir lire nos articles et plus particulièrement les articles suivants :

En ce qui concerne les principales actualités de l'année, je pense que la sortie de l'iPhone OS 3 ainsi que de Snow Leopard ont été les principaux événements qui ont ponctués ces douze derniers mois.

Le futur

Pour l'année à venir, je vais en ce qui me concerne essayer de publier plus souvent que les 6 derniers mois qui ont été pour moi très chargés (déménagement, etc.) et qui ne m'ont pas permis de publier aussi souvent que je le voudrais.

L'année à venir risque de plus d'être particulièrement intéressante si l'on en croit les rumeurs récurrentes de la communauté Mac avec la sortie d'un possible d'un iPhone OS 4 et surtout d'une tablette qui apportera certainement beaucoup de nouveaux usages et de nouvelles possibilités.

J'espère aussi cette année faire évoluer le site vers quelque chose de plus communautaire avec un système de Question/Réponse (dans l'esprit de StackOverflow) ou un forum. N'hésitez donc pas à proposer vos idées et vos envies pour l'avenir de Cocoa.fr.

Je vous souhaite donc pleins de bonnes choses, de nouveaux projets et d'applications populaires.

Vous cherchez une idée de cadeau pour vous même ou un autre développeur Mac / iPhone, voici les meilleurs idées :

Livres

S'il s'agit de développement Mac, je vous conseille de vous orientez vers Programmation Cocoa sous Mac OS X ou sa version originale Cocoa Programming for Mac OS X.

En ce qui concerne l'iPhone, orientez vous plutôt vers iPhone SDK Development: Building iPhone Applications qui est en anglais, mais qui reste très intéressant et accessible.

Logiciels

Je vous invite, si ce n'est pas encore fait, à découvrir les deux logiciels suivants :

  • Mac OS X 10.6 qui vous permettra de découvrir les dernières API disponible dans OSX (OpenCL, etc.)
  • Textmate qui reste un des meilleurs éditeurs sur Mac OS X selon moi. Même si XCode reste le plus pratique pour le développement d'applications en Objective-C/Cocoa, Textmate est fabuleux pour tous les autres langages (Python, HTML, Ruby, etc.). Je vous conseille aussi le livre sur Textmate qui permet de maitriser toute la puissante de ce logiciel.

Et pour finir, si vous avez d'autres idées cadeaux pour un développeur Mac / iPhone, n'hésitez à nous en faire part dans le commentaire.

Je vous propose aujourd'hui une vidéo copinage, car il s'agit de l'interview du studio Creative Patterns sur la conception d'un jeu iPhone et qui se trouve, comme moi, en Alsace et dont j'apprécie beaucoup le travail ainsi que les diverses présentations qu'ils proposent dans divers salons, conférences et autre BarCamp :

Et je vous invite aussi à tester leur première production iPhone, le puzzle-game Turn :

La gestion de la mémoire (2)

27112009 Dans: Cocoa, Objective-C

Dans le premier épisode, nous avons vu qu'un objet qui avait alloué la mémoire pour un autre objet était également responsable de la libérer lorsque l'objet ne lui était plus nécessaire. Ce système est similaire à l'allocation dynamique de la mémoire telle qu'on la connaît en langage C sous la formes des fonctions malloc() et free().

Cependant, ce système comporte un inconvénient majeur dès qu'un objet est passé d'un objet à un autre. Étudions la séquence suivante:

  • Un objet A alloue un objet B.
  • L'objet A passe l'objet B à un objet C. L'objet C garde un pointeur sur l'objet B dont il a encore besoin par la suite.
  • L'objet A n'a plus besoin de l'objet B. Il lui envoie donc un message -[release].
  • L'objet C tente d'appeler une méthode de l'objet B, ce qui mène à un plantage.

Il a donc fallu incorporer un système qui permette de conserver un objet en mémoire tant qu'il est nécessaire, et le libérer lorsqu'il ne l'est plus. Ce système est l'autorelease.

Autorelease pool

Examinons l'exemple suivant:

NSArray* monArray = [[NSArray alloc] init];
[monArray autorelease];

La première ligne alloue, comme nous l'avons vu la dernière fois, un objet de type NSArray et l'initialise. La deuxième ligne ajoute monArray à l'autorelease pool courant.

Un objet de type NSAutoreleasePool conserve une liste d'objets. Ces objets seront désalloués à la fin de la boucle d'événements.

La boucle d'événements

Le moteur d'exécution (runtime) est un programme qui offre une structure à l'exécution des programmes écrits en Objective-C. Il comporte une boucle d'événements:

  • Au début de la boucle, les événements (frappe clavier, mouvements de la souris, timers écoulés, messages des autres applications, etc.) sont récupérés.
  • L'application (votre code !) traite les événements.
  • Les autorelease pools sont vidés
  • Puis on revient au début de la boucle.

Ce principe permet de garantir l'existence de l'objet pendant l'exécution d'un itération de votre code.

Dans les applications Cocoa utilisant une interface graphique, un NSAutoreleasePool est instancié automatiquement pour le thread principal. En général, vous n'avez donc pas besoin d'en créer un. Vous serez toutefois amené à le faire si vous concevez une application multi-thread, ou si vous instanciez un grand nombre d'objets dont la durée de vie est limitée.

Retain/Release

La gestion de la mémoire en Objective-C est souvent expliquée par l'analogie suivante: un petit chien se met à courir dès qu'il n'a plus aucune laisse autour du cou. Tant qu'il a au moins une laisse au cou, il ne peut s'échapper. Évidemment, s'il a plusieurs laisses qui le retiennent, il ne peut pas non plus s'enfuir.

Envoyer un message -[retain] à un objet lui passe une laisse autour du cou.

Lui envoyer un message -[release] lui retire une laisse.

Concrètement, chaque objet héritant de NSObject possède une variable d'instance retainCount. Il s'agit du nombre de "laisses":

  • +[alloc] initialise retainCount à 1.
  • -[autorelease] décrémente retainCount et place l'objet dans l'autorelease pool courant.
  • -[release] décrémente retainCount
  • -[retain] incrémente retainCount

Lorsque survient la fin de la boucle d'événements, l'autorelease pool libère tous les objets dont le retainCount est nul.

Constructeurs de commodité

Il arrive fréquemment de créer un objet, de le passer à un autre objet, puis de ne plus en avoir besoin. Les deux exemples suivants sont équivalents. Nous voulons passer une liste d'invités à un objet fiesta:

Exemple 1:

NSArray* invites = [[NSArray alloc] initWithObjects:@"Pascal", @"Florence", @"Martin", @"Patrick"];
[invites autorelease];
[fiesta setInvites:invites];

Exemple 2:

NSArray* invites = [NSArray arrayWithObjects:@"Pascal", @"Florence", @"Martin", @"Patrick"];
[fiesta setInvites:invites];

La méthode +[arrayWithObjects:] est un constructeur de commodité, qui permet de faire l'allocation, l'initialisation et l'autorelease en une seule opération. Ce type de méthodes est très courant dans Cocoa. En fait par convention, si le premier mot du nom d'une méthode est celui de la classe, vous est certain que l'objet renvoyé est autoreleasé.

Ajout à une collection

Pour finir, sachez que les collections retiennent les objets qu'elle contiennent. C'est à dire que les objets de types: NSArray, NSSet, NSDictionary et compagnie, envoient un message -[retain] aux objets qui leurs sont ajoutés. Quand la collection est libérée, elle envoie un message -[release] à tous les objets qu'elle contient.

Exemple:

@interface Livre : NSObject
{
    NSMutableArray* pages;  
}

@end

@implementation Livre
- (id) init
{
    if(self = [super init])
    {
        // Créer la liste des pages
        pages = [[NSMutableArray* alloc] init];

        // Ajouter une première page vierge
        Page* pageVierge = [[Page alloc] init];     // retainCount = 1
        [pages addObject:pageVierge];               // retainCount = 2
        [pageVierge release];                       // retainCount = 1
    }
    return self;    
}

- (void) dealloc
{
    [pages release];

    [super dealloc];    
}

L'objet pageVierge reçoit un message -[retain] quand elle est ajoutée au NSMutableArray pages. Nous devons donc lui envoyer un message -[release] pour qu'elle soit effectivement désallouée lorsque le livre sera désalloué.

Bientôt la suite

Nous n'en n'avons pas encore fini. Je vous encourage à poser des questions si un aspect n'est pas clair et que vous souhaitez le voir développé.

Renaud Pradenc
Céroce