<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Interface_Builder</id>
	<title>Interface Builder - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Interface_Builder"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface_Builder&amp;action=history"/>
	<updated>2026-05-26T03:11:48Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface_Builder&amp;diff=200057&amp;oldid=prev</id>
		<title>imported&gt;Trustable: Kleinigkeiten verbessert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Interface_Builder&amp;diff=200057&amp;oldid=prev"/>
		<updated>2026-03-21T13:32:02Z</updated>

		<summary type="html">&lt;p&gt;Kleinigkeiten verbessert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen}}&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|Name=&lt;br /&gt;
|Logo=&lt;br /&gt;
|Screenshot = &lt;br /&gt;
|Hersteller= [[Apple]]&lt;br /&gt;
|AktuelleVersion= 4.0 (in Xcode integriert)&lt;br /&gt;
|AktuelleVersionFreigabeDatum= 22. März 2012&lt;br /&gt;
|Betriebssystem= [[macOS]]&lt;br /&gt;
|Kategorie= [[GUI-Builder]], Softwareentwicklung&lt;br /&gt;
|Lizenz= [[proprietär]]&lt;br /&gt;
|Deutsch= nein&lt;br /&gt;
|Website= [http://developer.apple.com/technologies/tools/ developer.apple.com]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der &amp;#039;&amp;#039;&amp;#039;Interface Builder&amp;#039;&amp;#039;&amp;#039; ist eine [[Software]] von [[Apple]], mit der [[grafische Benutzeroberfläche]]n für Programme für [[macOS]] und [[iOS (Betriebssystem)|iOS]] erstellt werden.&lt;br /&gt;
&lt;br /&gt;
Bereits in den Developer Tools für [[NeXTStep]] war der Interface Builder enthalten. Auch bei [[Project Builder]] (2001–2003) und [[Xcode]] (2003 bis heute) war bzw. ist der Interface Builder ein wichtiger Bestandteil der Entwickler-Tools.&lt;br /&gt;
Bis einschließlich Xcode 3.x war der Interface Builder eine eigenständige Anwendung, mit Xcode 4.0 wurde er jedoch in die IDE integriert.&lt;br /&gt;
&lt;br /&gt;
Die Dateien, die der Interface Builder erzeugt, haben die Dateiendung &amp;#039;&amp;#039;&amp;#039;.nib&amp;#039;&amp;#039;&amp;#039; (von &amp;#039;&amp;#039;NeXT Interface Builder&amp;#039;&amp;#039;; die Dateien werden von Entwicklern oft „nib-Dateien“ genannt) oder &amp;#039;&amp;#039;&amp;#039;.xib&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Das [[GNUstep]]-Projekt hat einen Klon von Interface Builder namens &amp;#039;&amp;#039;Gorm&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://www.gnustep.org/experience/Gorm.html GNUstep Developer Tools - Gorm]. Abgerufen am 1. Mai 2012&amp;lt;/ref&amp;gt; geschrieben.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
&lt;br /&gt;
=== NeXTStep ===&lt;br /&gt;
Die erste Version von Interface Builder erschien 1986 und war in [[Lisp]] geschrieben. Der Entwickler des Tools wurde noch im gleichen Jahr von [[NeXT]] übernommen, und bereits 1988 war Interface Builder Teil von NeXTStep 0.8.&lt;br /&gt;
Es war die erste kommerzielle Anwendung, mit der man eine Benutzeroberfläche mithilfe einer [[Computermaus|Maus]] zusammenstellen konnte.&lt;br /&gt;
&lt;br /&gt;
=== Project Builder (2001–2003) ===&lt;br /&gt;
[[NeXTStep]] diente als Basis für Mac OS X, und als [[Mac OS X 10.0]] erschien, veröffentlichte Apple auch eine neue Version der Developer Tools. Teil davon war, neben einer komplett neu geschriebenen Version von [[Project Builder]], auch Interface Builder zum Erstellen von Oberflächen für [[Carbon (Apple)|Carbon]]- und [[Cocoa (API)|Cocoa]]-Anwendungen (in [[C++]] bzw. [[Objective-C]].)&lt;br /&gt;
&lt;br /&gt;
[[ResEdit]], das unter [[Mac OS 9]] und davor zum Erstellen von Oberflächen verwendet wurde, konnte unter Mac OS X nicht mehr eingesetzt werden, da das neue System &amp;#039;&amp;#039;Bundles&amp;#039;&amp;#039; (Code und Ressourcen in verschiedenen Dateien, aber zusammen in einem Ordner mit einer bestimmten Struktur) statt &amp;#039;&amp;#039;Code Forks&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Resource Forks&amp;#039;&amp;#039; verwendete.&lt;br /&gt;
&lt;br /&gt;
=== Xcode (ab 2003) ===&lt;br /&gt;
Ab [[Mac OS X Panther]] wurde Project Builder nicht mehr unterstützt, stattdessen setzte Apple auf die Xcode Tools mit [[Xcode]] als IDE. Interface Builder wurde beibehalten.&lt;br /&gt;
Da das Datenformat nicht geändert wurde, sind Programme und NIB-Dateien, die mit Panther erstellt wurden, auch auf älteren Systemen ausführbar.&lt;br /&gt;
&lt;br /&gt;
Mit Panther wurden die Cocoa Bindings eingeführt, die UI-Elemente und Code miteinander verbinden.&lt;br /&gt;
&lt;br /&gt;
Interface Builder wurde mit jedem Betriebssystem-Release verbessert und erweitert, sodass es die neuen UI-Elemente einer neuen Systemversion unterstützte (z.&amp;amp;nbsp;B. die HUD-Panels in [[Mac OS X Leopard|10.5]].)&lt;br /&gt;
&lt;br /&gt;
Mit Erscheinen des iPhone SDK 2.0 und Xcode 3.1 wurde auch der Interface Builder aktualisiert, um Oberflächen von iPhone-Apps designen zu können.&lt;br /&gt;
&lt;br /&gt;
Mit Xcode 4.0 wurde Interface Builder direkt in Xcode integriert. Das bot einige Vorteile: Entwickler mussten nicht mehr zwei Anwendungen geöffnet haben, sie mussten nicht mehr den Code speichern um ihn mit dem UI zu verbinden, und sie konnten per Drag und Drop die UI-Elemente direkt mit dem [[Quellcode]] verbinden.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
&lt;br /&gt;
=== Erstellen der Oberfläche ===&lt;br /&gt;
Objekte für eine Oberfläche sind in sogenannten Paletten gruppiert. Im AppKit-Framework existiert eine Palette für die vom System vorgegebenen UI-Elemente wie Fenster, Knöpfe, Listen, Bilder oder Textfelder.&lt;br /&gt;
&lt;br /&gt;
In der Regel dient als Grundelement ein Fenster (&amp;#039;&amp;#039;NSWindow&amp;#039;&amp;#039;) oder eine Fläche (&amp;#039;&amp;#039;NSView&amp;#039;&amp;#039;). Jede .nib-Datei ist mit einer Klasse verbunden, die auch die Outlets und Aktionen deklariert (siehe nächster Abschnitt); diese Klasse ist oft eine Unterklasse von &amp;#039;&amp;#039;NSWindow&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;NSView&amp;#039;&amp;#039;, seltener auch &amp;#039;&amp;#039;NSObject&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Auf diesen Flächen können dann weitere Elemente platziert werden, ihre Eigenschaften können verändert werden, und sie können mit dem Code verbunden werden.&lt;br /&gt;
&lt;br /&gt;
=== Verbinden von UI und Code ===&lt;br /&gt;
UI-Elemente werden über Outlets mit dem Code verbunden. Die Deklaration erfolgt in der jeweiligen [[Header-Datei]] etwa wie folgt:&lt;br /&gt;
 @property (nonatomic, retain) &amp;#039;&amp;#039;&amp;#039;IBOutlet&amp;#039;&amp;#039;&amp;#039; NSButton *readInputButton;&lt;br /&gt;
&lt;br /&gt;
Viele Objekte können bei bestimmten Aktionen („Actions“ genannt) (z.&amp;amp;nbsp;B. &amp;#039;&amp;#039;gedrückt&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;verändert&amp;#039;&amp;#039;) eine Nachricht an ein Ziel („Target“) senden. Die Deklaration im Header sieht z.&amp;amp;nbsp;B. so aus:&lt;br /&gt;
 - (&amp;#039;&amp;#039;&amp;#039;IBAction&amp;#039;&amp;#039;&amp;#039;) adjustVolume: (id)sender;&lt;br /&gt;
&lt;br /&gt;
Im eigentlichen Quellcode befindet sich eine Methode mit gleicher Deklaration, die dann bei Bedarf ausgeführt wird. Der generische Datentyp id ermöglicht es hierbei, dass die Methode von verschiedenen Objekten aufgerufen werden kann, z.&amp;amp;nbsp;B. von einem Knopf und einem Schieberegler.&lt;br /&gt;
&lt;br /&gt;
Objekte, Outlets, Actions und Targets werden per Drag und Drop miteinander verbunden.&lt;br /&gt;
&lt;br /&gt;
=== Speichern und Ausführen ===&lt;br /&gt;
Die fertige Datei mit ihren Verbindungen zum Code wird in einer [[Property List|Property-List]]-Datei mit der Dateiendung .nib gespeichert (während der Entwicklung meist als [[XML]], im fertigen Produkt als [[Binärdatei]]). Wenn das Programm ausgeführt und die NIB-Datei „aufgeweckt“ wird, wird sie geladen und mit dem Binärcode verbunden.&lt;br /&gt;
&lt;br /&gt;
Mit Interface Builder 3.0 wurde ein neues Dateiformat eingeführt, das die Dateiendung .xib trägt. Es hat genau die gleichen Funktionen wie .nib-Dateien, ist jedoch aufgrund seiner [[Datenstruktur]] einfacher in Tools wie [[Versionsverwaltung]]en und [[diff]] zu handhaben.&lt;br /&gt;
Die Dateien werden von den meisten Entwicklern jedoch immer noch nib-Dateien genannt.&lt;br /&gt;
&lt;br /&gt;
Es wird seitens Apple dazu geraten, verschiedene Fenster (sofern sie nicht zu einer Klasse gehören) in verschiedene NIB-Dateien zu packen. Hauptgründe dafür sind Übersichtlichkeit und Effizienz (es dauert länger eine große Datei in den Speicher zu laden und zu verbinden als drei kleine.)&lt;br /&gt;
&lt;br /&gt;
=== Lokalisierung ===&lt;br /&gt;
&lt;br /&gt;
Elemente mit Text können entweder per Code oder direkt im Interface Builder lokalisiert werden.&lt;br /&gt;
Für die Lokalisierung werden Ordner mit dem [[Sprachkürzel]] und der Endung .lproj angelegt, darin sind dann die lokalisierten NIB-Dateien gespeichert. Bei der Ausführung wird dann nur die Datei, die im Ordner mit der aktuellen Systemsprache liegt, geladen und ausgeführt.&lt;br /&gt;
Die Lokalisierung per Code erfolgt per .strings-Dateien und der Methode &amp;lt;code&amp;gt;NSLocalizableString()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es gibt auch einige Programme von Drittherstellern, mit denen man entweder die String- oder NIB-Dateien lokalisieren kann.&lt;br /&gt;
&lt;br /&gt;
== Oberflächen ohne Interface Builder ==&lt;br /&gt;
Es ist ohne Weiteres möglich, UIs für Anwendungen nicht per Interface Builder, sondern per Code zu schreiben. Besonders um die Portierbarkeit zu gewährleisten, wird gerade bei Libraries und Frameworks in der Regel mit programmatisch erstellten Views gearbeitet. Ein weiterer Vorteil ergibt sich, wenn mehrere Entwickler an einer App arbeiten. Nur minimale Änderungen der .storyboard- oder .xib-Datei können dazu führen, dass sich die zugrundeliegende XML-Datei deutlich verändert, was relativ schnell zu Konflikten führt, wenn die verschiedenen Änderungen [[Merge|gemerged]] werden sollen. Bei manuell programmierten Views gibt es dieses Problem nicht, da sich die Struktur der Klasse nicht willkürlich ändern kann. Außerdem sind die einzelnen Teile der App besser gekapselt. Bei einem Storyboard ist in der Regel die komplette Benutzeroberfläche einer App in einer Datei, beim programmatischen Ansatz wird jede View in einer eigenen Klasse erstellt.&lt;br /&gt;
&lt;br /&gt;
Programmatisch erstellte Views sind zudem performanter, da hier keine zusätzliche XML-Datei vom Speicher geladen und geparst werden muss, und deutlich mächtiger, da beispielsweise nur im Code weitere Eigenschaften wie Schatten oder Rahmen gesetzt werden können. Der Performanceverlust des Interface Builders macht sich zudem nicht nur zur Laufzeit, sondern bereits zur Entwicklungszeit bemerkbar. Gerade bei komplexen Storyboards (hier werden mehrere Views in einer Datei verwaltet) kommt es dazu, dass das Öffnen der Datei im Interface Builder spürbar lange dauert.&lt;br /&gt;
&lt;br /&gt;
Nachteilig ist der erhöhte Zeitaufwand beim programmatischen Erstellen der View. Zum einen dauert es länger, die einzelnen Code-Zeilen zu schreiben, zum anderen ist es schwerer, die Elemente genau auszurichten. Da das grafische Ergebnis erst zur Laufzeit – und nicht wie beim Interface Builder zur Übersetzungszeit – betrachtet werden kann, sind Änderungen erst nach dem Kompilieren und Starten der App sichtbar. Das Überprüfen einer jeden Änderung benötigt daher deutlich mehr Zeit als bei einem [[WYSIWYG]]-Editor wie dem Interface Builder. Diese erhöhte Komplexität ist sowohl für Neulinge als auch für schnelles [[Prototyping (Softwareentwicklung)|Prototyping]] ungeeignet.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste Apple-Software}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:MacOS-Betriebssystemkomponente]]&lt;br /&gt;
[[Kategorie:Objective-C]]&lt;br /&gt;
[[Kategorie:Apple-Software]]&lt;br /&gt;
[[Kategorie:NeXT]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Trustable</name></author>
	</entry>
</feed>