Hochschule Ulm
Bewerber

Studierende

Alumni

Unternehmen

Journalisten

Intern

V 1.6.1091.9245/


Entwicklung von iPhone/iPod Touch Applikationen mit X-Code und dem iPhone OS SDK

Diese Ausarbeitung befasst sich mit Anwendungsentwicklung von iPhone/iPod Touch Applikationen mit der Objekt orientierten Programmiersprache Objective-C unter Verwendung des Cocoa Frameworks und der X-Code IDE, sowie des iPhone OS SDK.

Vorraussetzungen

Um besagte Applikationen überhaupt entwickeln zu können, gibt es gewisse Vorraussetzungen:



Man benötigt einen Mac Computer und die X-Code IDE. X-Code läuft nur auf Mac OSX und ist als Bestandteil des Betriebssystems auf der Installations-CD/DVD eines jeden Macintosh Computers als optionales Installationspaket enthalten.


Man benötigt das iPhone SDK (aktuelle Version: 3.0). Um dieses herunterzuladen muss man sich einmalig und kostenlos als Developer bei Apple registrieren.


Grundkenntnisse in Objective-C (alle iPhone/iPod Touch Applikationen werden in Objektive-C programmiert)


Grundkenntnisse in Objektorientierter Programmierung, bestenfalls Objective-C (alle iPhone/iPod Touch Applikationen werden in Objektive-C programmiert)

Nach der Installation des iPhone OS SDK erscheinen beim erstellen eines neuen Projekts unter X-Code auch vorlagen für iPhone Applikationen. (Abbildung 1)




Abbildung 1 (erstellen eines neuen Projekts)

Cocoa und Cocoa Touch

Das Cocoa Framework ( früher bekannt als NeXTSTEP) hat seine Wurzeln bereits im September 1989, als „NeXTSTEP“ Version 1.0). Gegenwärtig ist es das am häufigst eingesetzte Framework, dass für die Entwicklung von Mac OSX Applikationen verwendet wird. iPhone Applikationen bauen auf einem sehr ähnlichen Framework auf, dem „Cocoa Toch“ Framework. Dieses beinhaltet im Gegensatz zum normalen Cocoa Framework spezielle Optimierungen für den mobilen Einsatz, sowie spezielle APIs.

Unterschiede zwischen Cocoa und Cocoa Touch

Während es bei Mac OSX neben Cocoa auch noch das alte Carbon Framework gibt (welches größtenteils wegen seiner abwärts Kompatibilität zu älterer Software eingesetzt wird) , Setzt das iPhone OS vollkommen auf Cocoa Touch. Des weiteren gibt es bei Mac OSX einen extra Quicktime Layer und einen BSD Layer, mit dem man sogar direkt auf der Kernel Ebene aufsetzen kann. Dies gibt es beim iPhone OS nicht, denn alle APIs und Funktionen werden direkt über das Cocoa Touch Framework gesteuert. (Abbildung 2)




Abbildung 2 (vergleich der Systemlayer zwischen Mac OS X und iPhone OS)

Das iPhone OS Schichtenmodell

Das iPhone OS ist in mehrere von einander abgetrennte Schichten aufgeteilt, welche aufeinander aufsetzen. Im folgenden sehen sie welche Schicht welche Funktionalität bietet

Cocoa Touch Schicht


Apple Push Notification Service (Ein dienst der es ermöglicht dass Anwendungen Benachrichtigungen Erhalten wenn gewisse Ereignisse eintreten, ohne das die jeweilige Anwendung überhaupt ausgeführt wird)


Address Book UI Framework (Zugriff auf das Adressbuch und alle darin enthaltenen Informationen wie Adressen, Telefonnummern, oder gar Geburtstagen)


In App Email / Massage UI (Ermöglicht das verfassen und versenden einer Email, direkt aus der eigenen Anwendung heraus, ohne extra den „Mail Client“ des iPhones starten zu müssen)


Map Kit Framework (Ermöglicht das komfortable einbetten und anpassen von Kartenmaterial [„GoogleMaps“ und eigene Karten] in der eigenen Anwendung sowie das anpassen der Ansicht und zusätzlichen Informationen wie Standpunkten oder den eigenen über das Funknetz oder GPS lokalisierten Standort)


Peer to Peer Support / GameKit ( Eine Sammlung von einfachgehaltenen Funktionen um auf den beliebten Bonjour Dienst zuzugreifen und Netzwerkverbindungen über alle zur Verfügung stehenden Technologien zwischen anderen Geräten herzustellen und zu benutzen)


UIKit Framework (Bietet die meisten häufig genutzten Funktionen)


Anwendungsverwaltung


Zwischenablage (Kopieren, Ausschneiden, Einfügen)


