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
Dateiendung
Funktion
.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).
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.