Il vous arrivera peut-être dans votre vie de vouloir vous payer le luxe de regarder un peu, pour des raisons strictement pédagogiques, le contenu des fichiers d'interface d'applications commerciales. Ces
packages NIB (car ce sont des packages, qui contiennent des fichiers NIB, mais on ouvre les packages) sont une petite mine d'informations qui peuvent vous éclairer sur la manière de faire telle ou telle chose dans une application, la chose en question étant présente dans une application que vous reluquez comme un sale gros bébé voyeur. Lorsque vous tentez d'extraire un NIB d'une application publiée (prenons
Finder.app pour l'exemple, et plus précisément son NIB
/System/Library/CoreServices/Finder.app/Contents/Resources/English.lproj/PreferencesWindow.nib), et que vous l'ouvrez avec Interface Builder, soudainement votre cœur s'arrête puisque le message suivant se présente à vos yeux emplis de larmes :
Ce message peut se traduire en ces termes : tutéféniké. C'est bien votre journée, tiens ! C'était bien le MOMENT de se faire AVOIR comme ça ! Prêt à exploser dans une rage violente et meurtrière, vous prenez le premier insecte venu et vous lui infligez votre regard Scarface, en espérant qu'il ne meure pas de peur tout de suite pour que vous puissiez lâcher complètement votre organe vocal contre le malheureux qui n'a rien fait. Stop, laissez ce lépidoptère à Timon et Pumbaa et lisez plutôt la suite.
Il existe un moyen de récupérer certaines informations sur un NIB déjà compilé comme celui que nous essayons d'ouvrir. Cependant, il n'est pas possible d'utiliser ces NIB tels quels, ils ne serviront qu'à regarder la jolie interface et la hiérarchie des vues, par exemple. Dans une certaine limite, on peut aussi voir des outlets et des actions branchées à des objets inexistants. Mais c'est une bonne base pour regarder un peu comment font les grands.
Il vous faut d'abord un package NIB datant d'Interface Builder 2 pour jouer le rôle d'hôte. Pas de nouveau truc avec des néons flashy, non, on a réellement besoin d'un NIB old-school, prêt à être sacrifié pour la bonne cause. J'en ai trouvé un dans Adium, par exemple ABSearch.nib. Si vous souhaitez chercher par vous-même, alors ouvrez le contenu d'une application, et dans le répertoire Resources/ ou Resources/English.lproj/ seront souvent cachés les NIB qui nous intéressent. Pour savoir si ce fichier convient à nos attentes, ouvrez-le dans Interface Builder, et assurez-vous que vous pouvez bien lire le fichier, qu'il n'est pas compilé et qu'Interface Builder n'est pas encore en train de se foutre de vous. Deuxième vérification, il faut afficher le contenu du package, et constater la présence de trois fichiers : classes.nib, info.nib et keyedobjects.nib. C'est bon, vous les avez ?
Maintenant, nous allons devoir cloner notre NIB hôte, afin de ne pas bousiller l'application originale. Copiez le package dans un endroit que vous choisirez avec soin, et donnez-lui un nom bien significatif, comme jambon. Une fois ceci fait, infiltrez-vous dans le contenu de ce package, et l'opération va commencer.
Nous allons devoir insérer l'esprit du NIB compilé que vous cherchiez à ouvrir dans le NIB hôte, qui n'est qu'une carapace, une coquille vide prête à recevoir une cervelle pour nous. Vous vous sentirez l'âme d'un savant fou procédant à des expériences immorales. Apportez un attention toute particulière au rire de savant fou que vous allez utiliser suite à la réussite de cette opération (allez-y de bon cœur, on est entre amis). Affichez le contenu du package NIB compilé qui vous a fait du tort, puis copiez le fichier keyedobjects.nib de ce package jusqu'au package que nous avons cloné (en remplaçant celui qui existe déjà).
Notre package jambon peut maintenant être ouvert avec Interface Builder et vous révéler tous ses mystères !