Fenster und Grafiken


Reagieren auf Berührungen des Touchscreens und Bewegungen des Bewegungssensors


Text und Web Inhalte


URL Integration von Anwendungen ( z.B. ftp:// )


Push Notification Service unterstützung


Zugriff auf die Userdaten (Fotogalerie, Kontakte)


auslesen des Gerätenamen und der Model sowie Software Version


auslesen des Batteriezustands


Benutzung der eingebauten Kamera

Media Schicht


Graphics ( Zeichenwerkzeuge für Benutzerdefinierte Views)


Quartz ( erweiterte Vektorbasierende Zeichenengine (aus OS X) mit Funktionen wie Antialiasing rendering, PDF Erzeugung, Bildverarbeitung)


Core Animation ( optimierte Animations- und Grafikeffekt-Algorithmen)


OpenGL ES (Open Source Grafik Bibliothek für 2D und 3D Rendering die meist für Spiele und ähnlich aufwendige Applikationen benötigt werden)


Audio (Unterstützung aller gängigen Audioformate und Sprachcodierungen)


AV Foundation (Werkzeuge zum Abspielen [auch mehrere gleichzeitig] und Aufzeichnen von Audiomaterial)


Core Audio (Werkzeuge zum Generieren, Bearbeiten und Mischen von Audiomaterial, sowie das ansteuern Des Vibrationsmotors)


Open AL ( Erweiterte Open Source Audiobibliothek mit noch mehr Möglichkeiten zur Manipulation und Verarbeitung von Audiosignalen)


Video Technologies ( Video Bibliothek welche Videoformate wie z.B. MPEG-4 oder H.264 unterstützt, sowie dazugehörige Audioformate)

Core Services Schicht


Core Data ( SQLLite Datenbankverwaltung und deren Abfragen und Speicherverwaltung)


Core Foundation (Daten Managment für diverse Dateitypen [string, array, set, date, ...] sowie URL und Stream Manipulation, Port/Socket Verwaltung und Tread Verwaltung)


Core Location ( Funktionen zur Positionsbestimmung mithilfe des eingebauten GPS Empfängers oder per Funknetz. Beim neuen Modell dem iPhone 3G S auch die Richtungsbestimmung per Erdmagnetfeld)


Foundation (Wie Core Foundation, allerdings zusätzlich mit Netzwerkschnittstelle Bonjour, Methoden für Programmierung Mehrsprachige-Anwendungen, Verwaltung von Geräteeinstellungen)


SQLite (Volle SQLite Unterstützung mit allem auch von der „PC Version“ bekannten Features auf dem Endgerät)


XML Support (Umfangreiche XML Manipulations Methoden der Open Source libXML2 Bibliothek)

Core OS Schicht


CFNetwork (Arbeiten mit Netzwerkprotokollen [HTTP(S), FTP, DNS, SSL, TSL, usw.])


Accessory Support ( Kommunikation mit externen Geräten die am 30-Pin Anschluss des iPhones oder iPod Touches angeschlossen werden können)


Security ( Verwaltung von Zertifikaten sowie öffentlichen und privaten Passwörtern, Ver- und Entschlüsselung von Daten)


System ( Der Interne unix mach Kernel mit allen darin enthaltenen Funktionen und Befehlen, wobei viele Funktionen geschützt sind)

Beispielprogramm

In diesem Beispielprogramm wollen wir lediglich die Farbe eines Labels und dessen Text auf „Knopfdruck“ ändern.

Anlegen eines neuen Projekts

Zunächst erstellen wir ein neues Projekt in XCode und nennen es einfach mal „Testa“. Dazu benutzen wir die Vorlage für eine einfache „Window based Application“ Dies ist einfach nur ein weißes Fenster ohne extra Navigationselemente oder Toolbars. (Abbildung 3)




Abbildung 3 (Anlegen eines neuen Projekt als "Window based Application")

Nun öffnet sich das Projektfenster (Abbildung 4) von XCode in dem sämtliche in der Applikation verwendeten Dateien und Frameworks aufgelistet werden. (siehe nächster Punkt)

Projektdateien und deren Funktion/Zweck




Abbildung 4 (Projektfenster)

Projektdateien und deren Funktion/Zweck

DateiendungFunktion
.h
Header, hier befinden sich Objekt und Methodendeklarationen (wie in C++ auch)
.m
Quelltext, hier werden Methoden implementiert (wie bei C++ .cpp)
.xib
Layout des Programms, diese Dateien lassen sich mit „Interface Builder“, einem Programm dass ebenfalls zur XCode IDE gehört öffnen und bearbeiten.
.plist
Allgemeine Infodatei über das Programm in XML Form
.pch
Prefix Header (wird zum Includieren von Programmweit benötigten Frameworks benutzt)
.framework
Im Projekt benutze Frameworks (werden nur als Link angezeigt, liegen beim Compilieren dem Programm nicht bei!)
.app
Fertiges Application Package. Jedes Programm unter Mac OS X befindet sich in solch einem Application Package. Darin enthalten sind sowohl benötigte Ressourcen wie Bilder, Icons, Listen und sonstige Dateien, als auch der ausführbare Code des Programms selbst. Mit dem iPhone verhält es sich ebenso, jedes Programm ist nach dem Kompilieren in solch einem Package zusammengefasst.

Programmlayout (Interface)

Als erstes benötigen wir ein Layout für unser Programm, dazu öffnen wir die MainWindow.xib mit dem Interface Builder. Es erscheint eine "leere" Vorschau mit Statusbalken. (Abbildung 5)




Abbildung 5 (Leere View mit Statusbalken)

In der Library (Tools -> Library) (abbildung 6) von Interface Builder sehen wir nun eine große Auswahl an Programmelementen wie Buttons, Labels, Tabellen, Textfelder, Schalter, Schieberegler und viele mehr. Wir benötigen für unser Testprogramm lediglich ein Label, und eine Toolbar mit 3 Buttons, was sich so einfach reinziehen lässt. (Abbildung 7)




Abbildung 6 (Library)




Abbildung 7 (Modifizierter View mit Label und 3 Buttons in einer Statusbar)

Wir können unser Programm jetzt Kompilieren und sehen dass beim antippen der Buttons noch nix passiert.

Objekte

Damit was passiert müssen zunächst ein neues Objekt in der .xib erstellen. Dazu ziehen wir ein „Objekt“ aus der Library in das Projektfenster des Interface Builders.




Abbildung 8 (Neues Objekt im Interface Builder erstellen)

Um das objekt weiter zu bearbeiten müssen wir nun den Inspectror (Tools -> Inspector) aktivieren.

Zunächst benennen wir unser neues Objekt in dem wir in dem Oberstem Feld (bei Class) Einen Namen für unsere neue Klasse eingeben. Nun tragen wir bei Action für jeden unserer Buttons eine passende Methode ein. und bei Outlet ebenso einen passenden Namen für das Label.




Abbildung 9 (Defnition des neuen Objekts)

Objekt assoziationen

Damit unser Programm weis welche Methode, bzw. welches Objekt nun mit was auf dem Bildschirm assoziiert wird, gehen wir (nach vorherigem auswählen des Objekts im Objektfenster) nochmals in den Inspector, diesmal allerdings unter „Window Connections“ und klicken nun die Punkte bei den Methoden und Objektnamen an, und ziehen eine Linie zum zugehörigem Objekt der Bildschirmvorschau. (Abbildung 10)




Abbildung 10 (Verknüpfen von Funktionen und Objekten der View)

Klassenfiles automatisch erzeugen

Nun gibt es ein sehr nützliches Feature von Interface Builder. Mit einem einzigen klick kann man sich nun automatisch die nötigen Klassen die zur weiteren Bearbeitung benötigt werden automatisch erstellen lassen. Nach dem erstellen der neuen Klasse muss man in dessen Headerfile Lediglich die Elternklasse angeben. In unserem Fall „NSObject“ (siehe Farbspiel.h).




Abbildung 11 (Klassenfiles automatisch erzeugen)

Farbspiel.h:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface Farbspiel : NSObject {
    IBOutlet UILabel *Label;
}
- (IBAction)Blau;
- (IBAction)Rot;
- (IBAction)Gruen;

@end

Funktionen

Was jetzt noch fehlt ist etwas was das Programm tun soll. In unserem Fall wollen wir dass das Label seinen Text auf die Bezeichnung einer Farbe wechselt, und gleichzeitig die Farbe des Textes in der jeweiligen Farbe erscheint.

Dazu schreiben wir im Klassenfile (.m) :

#import "Farbspiel.h"

@implementation Farbspiel
- (IBAction)Rot {
    Label.text=[NSString stringWithFormat: @"ROT"];
    Label.textColor = [UIColor redColor];
}

- (IBAction)Blau {
    Label.text=[NSString stringWithFormat: @"BLAU"];
    Label.textColor = [UIColor blueColor];
}

- (IBAction)Gruen {    
    Label.text=[NSString stringWithFormat: @"GRÜN"];
    Label.textColor = [UIColor greenColor];    
}
@end

Wenn wir nun Kompilieren, sehen wir dass sich die Farbe des Textes und der Text selbst bei jedem „drücken“ ändert. (Abbildung 12)




Abbildung 12 (Fertiges lauffähiges Programm)

© by Eduard Prezer 2009