# Interface Builder

Interface Builder est un outil de développement d'interface graphique pour des applications tournant sur Mac OS X. Cet outil fait partie de l'environnement de développement intégré Xcode (anciennement connu sous le nom de Projet Builder). Interface Builder permet aux développeur d'applications Cocoa et Carbon de créer des interfaces graphiques pour leurs programmes. Les interfaces graphiques générées grâce à Interface Builder sont contenues dans un fichier .nib (une abréviation pour désigner NeXT Interface Builder) ou plus récemment dans un fichier .xib.
Interface Builder est le descendant de l'outil de développement du même nom créé pour NeXTSTEP. Une version d'Interface Builder est aussi utilisée dans le développement d'applications OpenStep et un outil très similaire nommé Gorm existe aussi pour GNUstep. Le 27 mars 2008, une version d'Interface Builder spécialement conçue pour l'iPhone est apparue avec la sortie du iPhone SDK Beta 2.

## Histoire

Interface Builder a fait sa première apparition en 1988 au sein de NeXTSTEP 0.8. Il a été inventé et développé par Jean-Marie Hullot et était à l'origine écrit en Lisp (pour le produit ExpertLisp de Expertelligence). Ce fut l'une des premières applications commerciales permettant de placer des éléments d'interfaces comme des boutons, des menus et des fenêtres sur une interface à l'aide d'une souris. L'une des premières utilisations célèbres d'Interface Builder fut le développement du premier navigateur web (le WorldWideWeb) par Tim Berners-Lee au CERN sur une station de travail NeXT.

## Design

Interface Builder fournit des palettes, ou collections, de widgets aux développeurs Objective-C. Ces composants d'interface graphique comprennent des objets comme des champs de texte, des tableaux, des ascenseurs, et des menus. Les palettes d'Interface Builder sont complètement extensibles, permettant ainsi à n'importe quel développeur de créer de nouveaux objets et d'ajouter des palettes à Interface Builder.
Pour créer une interface, un développeur doit simplement faire glisser un objet de l'interface depuis la palette vers une fenêtre ou un menu. Des messages (Actions) que les objets peuvent émettre sont connectés à leurs cibles (Targets) dans le code de l'application et des pointeurs (Outlets) déclarés dans le code de l'application sont connectés à des objets spécifiques de l'interface. De cette manière, toute l'initialisation est réalisée avant l'exécution, améliorant ainsi les performances et simplifiant le processus de développement.
Interface Builder sauvegarde l'interface d'une application dans un fichier qui contient les objets de l'interface et les relations avec ses objets utilisées dans l'application. Ces objets sont archivés (on parle aussi de sérialisation) dans un fichier XML ou dans un fichier de propriétés avec une extension .nib. Au lancement d'une application, les objets contenus dans le fichier .nib sont désarchivés, connectés au code binaire de l'application et exécutés. Contrairement à la majorité des outils de création d'interface graphique (à l'exception de Embarcadero Delphi et C++ Builder) qui génère du code pour construire l'interface graphique, les fichiers nib sont souvent considérés comme lyophilisé car ils contiennent les objets archivés prêt à être exécutés. À partir de la version 3 d'Interface Builder, un nouveau format de fichier (avec l'extension .xib) a été ajouté. Ses fonctionnalités sont identiques à un fichier .nib mais il est stocké dans un fichier texte le rendant plus simple pour le stockage dans des systèmes de gestion de version et pour la manipulation par des outils comme diff.