Ouvrir un .nib compilé avec Interface Builder

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 :
Capture_dcran_2010-04-05_11
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 !

Capture_dcran_2010-04-05_12

6 commentaire(s)

Jul 20, 2010
Gromi said...
Merci pour ce post, qui ma fois, ma fait sourire tout en m'apportant l'info qu'il me fallait!
Juste pas évident de trouver un .nib old-school! heureusement j'ai encore des applis vieillottes...
Par hasard, n'existe-t-il pas des templates ou thèmes pré-fait par des gentils donateurs à la manière des CMS joomla ou wordpress?
Jul 20, 2010
Ravi d'avoir pu te servir ! Pour ce qui est des templates, je ne vois pas trop ce que tu veux dire : tu veux des templates pour quoi ?
Jul 20, 2010
Gromi said...
Eh bien des .NIB déjà fait, mais côté source, par exemple, je souhaitais refaire une interface de gestion de tâche et calendrier style Contactizer :
http://objective-decision.com/rsrc/tour/DefaultDesktop_task.jpg
et je me dis qu'il existe peut-être des site regroupant déjà des modules .nib pré-fait, ou il suffit de copier/coller ou qui peuvent inspirer afin d'avoir un contenu homogène et user-friendly.
(ex pour Joomla : http://joomla007.com/ )
Jul 20, 2010
À ma connaissance, ça n'existe pas, mais ça existe peut-être pour les ébauches d'interfaces (prototypes "lo-fi mais sur ordi", avec Omnigraffle ou des applications spécifiques, c'est la mode). De toute façon ce n'est pas très long de placer des composants, le plus lourd étant de relier les éléments graphiques aux outlets ou sources de données. Bonne chance pour ton app !

Le 20 juil. 2010 à 22:45, Comment to Posterous a écrit :

Jul 21, 2010
Gromi said...
Juste pour info, j'ai trouvé une bonne part de réponse que je me posais sur le site d'Apple, il y'a déjà pas mal d'exemples en fait pour faire mumuse avec cette technologie... toujours commencer par la source!
http://developer.apple.com/mac/library/navigation/
A+
Jul 21, 2010
C'est vrai que la documentation d'Apple est vachement complète et les exemples ne manquent pas... D'ailleurs c'est bizarre comme certains développeurs d'applications commerciales s'en inspirent !

Vous pouvez réagir à cette page ou à une réaction à cette page ici.

oin? oin.

29186 oins since near 2010.

dubtrip

Fathaya Sound Syndicate

c.oin.name (en construction)

Chez Olivier El Mekki

Mon profil sur Posterous

oin, a join creation icons by fixicon — background by crazy-alice — powered by posterous

Ce site personnel est un fourre-tout qui peut servir de journal personnel, de répertoire de musique, de portfolio, de carnet de notes, de recueil de pensées diverses sur des sujets variés. Les auteurs dévoilent une partie de leur personne et de leurs recherches, afin qu’en retour ils puissent y trouver l’avis d’autres personnes. Les informations que vous trouverez ici sont données sans aucune garantie. Par ailleurs, ouvrir ce site annule la garantie. La musique qui se trouve sur ce site (et non pas celle qui est liée) est sous licence Creative Commons Music Sharing. L’administrateur du site se réserve le droit de vilipender quiconque sur ses terres et de retirer toute participation extérieure qui lui ferait perdre patience.