07.04.2011

Erste Schritte in XCode 4

Die neue Version von XCode ist schon länger erhältlich. Trotzdem findet sich noch keine wirklich einfache Beschreibung darüber, wie damit eine App zusammenzubauen ist.

Also hier eine kurze Zusammenfassung, denn schwierig ists ja wirklich nicht.

Nachdem XCode heruntergeladen, installiert und gestartet ist (ich gehe hier aus von Version 4.0.1), erscheint der Projekt-Dialog:



Natürlich wählen wir "Create a new XCode Project". Im darauffolgenden Dialog hat man zunächst (links) die Wahl, für iOS oder Mac OS X eine Anwendung oder ein Framework, eine Library, Plug-in oder anderes zu bauen. Wir wählen iOS Application.



Hier werden eine Reihe von Vorlagen für Apps angezeigt, es steht also die erste Entscheidung an: Wie soll die App im Prinzip aussehen? - Wir entscheiden uns für den Standard, die "Navigation-based Application". Das sind die Apps, die am oberen Rand einen Navigations-Pfad haben, wie z.B. die Mail App. Wählen wir also diese Vorlage und drücken auf "Next". Nun sind der Name der App gefragt, sowie ein "Company Identifier" (de.<Nach- oder Firmenname> ist ein guter guess). Ausserdem soll man angeben ob man Daten persistieren (Core Data) und Unit Tests bauen möchte. Im letzten Schritt wird noch nach der Lage des neuen Projektes im Dateisystem gefragt - und dann betritt man das schöne neue Reich von XCode 4:



Ich finde es praktisch, durch Drücken der beiden markierten Knöpfe eine vierteilige Anzeige einzuschalten. Links findet sich der Projekt-Explorer, dann der Haupteditor, dann der Assistant-Editor. Wenn man von Java kommt, ist mans ja nicht mehr gewohnt: Es gibt .h- und .m-Dateien. Und mit den zwei Editoren hat man immer beide im Blick. Oder später den Quellcode und den UI-Builder. Praktisch.
Links finden sich schliesslich die Utilities, im wesentlichen mit den verschiedenen Inspektoren des UI-Builders und ganz unten dem Blick in die Object Library mit Labeln, Knöpfen, Views und allem, was die iPhone Oberfläche so hergibt.
Im Explorer findet man also die Dateien aus der Vorlage, ausgewählt im Bild oben der Haupt-Controller, sichtbar ist also der Objective-C-Quellcode. Die andere Seite der iPhone-Coding-Medaille ist der UI-Builder. Früher ein separates Tool, ist er nun in XCode integriert, wie man nach einem Klick auf die Oberflächen-Definition in RootViewController.xib sofort feststellt:



Die entsprechende Benutzeroberfläche wird nun visuell dargestellt, die zugehörende Controller-Schnittstelle im Assistant-Editor.
Warum das toll ist? - Weil das zentrale Konzept der Oberflächenentwicklung iOS damit prima unterstützt wird: Outlets und Actions.
Das wird dann deutlich, wenn wir einfach einmal einen neuen Dialog programmieren:
Kontext-Menü von "Tutorial" (dem Ordner, in dem neue Dateien angelegt werden sollen), "New file...", "iOS Cocoa Touch" auswählen, damit zeigen wir, dass wir eine neue Klasse erzeugen wollen. Netterweise gibt's da den Eintrag "UIViewController subclass", mit dem ein neuer Dialog (View) angelegt wird. Auf der nächsten Seite angeben, dass eine XIB (UI-Definition) mit angelegt werden soll, den Namen wählen, et voìla: Controller .h, .m und .xib-Dateien wurden erzeugt. (Und übrigens korrekt verknüpft: Die Class des File's Owner im XIB zeigt bereits auf den neu erzeugten Controller. Wie oft habe ich vergessen, dass umzustellen und mich dann über Folgeprobleme gewundert).
Jetzt können wir das XIB öffnen und den leeren View ein wenig bevölkern, sagen wir, mit einem Label, einem TextField und einem Button. Das geht ganz einfach, indem man sie rechts unten aus der Object Library auf den View zieht. Und jetzt kommt der Clou: Wir wollen z.B. auf einen Klick-Event beim Button reagieren? Dann rufen wir auf dem Button das KontextMenü auf. Darin sehen wir die Events. Wir suchen uns den Touch-Up-Inside-Event aus. Jetzt nehmen wir einfach den leeren Kreis dahinter und ziehen ihn auf die Schnittstelle im Assistant-Editor! Sehr schön wird angezeigt, wo ich die Action (denn eine solche muss nun erzeugt werden), fallen lassen kann.



Dann springt ein Dialog auf, der i.w. nach dem Namen der Action fragt und schon wird der entsprechende Code erzeugt:
- (IBAction)onButtonClick:(id)sender;
In der Implementation steht bereits die leere Implementation, und wir können sofort anfangen, die Methode für den Button-Klick zu schreiben. Das Gleiche funktioniert bei anderen Komponenten wie Label und TextField, wenn man "New Referencing Outlet" auf den Quellcode zieht. Man erzeugt dann zügig die zugehörenden Outlets:

IBOutlet UILabel *label;
   IBOutlet UITextField *textField;
Will man daraus allerdings Properties machen, so sind die obligatorischen @property- und @synthesize-Konstruktionen per Hand einzufügen. Deallokationen werden aber immerhin automatisch hinzugefügt.