Sie sind auf Seite 1von 48

Bachelorarbeit

zur Erlangung des akademischen Grades eines

Bachelor of Science
der Studienrichtung Softwareentwicklung-Wirtschaft an der Technischen Universit t Graz a

uber das Thema

iOS-Applikation des Lernspiels Schnittkraftmeister


eingereicht am Institut fur Informationssysteme und Computer Medien Begutachter: Univ.-Doz. Dipl.-Ing. Dr.techn. Martin Ebner von

Christoph Aldrian
Graz, 31. M rz 2012 a

Erklrung a
Hiermit versichere ich, dass ich die vorliegende Arbeit selbstst ndig verfasst und a keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe, dass alle Stellen der Arbeit, die wortlich oder sinngem aus anderen Quellen ubernommen a wurden, als solche kenntlich gemacht sind und dass die Arbeit in gleicher oder ahnlicher Form noch keiner Prufungsbehorde vorgelegt wurde.

Graz, 31. M rz 2012 a

Christoph Aldrian

Abstract The goal of this project was developing a native iOS application of the learning game Schnittkraftmeister (Internal Force Master). Schnittkraftmeister is a game that supports students in the sophisticated process of learning the calculation of internal forces in statically determined and undetermined systems. The learning effect is achieved by repeated training of carefully distinguishing correct internal forces from wrong solutions within a very short time [EH07]. The web-based application has been designed to be played on desktop and notebook computer screens, which is the reason it cannot be played on Smartphone devices very well. Moreover playing the game online would require to stay connected all the time. Implementing Schnittkraftmeister as native iOS-Application makes it possible to optimize the game interface for iPhone and iPod touch screens and touch based input methods. Besides that it also allows to integrate Apples Game-Center services, a network where achieved scores can be shared with friends and compared to scores of any other players around the world. Keywords: internal forces, iOS application, game based learning Zusammenfassung Das Ziel dieser Arbeit war die Entwicklung einer nativen iOS-Applikation des Lernspiels Schnittkraftmeister. Schnittkraftmeister unterstutzt Studierende dabei, das Berechnen von Schnitt kr ften in statisch bestimmten und unbestimmten Systemen zu erlernen. Der a Lerneffekt wird erzielt durch wiederholtes, sorgf ltiges Unterscheiden zwischen a korrekten und inkorrekten Schnittkraftverl ufen in sehr kurzer Zeit [EH07]. a Die webbasierte Implementierung des Schnittkraftmeisters wurde fur Desktop und Notebook Bildschirme konzipiert und ist daher zum Spielen auf Smartpho nes nicht geeignet. Uberdies erfordert diese Art der Umsetzung eine permanente Internetverbindung. Durch die Implementierung als native iOS-Applikation kann die Benutzerschnittstelle optimal auf iPhone und iPod touch Bildschirme und Eingabemethoden angepasst werden. Zudem unterstutzt sie die Integration von Game-Center, einem Netzwerk von Apple, das Spielern erlaubt Spielst nde mit Freunden und a anderen Spielern zu teilen und zu vergleichen. Schlusselworter: Schnittkr fte, iOS Applikation, Spielbasiertes Lernen a

Inhaltsverzeichnis
1 Einleitung 2 Motivation 3 Plattform 3.1 Ger te . . . . . . . . a 3.2 Bedienungskonzept 3.3 Applikationen . . . 3.4 App Store . . . . . 3.5 Game-Center . . . . 6 6 7 7 7 8 9 9 9 9 12 14 23 23 28 29 29 30 31 34 41 46 48

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

4 Entwicklungsgrundlagen 4.1 Betriebssystem . . . . . . . . . . 4.2 Anwendungsgrundlagen . . . . 4.3 Entwickeln fur Cocoa Touch . . 4.4 iOS Software Development Kit 4.5 Programmiersprache . . . . . . 4.6 Dev Center . . . . . . . . . . . . 5 Implementierung 5.1 Spielprinzip . . . . . . . . . . . 5.2 Entwicklungsumgebung . . . . 5.3 Aufbau der Applikation . . . . 5.4 Hauptkomponenten im Detail . 5.5 Implementierungsmerkmale . . 6 Diskussion Literatur

Abbildungsverzeichnis
1 2 3 4 5 6 7 8 9 10 11 12 Technologieschichten in iOS . . . . . . . . . . . . . . . . Lebenszyklus einer iOS Anwendung . . . . . . . . . . . Cocoa-Version des MVC-Musters . . . . . . . . . . . . . Traditionelle Version des MVC-Musters . . . . . . . . . Composite-Muster der View Hierarchie . . . . . . . . . . . Fragestellung mit drei Antwortmoglichkeiten . . . . . Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . Screenshot der Online-Variante des Schnittkraftmeisters Views des Menu-View-Controllers . . . . . . . . . . . . . Ober che des Game-View-Controllers . . . . . . . . . . a Ober che des Highscores-View-Controllers . . . . . . . . a Internationalisierung in Xcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 14 15 15 16 29 32 33 34 35 38 43

Listings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Beziehen der Singleton-Instanz von UIApplication . . . . . . . . . Deklarieren und Erzeugen eines Blocks . . . . . . . . . . . . . . . Starten einer View-Animation . . . . . . . . . . . . . . . . . . . . . Beispielklasse Person . . . . . . . . . . . . . . . . . . . . . . . . . . Kategorie zur Klasse NSString . . . . . . . . . . . . . . . . . . . . Senden einer Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . Erzeugen einer Instanz . . . . . . . . . . . . . . . . . . . . . . . . . Demonstration des Reference Counting . . . . . . . . . . . . . . . . Implementierung der Hit-Test-View . . . . . . . . . . . . . . . . . . Erweiterung der Klasse NSMutableArray um die Methode shufe Archivierung eines Objekts . . . . . . . . . . . . . . . . . . . . . . Wiederherstellung eines Objekts aus einem Archiv . . . . . . . . Berichten eins Spielstands . . . . . . . . . . . . . . . . . . . . . . . Reagieren auf Konnektivit ts nderungen . . . . . . . . . . . . . . a a Animiertes Navigieren von Menu zu Scores . . . . . . . . . . . . . Aufz hlungstypen fur Sichtbarkeiten und Zust nde . . . . . . . . a a Animieren in einen Ober chenzustand . . . . . . . . . . . . . . . a Verwendung von Zeichenketten-Konstanten . . . . . . . . . . . . . Demonstration des Lazy Memory Allocation Konzepts . . . . . . . Freigabe einer View-Controller-Instanz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 19 24 25 26 26 27 36 37 39 39 40 40 41 42 42 44 45 45

1 Einleitung
Schnittkraftmeister ist ein Online-Lernspiel, in dem auf den Verlauf von SchnittkraftKennlinien in Tragwerken geschlossen werden muss. Der Spieler soll darauf trainiert werden, in sehr kurzer Zeit sorgf ltig zwischen korrekten und falschen Losungen a unterscheiden zu konnen. Die erste Implementierung des Schnittkraftmeisters entstand im Jahr 2003 und basierte auf Adobe Flash. Die Verwendung dieser Technologie brachte klare Vorteile mit sich. Einerseits lieen sich damit relativ schnell Animationen und Visualisierungen von technischen Modellen entwickeln und andererseits waren FlashInhalte aufgrund der kleinen Dateigroen und der Betriebssystem-ubergreifenden Unterstutzung sehr gut fur den Einsatz im World Wide Web geeignet [EH07]. Basierend auf Feedback von Studierenden wurde das Lernspiel sp ter vollst ndig a a uberarbeitet. Neben einer Neugestaltung der Ober che wurde auch auf andere a Technologien gebaut. Die neue Implementierung l sst sich zwar ohne Browser-Plugins a ausfuhren, ist jedoch fur Maus-Bedienung auf Desktop- bzw. Notebook-Bildschirmen konzipiert [ZE11]. Diese Arbeit befasst sich mit der Entwicklung einer weiteren Umsetzung des Schnittkraftmeisters, speziell fur Apples iOS-Ger te. Ziel war die Erstellung einer nativ laua fenden iOS-Applikation, deren Ober che auf diese verh ltnism ig kleinen Bilda a a schirme angepasst und deren Bedienung fur beruhrungsbasierte Eingabemethoden optimiert ist.

2 Motivation
Mehrere Grunde sprechen fur eine Neuentwicklung als iOS-Applikation: Die Ober che der Web-Applikation ist fur Notebook- und Desktop-Bildschirme a ausgelegt und kann hinsichtlich ihrer Groe auf iPhone- oder iPod-Bildschirmen nicht vollst ndig und gleichzeitig leserlich dargestellt werden. a Das Spiel soll ohne bestehende Internetverbindung ausfuhrbar sein. Es soll ein schnelles und einfaches Starten der Applikation moglich sein. Spielspa und Lernbereitschaft sollen durch die Integration des Game-CenterDienstes erhoht werden.

3 Plattform
3.1 Gerte a
Derzeit konnen Applikationen fur drei Arten von iOS-Ger ten entwickelt werden: a iPhone, iPod touch, iPad. Das iPhone ist ein Mobiltelefon mit hochauosendem beruhrungsempndlichen Bild schirm (Touchscreen), ohne physische Tastatur. Es verfugt uber eine Kamera, einen Kompass, je einen Beschleunigungs-, Kreisel-, Ann herungs- und Umgebungslichta Sensor und die Moglichkeit der Positionsbestimmung. Es ist in der Lage Musik und Videos abzuspielen, Fotos anzuzeigen und sich uber verschiedene Funktechnologien mit dem Internet und anderen Ger ten zu verbinden1 . a Der iPod touch ist ein dem iPhone sehr ahnliches Musik- und Videoabspielger t. Er a basiert grunds tzlich auf den gleichen Technologien, sodass die meisten fur das a 2. iPhone entwickelten Applikationen ebenfalls ausgefuhrt werden konnen Das iPad ist ein Tablet-Computer mit erheblich groerem Bildschirm. Die Erstellung einer an diese Verh ltnisse angepasste Version des Schnittkraftmeisters wird in diea ser Arbeit nicht behandelt. In diesem Dokument wird vereinfachend der Begriff iPhone als Synonym fur das iOS-Ger t verwendet. a

3.2 Bedienungskonzept3
Das iPhone wird haupts chlich durch Beruhren des Bildschirms bedient. Ein Tipa pen auf den Bildschirm entspricht dem gewohnten Klicken mit der Maustaste. Das Streichen mit dem Finger uber die Bildschirmober che erlaubt das Verschieben von a beweglichen Inhalten. Mit Hilfe weiterer Ein- und Mehrngergesten konnen komplexe Aktionen wie z.B. das gleichzeitige Skalieren, Rotieren und Verschieben von Bildern sehr intuitiv bewerkstelligt werden. Auch das Neigen oder Schutteln des Ger ts ndet a in verschiedensten Applikationen innovative Anwendungen.

1 2 3

http://www.apple.com/at/iphone/specs.html (letzter Abruf: 19.09.2011) http://www.apple.com/at/ipodtouch/specs.html (letzter Abruf: 19.09.2011) http://manuals.info.apple.com/de/iPhone Benutzerhandbuch.pdf (letzter Abruf: 19.09.2011)

3.3 Applikationen
Auf einem iPhone sind einige Applikationen (kurz: Apps) bereits vorinstalliert. Unter anderem enth lt es Apps zum Telefonieren, Senden und Empfangen von Kura nachrichten und E-Mails, Abspielen von Audio- und Videoinhalten, Verwalten von Terminen, Erstellen von Notizen, Browsen des Internets und Fotograeren4 . Weitere Applikationen konnen uber den sogenannten App Store bezogen werden. 3.3.1 Startbildschirm Die installierten Applikationen verbergen sich nicht hinter einer Menustruktur, son dern pr sentieren sich mit ihren Programmsymbolen auf einer gemeinsamen Ebene, a dem Startbildschirm5 . Der Startbildschirm ist der Ausgangspunkt zum Benutzen des iPhones. Von hier aus konnen Apps durch Tippen auf das zugehorige Programm symbol gestartet werden und hierher gelangt man nach dem Verlassen von Apps durch Drucken der Home-Taste auch wieder zuruck. 3.3.2 Multitasking6 Auf Grund eingeschr nkter Ressourcen wie Rechenkapazit t und Batterielaufzeit a a verfolgt das Betriebssystem des iPhones ein anderes Konzept als das eines DesktopComputers. Anstatt mehreren Applikationen in Form von Fenstern das gleichzeitige Anzeigen auf dem Bildschirm zu erlauben, steht die gesamte Anzeige che immer a nur einer aktiven Applikation zur Verfugung. Weiters werden die im Hintergrund bendlichen Anwendungen angehalten, um moglichst wenig Energie zu beanspru chen. Die Ausnahme bilden bestimme Applikationen, die einen Teil ihrer Funktionalit t a auch im Hintergrund ausfuhren durfen. Dazu z hlen z.B. Navigationsanwenduna gen, Internettelefonie-Dienste oder Musik-Abspielsoftware.

4 5 6

http://www.apple.com/at/ios - iOS Uberblick (letzter Abruf: 20.09.2011) http://www.heise.de/-972723 (letzter Abruf: 20.09.2011) https://developer.apple.com/library/ios - App Programming Guide (letzter Abruf: 20.09.2011)

3.4 App Store7


Der App Store ist die ofzielle Vertriebsplattform fur iPhone-Applikationen. Hier nden sich hunderttausende kostenpichtige und kostenfreie Applikationen von eigenst ndigen Entwicklern. Herunterladen lassen sich diese Apps sowohl direkt am a iPhone, als auch uber das Verwaltungsprogramm iTunes auf einem Mac OS X- oder Microsoft Windows-Computer.

3.5 Game-Center8

Game-Center ist ein Social Gaming Netzwerk, zu dem Benutzer/innen sich anmelden und anonym mit anderen Spielern messen konnen. Es lassen sich Punktest nde a und Erfolge vergleichen und andere Spieler als Freunde markieren. Zu MehrspielerSpielen konnen Spieler sich automatisch zuteilen lassen oder befreundete Spieler einladen.

4 Entwicklungsgrundlagen
4.1 Betriebssystem
Der Begriff iOS vereint das UNIX-basierende Betriebssystem und die Technologien des iPhones, die es ermoglichen Applikationen auf diesen mobilen Ger ten nativ a ausfuhren zu lassen10 . Ein Betriebssystem ist die Softwareschicht zwischen Applikation und Hardware. Es verwaltet die verfugbaren Ressourcen und agiert als Vermittler, sodass Applika tionen nur durch wohldenierte Schnittstellen mit der Hardware kommunizieren konnen. Diese Abstraktion schutzt das System einerseits vor Anwendungen, die die Stabilit t der Gesamtplattform gef hrden und stellt andererseits sicher, dass Applia a kationen moglichst hardwareunabh ngig implementiert werden konnen [St 10]. a a

https://developer.apple.com/programs/ios/distribute.html (letzter Abruf: 20.09.2011) https://developer.apple.com/devcenter/ios/gamecenter (letzter Abruf: 20.09.2011) 9 http://adcdownload.apple.com/ios/getting started with ios 4.1/gettingstartedwithgamecenter.pdf (letzter Abruf: 20.09.2011) 10 https://developer.apple.com/library/ios (letzter Abruf: 20.09.2011)
8

4.1.1 Technologie-Schichten10

11

Den Kern des Betriebssystems bildet ein sogenannter Mach Kernel. Er gehort zur Klasse der Mikrokernel, die aus Grunden der Efzienz nur minimale Funktionalit t a im Kernel selbst bereitstellen [St 10] [Tan09]. a Auf den Kernel aufbauend kann die Implementierung von iOS als eine Menge von Software-Schichten betrachtet werden, die die Ausfuhrung von Applikationen auf der Plattform ermoglichen (siehe Abbildung 1). Jede dieser Schichten bietet Programmierschnittstellen (Frameworks) an. Tiefer gelegenen Schichten decken fundamentale Dienste und Technologien ab, auf die alle Applikationen beruhen, w hrend hoher gelegene Schichten spezischere Dienste a anbieten. Entwickler sollten ihre Applikationen bevorzugt an Programmierschnittstellen aus hoher gelegenen Schichten anknupfen, da diese komplizierte Aufgaben abkapseln und dadurch die Menge und Komplexit t des zu schreibenden Codes reduzieren. a

Cocoa Touch Media Core Services Core OS

Abbildung 1: Technologieschichten in iOS

4.1.2 Frameworks12

13

Ein Framework ist eine hierarchische Verzeichnisstruktur, die gemeinsam genutzte Ressourcen wie Bibliotheken, Header-Dateien, Graken u. . zu einem Paket vereia nen. Es stellt Schnittstellen bereit, die zum Entwickeln von Applikationen benotigt werden. Mehrere Applikationen konnen diese Frameworks benutzen, w hrend sie a nur einmal in den Speicher geladen werden mussen.
11 12 13

https://developer.apple.com/library/ios - iOS Overview (letzter Abruf: 20.09.2011) https://developer.apple.com/library/ios - iOS Technology Overview (letzter Abruf: 20.09.2011) https://developer.apple.com/library/mac - Framework Programming Guide (20.09.2011)

10

An dieser Stelle werden Frameworks, die fur die Implementierung des Schnittkraft meisters verwendet wurden, kurz erl utert: a Foundation Framework14 Im Foundation-Framework sind grundlegende Objective-C Klassen deniert. Neben der Wurzel-Klasse NSObject beinhaltet es auch Datenhaltungsklassen und Klassen, die Informationen wie Datum, Zeit, Kommunikationsanschlusse oder Basisdatentypen wie Zeichenketten und Byte-Felder repr sentieren. Sie stellen nutzliche Erweiteruna gen zu Objective-C dar und ermoglichen es, Betriebssystem-unabh ngige Software a zu entwickeln. Das Framework fuhrt Paradigmen ein, die nicht von der Sprache Objective-C abgedeckt werden. Darunter fallen Konventionen zur Enumerierung, Speicherverwaltung und Objekt-Persistenz. UIKit Framework15 16 [St 10] a Das UIKit-Framework deniert die Schlusselinfrastruktur um Ereignis-basierte, gra sche Applikationen in iOS zu entwickeln. Es enth lt unter anderem die UIApplicaa tion-Klasse und bietet Ereignisbehandlung, Fenster, Ansichten (Views) und fur Touchs creens optimierte Eingabeelemente an. GameKit Framework16 17 Das Game Kit-Framework erlaubt es Apps uber Netzwerk zu kommunizieren und Mehrspieler-Spiele mit optionaler Sprachubertragung zu realisieren. Mit iOS SDK 4.1 wurde das Framework um die Unterstutzung des Game-Center-Dienstes erweitert. System Conguration Framework18 Dieses Framework bietet Methoden an, die die Erreichbarkeit von Netzwerkzielen feststellen konnen.

14 15 16 17 18

https://developer.apple.com/library/ios - Foundation Framework Reference (20.09.2011) https://developer.apple.com/library/ios - UIKit Framework Reference (Abruf: 20.09.2011) https://developer.apple.com/library/ios - iOS Technology Overview (letzter Abruf: 20.09.2011) https://developer.apple.com/library/ios - Game Kit Framework Reference (Abruf: 20.09.2011) https://developer.apple.com/library/ios - System Conguration Framework Ref. (20.09.2011)

11

4.2 Anwendungsgrundlagen
4.2.1 Virtueller Speicher19 [St10] a iOS verwaltet den Speicher von Anwendungen ahnlich dem Betriebssystem Mac OS X. Jeder Applikation steht ein eigener virtueller Adressraum zur Verfugung, der jedoch durch die Menge des physisch verfugbaren Speichers begrenzt ist. Da iOS kein Aus lagern von Daten auf den Festspeicher unterstutzt, sendet es bei Speicherbedarf eine Aufforderung an laufende Applikationen, nicht benotigten Speicher freizugeben. 4.2.2 Dateisystem19 [St10] a Eine Applikationen wird mit ihren zugehorigen Dateien unterhalb eines Basisver zeichnisses im Dateisystem abgelegt. Jedes Basisverzeichnis beinhaltet unter anderem folgende Unterverzeichnisse: <Basisverzeichnis>/AppName.app Ein vor Ver nderungen geschutztes Verzeichnis mit Dateien, die zum Ausfuhren a der Applikation benotigt werden. <Basisverzeichnis>/Documents Verzeichnis zum Ablegen von Dokumenten. <Basisverzeichnis>/Library/Cache Verzeichnis zur Speicherung groer Dateien, die zwischen mehreren Applikationsstarts verfugbar bleiben sollen. <Basisverzeichnis>/tmp Verzeichnis fur tempor re Dateien zur der Applikationslaufzeit. a 4.2.3 Sicherheitvorkehrungen19 [St10] a Zum Schutz der Plattform und zur Sicherheit der Benutzerdaten hat iOS einige Konzepte implementiert: Dateischutz (File Protection) Dieser Mechanismus erlaubt das Schutzen von Dateien, sodass diese verschlusselt abgespeichert werden und unlesbar sind, sobald das Ger t gesperrt wurde. Bis a der/die Benutzer/in das Ger t mit dem Code entsperrt kann nicht einmal die a besitzende Applikation darauf zugreifen.
19

https://developer.apple.com/library/ios - App Programming Guide (letzter Abruf: 20.09.2011)

12

Sandbox-Prinzip (Application Sandbox) Das Sandbox-Prinzip umfasst eine Reihe von wohldenierten Schnittstellen, die der Applikation nur eingeschr nkte Zugriff auf Netzwerkressourcen, Harda ware und ihr Basisverzeichnis gew hren. Das Basisverzeichnis ist von keia ner anderen Applikation erreichbar und liegt unter /ApplicationRoot/ApplicationID, wobei ApplicationID eine eindeutige Bezeichnung der Anwendung ist. Das Sandbox-Prinzip kann einen Angriff nicht verhindern, jedoch dessen Schaden begrenzen. Schlusselbund (Keychain) Mit dem Schlusselbund hat jede Applikation einen sicheren Container zum Spei chern von Passwortern und anderen geheimen Informationen. Er bendet sich auerhalb der Sandbox. 4.2.4 Lebenszyklus der Applikation (Application Life Cycle)20 [St10] a Eine App wird uber ihr Symbol auf dem Startbildschirm gestartet. Die daraufhin auf gerufenen Startmethode main() erstellt einen Autorelease-Pool (s.a. Reference Counting unter 4.5.7) und ubergibt dem UIKit-Framework die Kontrolle (UIApplicationMain()). Dieses initialisiert das Applikations- und dessen Delegate-Objekt und beginnt mit der Ausfuhrung der Ereignisschleife (siehe Abbildung 2). Ereignisschleife (Event Loop) Die Ereignisschleife iteriert w hrend der Laufzeit der Applikation und reicht eina treffende Ereignisse an die zust ndigen Views und View Controllers weiter. a Application Delegate Zum Anpassen einer Anwendung an das gewunschte Verhalten muss das komplexe Applikationsobjekt nicht abgeleitet werden. Spezischer Code wird durch ein separates Delegate-Objekt zur Verfugung gestellt, dessen Methoden zu vordenierten Zeitpunkten aufgerufen werden (s.a. Delegation unter 4.3.1 Decorator). Nach dem Aktivieren der Applikation wird applicationDidFinishLaunching: aufgerufen, um die Ober che anzuzeigen. Mit den Methoden applicationWillResignActive: a und applicationDidEnterBackground: kann auf das Inaktivwerden, und mit applicationWillTerminate: auf das Terminieren der Applikation reagiert werden.

20

https://developer.apple.com/library/ios - App Programming Guide (letzter Abruf: 20.09.2011)

13

UIKit User taps application icon

AppDelegate

main() application: didFinishLaunchingWithOptions:

UIApplicationMain()

Event Loop

Handle event

System asks application to quit foreground

applicationWillResignActive:

Application moves to background

applicationDidEnterBackground:

Abbildung 2: Lebenszyklus einer iOS Anwendung

4.3 Entwickeln fr Cocoa Touch21 [St10] u a


Die oberste Schicht des Betriebssystems heit Cocoa Touch und ist diejenige, mit der Anwendungsentwickler am h ugsten in Beruhrung kommen. Sie enth lt Schlussela a frameworks zur Entwicklung von iOS-Applikationen, deniert deren grundlegende Infrastruktur und bietet Unterstutzung fur die wichtigsten Technologien wie Multitasking, Touchscreen-optimierte Eingabe, Gestenerkennung und viele weitere System-Dienste. Die Frameworks von Cocoa Touch wurden speziell fur die mit Fin gern bedienbare Benutzerschnittschnittstelle optimiert und haben viele Gemeinsamkeiten mit den Frameworks von Cocoa, dem Equivalent der Mac OS X-Plattform22 . 4.3.1 Entwurfsmuster (Design Pattern)23 [St10] a Viele Mechanismen der Cocoa und Cocoa Touch Umgebung machen sehr stark von Entwurfsmustern Gebrauch. In diesem Abschnitt werden Anwendungen derartiger Muster erl utert, die in der Entwicklung des Schnittkraftmeisters von Bedeutung a waren.
21 22 23

https://developer.apple.com/library/ios - iOS Technology Overview (letzter Abruf: 20.09.2011) https://developer.apple.com/technologies/ios/cocoa-touch.html - Cocoa Touch (22.09.2011) https://developer.apple.com/library/ios - Cocoa Fundamentals Guide (Abruf: 22.09.2011)

14

Model-View-Controller (MVC) Eines der wichtigsten Muster im Umgang mit graschen Benuterober chen ist das a MVC-Muster. Es kommt in etwas abgewandelter Form auch in Cocoa und Cocoa Touch intensiv zum Einsatz (vgl. Abbildung 3 und 4).
Mediator Strategy
User action

Controller

Update

View Command Composite

Update

Notify

Model Observer

Abbildung 3: Cocoa-Version des MVC-Musters

In MVC wird zwischen drei Arten von Objekten unterschieden: Model-Objekte speichern Daten und bieten Manipulationsmethoden an. View-Objekte dienen zur Darstellung von Model-Daten. Controller-Objekte agieren als Vermittler zwischen Model- und View-Objekten. Die Cocoa-Version des MVC-Muster unterscheidet sich von der traditionellen Version insofern, als die Model-Komponente bei Anderungen nicht direkt die View-, sondern die Controller-Komponente benachrichtigt. Dieser Ansatz soll die Wiederverwendbarkeit von View- und Model-Objekten erhohen.
Strategy
User action

Controller

Update

View Composite

Update Notify

Model Observer

Get changed state

Abbildung 4: Traditionelle Version des MVC-Musters

15

Protocol Mit dem Protocol-Entwurfsmuster lassen sich Schnittstellen zur Kommunikation zwischen Objekten denieren. Die Unterstutzung von Protokollen wird von Objektive-C bereits als Spracheigenschaft mitgebracht. Das Java-Equivalent von Protocols sind Interfaces. Chain of Responsibility Die Zust ndigkeitskette ist ein Entwurfsmuster, das enge Kopplungen von Nachrichtena Sender und -Empf nger vermeidet. Objekte dieser Kette erhalten die Moglichkeit a Nachrichten zu verarbeiten oder weiterzuleiten. In UIKit wird dieses Prinzip bei der Verarbeitung von Ereignissen umgesetzt. Composite Das Composite-Muster vereint verwandte Objekte in eine umgekehrte Baumstruktur, um sie nach auen hin als ein einzelnes Objekt zu repr sentieren. Angewendet wird a dieses Muster in der View-Hierarchie (View Hierarchy). Eine View-Hierarchie deniert Beziehungen zwischen Views innerhalb eines Fensters. Das Fenster ist die Wurzel der Baumstruktur und ordnet alle eingeschlossenen Views in Form von Eltern-Kind-Beziehungen unter24 (siehe Abbildung 5).
Content view A C B D E A C superview E Content view

B subview D

Abbildung 5: Composite-Muster der View Hierarchie

Observer Dieses Muster kommt zum Einsatz um Objekte bei Status nderungen anderer Oba jekte zu informieren.

https://developer.apple.com/library/ios - Cocoa Application Competencies - View hierarchy (letzter Abruf: 22.09.2011)

24

16

Decorator Das Decorator-Muster bietet eine exible Alternative zur Vererbung. Es erlaubt das Hinzufugen von Funktionalit t zu Objekten, ohne deren Quelltext zu ver ndern. a a Dieses Muster bringt das Design-Prinzip Offen fur Erweiterungen, aber geschlossen ge genuber Ver nderungen zum Ausdruck. a Dekorierer umhullen Objekte, implementieren die gleiche Schnittstelle und delegie ren Aufrufe an das Original weiter. Vor oder nach dem Delegieren kann das neue Verhalten eingefugt werden. Zwei Anwendungen des Dekorierer-Musters sind Delegation und Categories: Delegation bedeutet, dass ein Objekt eine Referenz auf ein zweites h lt und in a bestimmten Situationen dessen Methoden aufruft. Delegation wird in Cocoa oft verwendet, um dem Entwickler das Ableiten von komplexen Objekten zu ersparen. Kategorien sind eine Objective-C-Spracheigenschaft, die es erlauben Methoden zu Klassen hinzuzufugen, ohne Subklassen ableiten zu mussen (s.a. 4.5.2 Kate gorien). Memento Das Memento-Muster erfasst und externalisiert einen internen Objektzustand, um ihn zu einem sp teren Zeitpunkt wiederherstellen zu konnen. a Mittels Archivierung lassen sich so Inhalte einzelner oder in Datenhaltungsklassen zusammengefasster Objekte uber die Applikationslaufzeit hinaus erhalten. Singleton Das Singleton-Muster beschreibt, dass es von einer Klasse nur eine einzige Instanz geben darf, die global erreicht werden kann. UIApplication ist eine Klasse, die von diesem Muster Gebrauch macht. (siehe Listing 1).
UIApplication * theApplication = [UIApplication sharedApplication];

Listing 1: Beziehen der Singleton-Instanz von UIApplication

17

4.3.2 Kernkompetenzen Dieser Abschnitt befasst sich mit Besonderheiten der Softwareentwicklung mit Cocoa (Touch). Fenster Objekt (Window object)25 [St10] a Ein Fenster repr sentiert einen rechteckigen, graphischen Inhalt auf dem Bildschirm, a der als Elternelement fur View-Objekte der Applikationen dient. In iOS haben Appli kationen im Normalfall nur ein Fenster, das sich uber die gesamte Bildschirm che a erstreckt, keine besonderen Ober chenmerkmale aufweist und vom Benutzer nicht a ver ndert werden kann. a View Objekt26 [St10] a Eine View ist ein Objekt, das sich selbst innerhalb der Fl che eines Fensters zeicha nen und auf Benutzeraktionen reagieren kann. Views konnen andere Views (Sub views) in sich aufnehmen, wodurch eine View Hierarchie entsteht (s.a. 4.3.1 CompositeEntwurfsmuster). Block Objekte (Block Objects)27 28 [St10] a Block Objekte sind eine Spracherweiterung fur C-basierenden Sprachen. Sie sind ge wohnlichen Funktionen sehr ahnlich, konnen aber neben ausfuhrbarem Code zus tzlich a den Inhalt von Stack- und Heap-Variablen zum Zeitpunkt der Block-Denition speichern. Block-Objekte lassen sich auch als Argumente an Methoden ubergeben. Listing 2 zeigt die Deklaration und Denition eines Blockes, der einen Ganzzahlwert als Argument erh lt und einen um 1 reduzierten Wert zuruck liefert. a
int (^oneFrom)(int); oneFrom = ^(int anInt) { return anInt - 1; };

Listing 2: Deklarieren und Erzeugen eines Blocks

https://developer.apple.com/library/ios - Cocoa Application Competencies - Window object (letzter Abruf: 22.09.2011) 26 https://developer.apple.com/library/ios - Cocoa Application Competencies - View object (letzter Abruf: 22.09.2011) 27 https://developer.apple.com/library/ios - Cocoa Application Competencies - Block object (letzter Abruf: 22.09.2011) 28 https://developer.apple.com/library/ios - Blocks Programming Topics (Abruf: 22.09.2011)

25

18

Animationen29 Animationen sind ein wesentlicher Bestandteil der graschen Ober che in iOS. Mit a deren Anwendung wird nicht nur darauf abgezielt, dem/der Benutzer/in ein besonderes Erlebnis beim Benutzen der Plattform zu bieten, sondern auch darauf, Verst ndnis fur unsichtbar ablaufenden Aktionen zu vermitteln. a Animationen werden in Cocoa und Cocoa Touch von Core Animation30 ausgefuhrt. Der Entwickler braucht lediglich Zielobjekt, Dauer und Art der Animation anzugeben. Er benotigt weder zus tzliche Schleifen oder Zeitgeber, noch muss er die Animationen a Bild fur Bild berechnen oder deren Fortschritt kontrollieren. In UIKit wird jede View von einer Core Animation-Ebene unterstutzt, die automatisch erzeugt wird wenn die View initialisiert wird. Diese Ebene ist so stark an die View gebunden, dass deren Methoden und Eigenschaften direkt uber die Klasse UIView erreicht werden konnen. Listing 3 demonstriert einen Aufruf einer View-Animation mit Block-Ubergabe, die eine View ausblendet, indem der Wert der Sichtbarkeit (Alpha) auf 0 reduziert wird.
[UIView animateWithDuration:0.25 animations:^{ aView.alpha = 0.0f; }];

Listing 3: Starten einer View-Animation

Collection-Klassen31 32 Eine Datenhaltungsklasse (Collection) ist eine Klasse, deren prim rer Zweck das a Speichern von Objekten in Feldern, Mengen oder Worterbuchern ist. Die prim ren a Collection-Klassen in Cocoa sind NSArray, NSSet und NSDictionary. Sie existieren in ver nderbaren (mutable) und unver nderbaren (immutable) Varianten und speichern a a Objekte, jedoch keine primitiven Datentypen.

https://developer.apple.com/library/ios - Cocoa Application Competencies - Animation (letzter Abruf: 23.09.2011) 30 https://developer.apple.com/library/mac - Core Animation Overview (Abruf: 23.09.2011) 31 https://developer.apple.com/library/mac - Cocoa Core Competencies - Collection (23.09.2011) 32 https://developer.apple.com/library/mac - Collections Programming Topics (23.09.2011)

29

19

Ereignisse (Events)33 Ereignisse in iOS repr sentieren z.B. das Beruhren des Bildschirms. Die Applikation a nimmt diese Ereignisse entgegen, kapselt sie als UITouch-Objekte und leitete sie an das aktive Fenster weiter. Das Fenster ubergibt diese Objekte an die Antworter-Kette (Responder Chain), in der sie nach unten durchgereicht werden, bis verarbeitet oder schlussendlich unbehandelt verworfen werden. Benachrichtigungen (Notications)34 [St10] a Notications ist die Umsetzung des Observer-Entwurfsmusters in Cocoa. Sie basiert auf dem Prinzip des Sendens von Nachrichten, mit der Besonderheit, dass der Sender vom Empf nger nichts wissen muss. a Das Kernstuck des Mechanismus ist das Benachrichtigungszentrum (Notication Cen ter), an das Nachrichten zur Verteilung gesendet werden konnen. Objekte, die vom Benachrichtigungszentrum informiert werden sollen, mussen sich zuvor fur Benach richtigungen eines bestimmten Typs registrieren. Archivierung35 Archivierung ist der Prozess, einzelne oder eine Gruppe von Objekten in eine Form zu konvertieren, in der sie abgespeichert, zwischen Applikationen transportiert und wieder rekonstruiert werden konnen. Property Lists36 Property Lists repr sentieren Hierarchien von Objekten, die zur sp teren Rekonstruka a tion als Dateien abgelegt werden konnen. Sie speichern einfache Daten wie Zeichen ketten oder Zahlenwerte, aber auch komplexere wie Collections in Form von XML-, JSON- oder Bin rdateien ab. a NIB-Dateien37 NIB-Dateien sind eine spezielle Art von Ressource-Dateien, um Benutzerober chen a von iOS- oder Mac OS X-Anwendungen zu speichern. Sie enthalten archivierte Objekt-Graphen von Fenster- und View-Objekten, die von der Applikation zur Laufzeit entpackt und geladen werden konnen.

33 34 35 36 37

https://developer.apple.com/library/ios - Cocoa Application Comp. - Events (23.09.2011) https://developer.apple.com/library/mac - Cocoa Core Comp. - Notication (23.09.2011) https://developer.apple.com/library/mac - Cocoa Core Comp. - Archiving (23.09.2011) https://developer.apple.com/library/mac - Cocoa Core Comp. - Property list (23.09.2011) https://developer.apple.com/library/mac - Cocoa Core Comp. - Nib le (23.09.2011)

20

4.3.3 Elemente der Benutzeroberche38 a Um mit relativ eingeschr nkten Eingabemethoden wie Tipp- oder Wischgesten auch a anspruchsvolle Aufgaben erledigen zu konnen, bedarf es an geeigneten Ober chea Elementen. Nachfolgend werden einige Elemente kurz vorgestellt, die im Schnittkraftmeister unver ndert oder in abgewandelter Form verwendet werden: a Label Dient der Anzeige von Texten und Beschriftungen. Eigenschaften wie Schriftart, Schriftfarbe, Ausrichtung, Hervorhebung und Schattierung konnen angepasst wer den. Image View Erlaubt das Anzeigen einzelner oder einer Abfolge von Graken. Button Ist eine Schalt che, die auf Antippen reagiert und Aktionen auslost. Anzeigetext, a Anzeigegrak und andere Darstellungsoptionen sind kongurierbar. Text Field Wird benutzt um Text uber eine virtuelle Tastatur einzulesen. Scroll View Kann Inhalte anzeigen, die groer sind als der zur Verfugung stehende Anzeigebe reich. Vergroern, Verkleinern und Verschieben des Inhalts wird durch bestimmte Gesten unterstutzt. Table View Zeigt eine einspaltige Tabelle mit beliebig vielen Zeilen an. Zellen konnen je gew hlter a Konguration einfugt, bearbeitet, verschoben und geloscht werden.

38

Basierend auf Beschreibungstexten der Interface Builder Object Library in Xcode

21

4.3.4 Game-Center Grundlagen39 Game-Center besteht aus drei Komponenten: Game-Center App, einer vorinstallierten Applikation, in der Benutzer/innen sich registrieren und anmelden konnen. Darin lassen sich Freundschaften verwal ten, Spiele, Spielst nde und Errungenschaften der Freunde einsehen und Eina ladungen zum gemeinsamen Spielen versenden. Game Kit API, der Prgrammierschnittstelle, die es Entwicklern erlaubt, GameCenter in ihren Applikationen einzubinden. Game-Center service, einem Online-Dienst von Apple, um Ranglisten und Erfolge zu speichern und die Automatische Zuteilung zu Mehrspieler-Spielen zu organisieren. Game Kit Game Kit ist ein Framework, das Objektive C-Klassen zum Entwickeln von gesellschaftlichen Spielen (Social Games) anbietet. Es unterstutzt drei verschiedene Tech nologien: Game-Center, Ger t-zu-Ger t Verbindungen (Peer-to-Peer Connectivity) und a a Sprachubertragung in Spielen (In-Game Voice). In Schnittkraftmeister wird ausschlie lich die Game-Center-Funktionalit t genutzt. a Die meisten Klassen in Game Kit verwenden die Game-Center-Dienste asynchron, d.h. Anfragen werden sofort abgeschickt, aber deren Antworten erst zu einem sp teren a Zeitpunkt, nach abgeschlossener Ubertragung empfangen. Zum Verarbeiten der Antworten muss der Entwickler Block-Objekte an die Game-Center-Methoden ubergeben. Bei Verwendung von Ranglisten (Leaderboards) und Erfolgen (Achievements) muss zudem bedacht werden, dass bei Datenubertragungen Netzwerkprobleme auftre ten konnen. Die Klassen GKScore und GKAchievement wurden bewusst NSCoding konform implementiert, um fur derartige F lle archivierbar zu sein. a

https://developer.apple.com/devcenter/ios/gamecenter - Game Center for Developers (letzter Abruf: 23.09.2011)

39

22

4.4 iOS Software Development Kit40

41

[St10] a

Zur Erstellung von iOS-Anwendungen stellt Apple das iOS SDK (Software Development Kit) zur Verfugung. Es enth lt Werkzeuge, Code und Informationen, um a Applikationen entwickeln, testen, ausfuhren und optimieren zu konnen. Das iOS SDK setzt sich aus folgenden Komponenten zusammen: Xcode Tools, bestehend aus Xcode, einer Integrierten Entwicklungsumgebung (IDE) und Instruments, einem Analyse-Werkzeug zum Messen von Ausfuhrungs geschwindigkeit und Ressourcenbeanspruchung von Applikationen. In Xcode enthalten ist ebenfalls der Interface Builder, eine Komponente zum visuellen Erstellen von graschen Benutzerober chen. a iOS Simulator, einer Anwendung um entwickelte Applikation anstatt auf einem Endger t direkt am Entwicklungscomputer testen konnen. a iOS Developer Library, einem Nachschlagewerk fur Klassen des SDK und deren Schnittstellen. Xcode unterstutzt das Erstellen von Projekten mit lauff higen Vorlagen fur verschiea dene Anwendungsgebiete. Sie stehen in Varianten je Zielplattform zur Verfugung und stellen gute Ausgangsbasen fur einen raschen Entwicklungsstart dar.

4.5 Programmiersprache
Objective C ist die native Programmiersprache der Cocoa-Frameworks. Sie basiert auf ANSI C und ist eine leistungsf hige Erweiterung dessen um Mittel der objektoriena tierten Programmierung. Quelltext in C, C++ und Objective C konnen frei gemischt 42 . und und zu einer ausfuhrbaren Anwendung kompiliert werden 4.5.1 Klassen43 Eine Klasse in Objective C besteht aus zwei Teilen, der Deklaration (Interface) und der Implementierung (Implementation). In der Deklaration werden Methoden und Variablen deklariert, sowie die Basisklasse speziziert. Der Implementierungsteil deniert deren Funktionalit t (siehe Listing 4). a
https://developer.apple.com/library/ios - iOS Overview (letzter Abruf: 20.09.2011) https://developer.apple.com/library/ios - iOS Technology Overview (letzter Abruf: 20.09.2011) 42 https://developer.apple.com/library/mac - Cocoa Core Comp. - Objective-C (24.09.2011) 43 https://developer.apple.com/library/mac - The Objective-C Programming Language (letzter Abruf: 24.09.2011)
41 40

23

@interface Person : NSObject { NSString * _name; NSNumber * _age; } - (void)sayHello; @end @implementation Person - (void)initWithName:(NSString *)name Age:(NSNumber *)age { _name = [name retain]; _age = [age retain]; } - (void)sayHello { NSLog(@"Hi! My name is %@ and I'm %d years old.", _name, _age); } - (void)dealloc { [_name release]; [_age release]; } @end [super dealloc];

Listing 4: Beispielklasse Person

4.5.2 Kategorien44 [St10] a In Objektive C steht neben der Ableitung eine weitere Moglichkeit zum Erweitern von Klassen zur Verfugung: Kategorien (Categories). Syntaktisch unterscheidet die Dekla ration einer Kategorie der einer Klasse dadurch, dass anstatt einer Oberklasse der Name der Kategorie angegeben wird. In Listing 5 wird die Klasse NSString um eine Methode erweitert, die eine neue Instanz mit dem gleichen Inhalt, jedoch in umgedrehter Reihenfolge zuruck liefert.
http://macdevelopertips.com/objective-c/objective-c-categories.html - Objective-C Categories (letzter Abruf: 24.09.2011)
44

24

@interface NSString (Reverse) // Methoden-Deklaration - (NSString *)reverseString; @end @implementation NSString (Reverse) // Methoden-Definition - (NSString *)reverseString { NSUInteger length; NSMutableString * reversedString; reversedString = [NSMutableString stringWithCapacity:length]; for (NSUInteger index = length-1; i >= 0; i--) [reversedString appendFormat:@"%C", [self characterAtIndex:index]]; } @end return reversedStr;

Listing 5: Kategorie zur Klasse NSString

4.5.3 Properties45 Properties sind ein Mechanismus zum einfachen Erzeugen von Getter- und SetterMethoden in Objective C. Sie konnen im Deklarationsteil von Klassen und Proto kollen mit dem Schlusselwort @property, zusammen mit einer optionalen Liste von Attributen, deklariert werden. Im Implementierungsteil der Klassen weist eine @synthesize- oder @dynamic-Direktive dem Compiler an, den Quellcode der Properties automatisch einzufugen. Mit Hilfe der Attributliste lassen sich Eigenschaften der Implementierung wie ThreadSicherheit, Methodennamen, Lese-/Schreibberechtigungen und Mechanismen der Speicherverwaltung steuern.

https://developer.apple.com/library/mac - The Objective-C Programming Language (letzter Abruf: 24.09.2011)

45

25

4.5.4 Nachrichten senden46 [St10] a Um in Objektive C eine Methode eines Objekts auszufuhren, sendet man ihm eine Nachricht. Der Ausdruck zum Senden von Nachricht wird von eckigen Klammern umschlossen (siehe Listing 6).
// Syntax [Empfnger Nachricht];

Listing 6: Senden einer Nachricht

4.5.5 Instanzen erzeugen47 [St10] a Das Erzeugen von Instanzen ist nicht in der Syntax von Objective-C integriert, sondern Bestandteil des Frameworks, aus dem die jeweilige Basisklasse stammt. Wird eine Klasse nicht von einer Basisklasse des SDK abgeleitet, muss ein eigener Erzeugungsmechanismus entwickelt werden. Viele Klassen leiten von der Basisklasse NSObject des Foundation Frameworks ab. Eine Instanz einer Klasse der NSObject Hierarchie wird zweistug erzeugt: Uber die Klassenmethode alloc wird Speicher angefordert und folglich mit der Methode init initialisiert. Erst dann darf die neue Instanz verwendet werden (siehe Listing 7).
// Erzeugen einer Instanz der Klasse NSObject NSObject * anObject = [[NSObject alloc] init];

Listing 7: Erzeugen einer Instanz

4.5.6 Instanzen zerstren47 [St10] o a NSObject deniert eine Methode dealloc, die beim Zerstoren einer Instanz aufgerufen wird und dafur genutzt werden sollte, alle Instanz-intern angeforderten Objekte frei zugeben. Diese Methode sollte niemals direkt aufgerufen werden (siehe Listing 4).

https://developer.apple.com/library/mac - Cocoa Core Competencies - Message (letzter Abruf: 24.09.2011) 47 https://developer.apple.com/library/mac - Cocoa Core Competencies - Memory management (letzter Abruf: 24.09.2011)

46

26

4.5.7 Speicherverwaltung48 Speicherverwaltung bezeichnet das Anfordern, Benutzen und Freigeben von Speicher, wenn dieser nicht mehr benotigt wird. Objective C bietet dafur zwei Modelle an: Garbage Collection Mit dieser Art der Speicherverwaltung beh lt das System den a Uberblick uber die reservierten Speicherbereiche und zerstort Objekte, die von kei nem anderen Objekt mehr benutzt werden. Garbage Collection steht auf der iOSPlattform allerdings nicht zur Verfugung. Reference Counting Dieses Modell wird von der Foundation-Klasse NSObject zusammen mit der Laufzeitumgebung angeboten. Jedes Objekt hat einen Z hler (Refea renzz hler) fur die von ihm abh ngigen Objekte, der bei der Erzeugung durch alloc a a mit 1 initialisiert wird. Mit einem Aufruf von retain kann dieser erhoht, und mit relea se verringert werden. Erreicht dieser Z hler den Wert 0, wird die Instanz zerstort. a In manchen Situationen ist es wunschenswert ein Objekt abtreten zu konnen, ohne dass es sofort freigegeben wird. Fur diesen Fall existiert der sogenannte Autore lease-Mechanismus. Er sorgt dafur, dass Objekte nach einem Aufruf der Methode autorelease an eine Instanz von NSAutoreleasePool ubergeben werden, welche die aus stehenden Aufrufe von release zu einem sp teren Zeitpunkt durchfuhrt49 . a Listing 8 veranschaulicht eine Form der Anwendung des Autorelease-Mechanismusses. Wurde anstatt autorelease der Aufruf release verwendet werden, wurde die Instanz vor Ruckgabe bereits zerstort werden.
- (NSObject *)produceObject { // Objekt erzeugen (Referenzzhler = 1) NSObject * anObject = [[NSObject alloc] init]; // Weitere Initialisierungsschritte ... [anObject prepareAnything]; // Freigabe vormerken (Referenzzhler unverndert) [anObject autorelease]; } // Objekt zurckliefern return anObject;

Listing 8: Demonstration des Reference Counting

https://developer.apple.com/library/mac - Cocoa Core Competencies - Memory management (letzter Abruf: 24.09.2011) 49 https://developer.apple.com/library/mac - Memory Mgmt. Programming Guide (24.09.2011)

48

27

4.6 Dev Center [St10] [Ali10] a


Die Webseite iOS Dev Center ist das zentrale Informationszentrum rund um die iOSEntwicklung. Sie ist erreichbar unter https://developer.apple.com/ios und bietet eine groe Sammlung an technischen Hilfsdokumenten und Beispielprojekten. Entwickler/innen konnen dieses Portal nutzen, um bezuglich der neuesten Technologi en und deren korrekten Anwendungen am Laufenden zu bleiben. 4.6.1 Entwicklerprogramme50
51

[Sad10]

Zum Testen von iOS Applikationen auf echten Endger ten und zur Veroffentlichung a uber den App Store ist eine Anmeldung zu einem iOS-Entwicklerprogramm notwen dig. Apple bietet spezielle Programme fur individuelle Entwickler, Firmen und Bil dungseinrichtungen an. Die Anmeldung ist grunds tzlich kostenpichtig, mit Ausa nahme des Programms fur Bildungseinrichtungen. 4.6.2 App-Verentlichung52 o Im Bereich iTunes Connect des iOS Dev Centers kann eine App zur Aufnahme in den App Store eingereicht werden. Hochgeladene Apps mussen jedoch einen Zulassungs prozess durchlaufen, fur dessen Absolvierung sie eine Reihe von Kriterien erfullen mussen. Eine Liste von Richtlinien (App Store Review Guidelines) ist ebenfalls auf dem Entwicklerportal einsehbar.

https://developer.apple.com/programs/which-program - Compare Developer Programs (letzter Abruf: 24.09.2011) 51 https://developer.apple.com/support/ios - iOS Developer Program (letzter Abruf: 24.09.2011) 52 https://developer.apple.com/appstore - App Store Resource Center (letzter Abruf: 24.09.2011)

50

28

5 Implementierung
5.1 Spielprinzip
Der Schnittkraftmeister ist ein Single Choice-Spiel. Als Fragestellungen werden Strukturen mit Belastungen angezeigt. Der Spieler erh lt drei Antwortmoglichkeiten mit a Verl ufen von internen Kr ften (Schnittreaktionen). a a Fur die Beantwortung der Fragestellungen sind keine Berechnungen notwendig, die richtige Losung kann durch Begutachten der eingezeichneten Verl ufe direkt aba gelesen oder durch Anwendung des Ausschlussverfahrens gefunden werden (siehe Abbildung 6). Das Ziel ist es, innerhalb des vorgegebenen Zeitrahmens moglichst schnell die richtigen Antworten zu nden, um Punkte zu sammeln. Je schneller eine richtige Antwort gegeben wird, desto mehr Punkte werden erzielt.

Abbildung 6: Fragestellung mit drei Antwortmoglichkeiten

Die Beispiele sind in mehrere Levels unterteilt. Wird eine falsche Antwort gegeben, ist das Spiel zu Ende und die Punkte des aktuellen Levels werden verworfen. Im Zweifelsfall hat der Spieler die Moglichkeit, die Zeit ablaufen zu lassen, um das Spiel mit dem derzeitigen Punktestand zu beenden [ZE11].

29

5.2 Entwicklungsumgebung
Schnittkraftmeister wurde mit iOS SDK 4.3 und Xcode 4.1 entwickelt. Als Ausgangspunkt diente die Projektvorlage Window-based Application, die eine XIB-Datei mit Fenster-Objekt und UIApplicationDelegate-Klasse bereitstellt. Sie kann als genereller Startpunkt fur jegliche Art von Projekten verwendet werden53 . 5.2.1 Projekteinstellungen Das Xcode-Projekt wurde fur die Ger te-Familie (Device Family) iPhone erstellt. Als a Zielplattform (Deployment Target) ist die fur Game-Center-Unterstutzung mindestens erforderliche iOS-Version 4.1 konguriert, wodurch verhindert wird, dass die Applikation auf alteren Software-Versionen installiert werden kann. Weiters ist in den Ein stellungen der Bau-Phasen (Build Phases) das Verlinken mit den Frameworks Foundation, GameKit, UIKit und System Conguration festgelegt. 5.2.2 Endgerte a Zum Ausfuhren der Applikation w hrend der Entwicklungszeit dienten sowohl der a iOS-Simulator, als auch zwei iOS-Ger te, ein iPhone 3GS und ein iPod touch der drita ten Generation. Durch das Testen auf echten Endger ten konnte einerseits laufend a sichergestellt werden, dass die Applikation die knappen Ressourcen der Hardware nicht erschopft und andererseits, dass die Gestaltung der Anwendungsober che in a Richtung optimaler Benutzerfreundlichkeit gesteuert werden kann. 5.2.3 Game-Center-Sandbox54 Um die Game-Center-Unterstutzung von Applikationen vor deren Auslieferung tes ten zu konnen, stellt Apple den Entwicklern eine Game-Center-Sandbox-Umgebung zur Verfugung. Sie verh lt sich transparent zum Live-System, hat aber einen gea trennten Datenbestand. Dadurch erhalten Entwickler/innen ein abgeschottetes Testsystem, ohne Gefahr zu laufen, Informationen von noch unveroffentlichten Anwen dungen preiszugeben.

http://developer.apple.com/library/ios - iOS Development Workow Guide (letzter Abruf: 24.09.2011) 54 https://developer.apple.com/devcenter/ios/gamecenter - Getting Started with Game Center (letzter Abruf: 24.09.2011)

53

30

5.3 Aufbau der Applikation


5.3.1 Komponenten Die Applikation besteht aus mehreren Komponenten, denen unterschiedliche Aufgabenbereiche zukommen: Application Delegate ApplicationDelegate ist eine Klasse, die auf Anderungen der Applikation reagiert. Sie aktiviert nach erfolgtem Anwendungsstart die Game-Center-Kommunikation und erzeugt die benotigten View Controller-Instanzen. Weiters stellt sie sicher, dass die Anwendung vor der Terminierung oder einem Wechsel in den Hintergrund in einen denierten Zustand gebracht wird. Menu-View-Controller Der MenuViewController ist fur die Startansicht der Applikation zust ndig. Er ermoglicht a dem Benutzer das Navigieren zu den Bereichen Spiel, Scores und Hilfe. Game-View-Controller Der GameViewController ist die Schnittstelle zwischen dem/der Spieler/in und der Spiellogik. Er ist verantwortlich fur das Starten des Spiels, Pr sentieren der Beispiele, a Entgegennehmen der Antworten und Berechnen der Punkte. Scores-View-Controller Der ScoresViewController ist fur die Anzeige der Bestenliste verantwortlich. Er kom muniziert mit dem Score Manager und zeigt die besten Spielergebnisse zusammen mit dem personlichen Punktestand des Benutzers an. Help-View-Controller Der HelpViewController dient dazu, Hilfestellung zum Spielablauf und der Thematik der Schnittkr fte zu geben. a Score Manager Der Score Manager verwaltet die Liste der besten Spielergebnisse und Spieler/innen, und gleicht diese mit dem Game-Center-Dienst ab.

31

5.3.2 Schnittstellen und Klassen Die Implementierung der Anwendung basiert auf mehreren individuellen Klassen der jeweiligen Teilbereiche, sowie einer Vielzahl von Standard-Klassen des SDK. Abbildung 7 bietet einen Uberblick uber die Klassen- und Schnittstellenstruktur der Applikation. Abgebildet sind ViewController, ScoreManager, Protokolle der wichtigsten Schnittstellen und weitere Hilfs- und Datenhaltungsklassen.
ApplicationDelegate
Class

GameManagement
Protocol

ExampleManagement
Protocol

ScoreManagement
Protocol

window navigationController gameViewController helpViewController scoresViewController scoreManager application:didFinishLaunchingWithOptions: applicationDidReceiveMemoryWarning: applicationDidEnterBackground:

gameRunning reset startGame commitSelection abortGame

currentLevelIndex currentExampleIndex currentLevel currentExample showNextExample

achievements scores personalBest reportScore submitAchievement

MenuViewController
Class

Level
Class

Example
Class

ScoreManager
Class

index playGame showScores showHelp showCredits hideCredits openInstituteURL examples shuffleExamples GameViewController
Class

index type answerIndex question options corrections shuffleOptions

gameCenterEnabled achievements scores personalBest tryToEnableGameCenter processGameCenterAuth reportScore submitAchievement

minPoints maxPoints maxTime exampleCount

interfaceState gameRunning currentLevelIndex currentExampleIndex currentLevel currentExample reset startGame commitSelection showNextExample abortGame setInterfaceState

NotificationView
Class

GCScoreManager
Class

LocalScoreManager scoresToSubmit
Class

showGameIntro showPlayHint showLevelCompled showGameCompleted showRateInvitation achievements scores personalBest isGCAvailailable authenticateLocalUser TimeIndicatorView
Class

achievements scores personalBest reportScore submitAchievement

synchronizeWithGC reportScore submitAchievement startReachabilityNotifier

ScoreWrapper
Class

stepCount HelpViewController
Class

reachabilityChanged

progress OptionScrollView
Class

isPersonalBest value Reachability


Class

infoScrollView

alias date formatedValue

ScoresViewController
Class

selectedOption touchesEnded:withEvent:

networkReachability currentReachabilityStatus

scoresTableView personalBestLabel showAchievements showLeaderboard tableView:cellForRowAtIndexPath:

HitTestView
Class

startNotifier stopNotifier

receiver hitTest:withEvent:

Abbildung 7: Klassendiagramm

32

5.3.3 Oberchengestaltung a Die Ober che der Applikation sollte an das Design des Web-basierenden Schnitta kraftmeisters erinnern (siehe Abbildung 8), weswegen versucht wurde, die Idee des virtuellen Notizblocks in das Design zu ubernehmen.

Abbildung 8: Screenshot der Online-Variante des Schnittkraftmeisters

Eine wei-karierte Grak auf einem Hintergrund mit Holz-Muster soll den Eindruck vermitteln, an einem virtuellen Tisch mit Notizblock zu sitzen. Auf virtuellem Papier angezeigte Inhalte sollen moglichst gezeichnet oder geschrieben wirken und Bedienelemente an Klebezettel und Papierstreifen erinnern (siehe Abb. 9 und 10) 55 . Bei der Wahl der Animationen in der Menu-Ansicht wurde auf moglichst naturlich wirkende Uberg nge zwischen den Teilbereiche der Applikation geachtet. Die Graa ken des Hintergrunds scheinen beim Navigieren unver ndert zu bleiben, w hrend a a dem Benutzer durch Bewegen der ubergeordneten Elemente des Arbeitsplatzes der Wechsel des Kontexts vermittelt wird.
55

Das Erstellen der Graken wurde durch die HTL-Ortwein unterstutzt.

33

5.4 Hauptkomponenten im Detail


5.4.1 Menu-View-Controller Der MenuViewController bedient sich den Methoden eines UINavigationControllers, um das Navigieren von der Menu-Ansicht auf die Hauptereiche zu organisieren. Tippt der Benutzer auf eine Schalt che, wird eine Instanz der geforderten ViewCona troller-Klasse erzeugt und auf den Navigationsstapel (NavigationStack) gelegt. Das Anzeigen dessen View f llt in den Aufgabenbereich des NavigationControllers. a

Abbildung 9: Views des Menu-View-Controllers

Die View des MenuViewControllers ubernimmt neben der Darstellung des Anwen dungsmenus auch das Anzeigen der an der Entwicklung beteiligten Personen. Eine Grak einer virtuelle Holzplatte dient als Anzeige che, worauf eine separate View a mit dem Bild des Papierblocks abgelegt ist (siehe Abbildung 9). Um die Namen der mitwirkenden Personen sichtbar zu machen, wird diese View nach Tippen auf das Info-Symbol zusammen mit den Schalt chen aus dem Bild animiert. In den andea ren Bereichen der Applikation wird aus Grunden der Speicherefzienz eine einzige, kombinierte Hintergrund-Grak verwendet. 5.4.2 Game-View-Controller Spieloberche a Eine Analyse der unterschiedlich groen Bilddateien ergab den Schluss, dass fur die Anzeige einer Beispiel-Grak mindestens 330 x 125 Pixel zur Verfugung ste hen sollten. Die 320 Pixel breite Bildschirm che der iOS-Ger te kann somit nur im a a Querformat sinnvoll genutzt werden.

34

Die gew hlte Anordnung der Elemente ist in Abbildung 10 dargestellt: Die obere a Bildschirmh lfte pr sentiert die Fragestellung, die Art des Beispiels und einen Ina a dikator fur die verbleibende Antwortzeit. Die untere Bildschirmh lfte besteht aus a der Anzeige des aktuellen Levels, Beispiels und Punktestands und einem virtuellen Papierstreifens, auf dem drei Antwortmoglichkeiten verschiebbar nebeneinander gereiht werden. Der Antwortstreifen kann durch eine Wischgeste horizontal bewegt werden. Tippt der/die Spieler/in auf den Bildschirm, wird die aktuell in der Bildschirmmitte bendliche Option als Losungsvorschlag angenommen.

Abbildung 10: Ober che des Game-View-Controllers a

Option Scroll View Das Aussehen und die Funktionalit t des virtuellen Papierstreifens kommen durch a Zusammenwirken mehrerer Klassen zustande: UIView Auf unterster Ebene dient eine View mit durchsichtigem Hintergrund als Grund che der anzuzeigenden Graken. a UIImageView Die auf der Grund che platzierten Image Views geben dem Papierstreifen sein a Aussehen. OptionScrollView Die Klasse OptionScrollView schliet die oben genannten Views in sich ein und erlaubt es, diese gemeinsam zu verschieben. Sie ist von UIScrollView abgeleitet und erweitert diese um zwei Aufgaben: Feststellen der ausgew hlten Antwortmoglichkeit a Weiterleiten der Beruhrungsereignisse zur Antwortbest tigung a

35

Hit Test View Um einen Einrast-Effekt (Paging) zu erzielen, ist die Groe der Scroll View gleich der Groe einer Antwort-Image View. Hierbei tritt jedoch ein Problem auf: Der Inhalt der Scroll View l sst sich nur bewegen, wenn der/die Spieler/in innerhalb des aufgea spannten Rechtecks zu streichen beginnt. Da sich der Streifen jedoch weit uber diese Abmessungen hinaus erstreckt, resultiert hieraus ein ungewohnliches Verhalten. Als Abhilfe wurden links und rechts der ScrollView Instanzen der speziell dafur erstellten Klasse HitTestView platziert, die sich bis zum Bildschirmrand erstrecken und jedes Beruhrungsereignis an die Option Scroll View weiterleiten (s. Listing 9).
@implementation HitTestView @synthesize scrollView; - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { if (scrollView.userInteractionEnabled && [self pointInside:point withEvent:event]) { return scrollView; } return nil; } @end

Listing 9: Implementierung der Hit-Test-View

Time Indicator View Die Klasse TimeIndicatorView implementiert einen Indikator fur die verbleibende Zeit zum Beantworten einer Fragestellung. Sie besteht aus zehn Balkengraken, die mit fortschreitender Zeit aufeinander folgend erblassen. Der Game-View-Controller w hlt a als Intervall seines Countdown-Zeitgebers einen von der Balken-Anzahl abh ngigen a Wert und setzt den Fortschritt bei jedem Auslosen um eine Stufe weiter. Notication View Die Klasse NoticationView kapselt notwendige Aktionen zum Anzeigen von Nachrichten an den/die Spieler/in, um Quelltext an verschiedenen Stellen der Klasse GameViewController zu reduzieren. Sie wird an oberster Ebene der Spielober che plata ziert und ist generell durchsichtig. Es entsteht keinerlei Beeintr chtigung, da durch a

36

das Prinzip der Zust ndigkeitskette56 alle Beruhrungsereignisse durchgereicht wera den. Kongurationsdateien Entsprechende Dateinamen, kombiniert mit einer besonderen Verzeichnisstruktur, wurden eine einfache Implementierung zum Laden der Beispiel-Graken zulassen. Um jedoch gegenuber zukunftigen Anderungen exibel zu sein, wird die Zuord nung von Grakdateien zu Beispielen von Kongurationsdateien (Property Lists57 ) eingelesen. Eine ubergeordnete Kongurationsdatei deniert die Anzahl der Levels und deren Speicherort, sowie Zusatzinformationen wie beispielweise Zeitlimit, Punktezahl, oder Anzahl der zu verwendenden Beispiele. In den Level-Verzeichnissen benden sich spezische Kongurationsdateien, welche fur jedes Beispiel Fragetyp, Dateinamen, die richtige und zwei oder mehrere falsche Antworten angeben. Zufallsgenerator Zum Randomisieren der Beispiele wurde die Klasse NSMutableArray mittels Kategorie um eine Methode shufe erweitert. Diese durchl uft das Feld und vertauscht a das aktuelle mit einem anderen Element an zuf lliger Position (siehe Listing 10). a
@interface NSMutableArray (Shuffle) - (void)shuffle; @end @implementation NSMutableArray (Shuffle) - (void)shuffle { NSUInteger index, count = self.count; for (index = 0; index < count; index++) [self exchangeObjectAtIndex:index withObjectAtIndex:(arc4random() % count)]; } @end

Listing 10: Erweiterung der Klasse NSMutableArray um die Methode shufe

56 57

siehe auch 4.3.2 Kernkompetenzen - Ereignisse s.a. 4.3.2 Kernkompetenzen - Property Lists

37

5.4.3 Scores-View-Controller Die View des Scores-View-Controllers zeigt ein Label mit dem personlichen Punktere kord und eine Bestenliste in Form einer Table View an (siehe Abbildung 11).

Abbildung 11: Ober che des Highscores-View-Controllers a

Table View Die Instanz der Klasse UITableView58 , pr sentiert eine Liste der besten Spieler/ina nen. Um die dafur erforderlichen Daten bereitstellen zu konnen, implementiert der Scores-View-Controller das Protocol UITableViewDataSource. In den vorgeschriebenen Methoden werden Tabellen-Zellen erzeugt und mit Daten aus dem ScoreManager befullt. Die efziente Implementierung der Table View fordert nur so viele Zellen an, wie tats chlich gleichzeitig angezeigt werden konnen. Sobald eine Zelle w hrend dem a a Scrollen aus dem sichtbaren Bereich verschwindet, steht sie zur Wiederverwendung in einem Zellen-Pool bereit. Observer Anstatt regelm ig die aktuellen Punktest nde abzufragen, verwendet der Scoresa a View-Controller das Observer-Entwurfsmuster59 , um uber Anderungen im Score Mana ger informiert zu werden. Die Verteilung dieser Aktualisierungsbenachrichten wird uber das Notication Center abgewickelt.
58 59

s.a. 4.3.3 Elemente der Benutzerober che - Table View a s.a. 4.3.1 Entwurfsmuster - Observer

38

5.4.4 Score Manager Eine Instanz der Klasse ScoreManager verwaltet die erzielten Spielergebnisse und steuert die Kommunikation mit dem Game-Center-Dienst. Sie wird beim Starten der Applikation erzeugt und nimmt sofort Verbindung mit dem Dienst auf. Bei bestehender Internetverbindung werden erzielte Ergebnisse unmittelbar nach Spielende ubermittelt. Tritt jedoch ein Fehler bei der Ubermittlung auf oder ist die Verbindung zum gegebenen Zeitpunkt unterbrochen, speichert der Score Manager die Spielst nde fur erneute Ubertragungsversuche zwischen. a Archivierung Die Warteschlange der zu ubertragenden Spielst nde ist ein Feld des Typs NSAra ray60 . Mit Hilfe der Klasse NSKeyedArchiver kann dieses Feld in einen Datenstrom umgewandelt und auf den Festspeicher archiviert werden (siehe Listing 11).
[NSKeyedArchiver archiveRootObject:scores toFile:scores.arc];

Listing 11: Archivierung eines Objekts

Bei jedem Applikationsstart wird aus diesem Archiv mit Hilfe der Klasse NSKeyedUnarchiver wieder eine NSArray-Instanz erzeugt (siehe Listing 12).
scores = [NSKeyedUnarchiver unarchiveObjectWithFile:scores.arc] retain];

Listing 12: Wiederherstellung eines Objekts aus einem Archiv

Game-Center-Kommunikation Die Kommunikation mit dem Game-Center-Dienst l uft haupts chlich asynchron ab. a a 61 ist es moglich, ohne Durch umfassende Nutzung der Objective C Block-Technologie umst ndliche Callback-Mechanismen Code im aufrufenden Kontext erst beim Eina treffen der Antwort auszufuhren. Listing 13 demonstriert vereinfacht welche Zeilen Quelltext notwendig sind, um ein Spielergebnis abzuschicken und nach erfolgreicher Ubertragung aus einer Warteschlange zu loschen.
60 61

s.a. 4.3.2 Kernkompetenzen - Collection Klassen s.a. 4.3.2 Block Objekte

39

GKScore * score = [scoresToSubmit objectAtIndex:0]; [score reportScoreWithCompletionHandler:^(NSError * error) { if (error == nil) [scoresToSubmit removeObject:score]; }];

Listing 13: Berichten eins Spielstands

Internetkonnektivitt a Die Klasse Reachability nutzt Funktionalit t aus dem System Conguration Framework a um festzustellen, ob eine aktive Internetverbindung besteht. Bei Anderungen in der Netzwerkkonnektivit t informiert sie den Score Manager, welcher bei Bedarf beginnt a die Ergebnis-Warteschlange abzuarbeiten. Listing 14 zeigt eine vereinfachte Methode zum Reagieren auf Anderungen der Netzwerkkonnektivit t. a
- (void)reachabilityChanged:(NSNotification *)note { // detect current status Reachability * currentReachability = note.object; NetworkStatus networkStatus = currentReachability.currentReachabilityStatus; switch (networkStatus) { case NotReachable: break; case ReachableViaWWAN: case ReachableViaWiFi: [self synchronizeWithGameCenter]; break; }

Listing 14: Reagieren auf Konnektivit ts nderungen a a

40

5.5 Implementierungsmerkmale
In diesem Abschnitt werden einige Besonderheiten der Implementierung des Schnittkraftmeisters mit Cocoa und Cocoa Touch hervorgehoben. 5.5.1 Animationen Der Groteil des Bedarfs an Animationen ergibt sich durch das Aus- und Einblenden der Bedienelemente bei Uberg ngen zwischen View-Controllern. a Listing 15 zeigt einen Ausschnitt der Klasse MenuViewController, der einen Ubergang auf den Scores-Bereich bewerkstelligt. Der Methode animateWithDuration:completion: wird ein Animationsblock ubergeben, in dem die Positionen der Bedienelemente auf einen Bereich auerhalb der Anzeige che gesetzt werden. Die Core-Animationa Logik fuhrt daraufhin automatisch die notwendigen Aktionen durch, um die Ele mente innerhalb des angegebenen Zeitraums von ihren derzeitigen Positionen auf die Zielpositionen zu verschieben. Der Komplettierungsblock, welcher nach Ab schluss der Animationen ausgefuhrt wird, vollzieht schlussendlich den Ubergang auf den Scores-Bereich. Die Bedienelemente des Scores-View-Controllers sind bei einem Ubergang ausgeblendet. Sobald dessen View sichtbar wird, startet das Einblenden der Elemente nach dem gleichen Prinzip.
- (IBAction)showScores { [UIView animateWithDuration:kAnimationDuration animations:^ { [self moveInterfaceControlsOut]; } completion:^(BOOL finished) { [navigationController pushViewController:scoresViewController animated:NO]; }]; } - (void)moveInterfaceControlsOut { _showCreditsButton.alpha = 0.0; _headlineImageView.frame = CGRectMake(-608, -109, 405, 147); _playGameButton.frame = CGRectMake(-120, 450, 100, 100); _showScoresButton.frame = CGRectMake( 80, 450, 100, 100); _showHelpButton.frame = CGRectMake( 320, 450, 100, 100); }

Listing 15: Animiertes Navigieren von Menu zu Scores

41

Im Game-View-Controller wird zwischen mehreren Zust nde der Benutzerober che a a unterschieden, wodurch die Komplexit t zum Ein- und Ausblenden der Bedienelea mente beachtlich ansteigt. Um diesen Anforderungen gerecht zu werden, wird ein anderer Ansatz verwendet. Fur alle Ober chenlemente existieren Merker, die zum a Denieren der Ober chenzust nde verwendet werden (siehe Listing 16). a a
typedef enum { vfBackButton vfScoresButton vfRestartButton vfGameOverImageView ... } VisibilityFlags; typedef enum { ... isGameOver = vfBackButton | vfScoresButton | vfRestartButton ... ... } InterfaceState;

= = = =

0x1, 0x2, 0x4, 0x8,

Listing 16: Aufz hlungstypen fur Sichtbarkeiten und Zust nde a a

Die Methode setInterfaceToState: wertet den erhaltenen Ober chenzustand aus und a passt die Element-Eigenschaften innerhalb eines Animationsblocks daran an. Damit l sst sich das Animieren zu einem bestimmten Zustand mit nur einem Methodena aufruf bewerkstelligen (siehe Listing 17).
- (void)answeredIncorrect { ... [self setInterfaceToState:isGameOver]; ... } - (void)setInterfaceToState:(InterfaceState)interfaceState { void (^animations)(void) = ^ { if (interfaceState & vfBackButton) _backButton.frame = CGRectMake( -6, 15, 80, 45); else _backButton.frame = CGRectMake(-100, 15, 80, 45); ... }; } [UIView animateWithDuration:0.25 animations:animations];

Listing 17: Animieren in einen Ober chenzustand a

42

5.5.2 View-Controller-Rotation Ein View-Controller erh lt die Moglichkeit bei Ver nderung der Ger teausrichtung eia a a ner Rotation der Anzeige zuzustimmen. Da Schnittkraftmeister nur im Querformat sinnvoll benutzt werden kann, retournieren alle View-Controller auf einen Aufruf der Methode shouldAutorotateToInterfaceOrientation: nur dann YES, wenn die aktuelle Ger telage dem Wert UIInterfaceOrientationLandscapeLeft oder UIInterfaceOrientationa LandscapeRight entspricht. Das Rotieren der Anzeige und des Koordinatensystems passiert automatisch, sodass keine weiteren Anpassungen im Quelltext notwendig sind. 5.5.3 Mehrsprachigkeit Die Benutzerober che des Schnittkraftmeisters erscheint auf Ger ten mit deutscher a a Spracheinstellung in Deutsch, ansonsten in Englisch. Fur diese Unterstutzung der Mehrsprachigkeit wurde auf Internationalisierungsmechanismen von Xcode zuruck gegriffen. Von einer mehrsprachigen Dateien wird je Sprache eine Kopie erzeugt und in einem entsprechenden Unterverzeichnis abgelegt. Diese Kopien konnen an die gegebenen Sprachen angepasst werden. Zur Applikationslaufzeit werden die Dateien basierend auf der Spracheinstellung des Systems automatisch aus den jeweiligen Unterverzeichnissen geladen. Xcode zeigt mehrsprachige Dateien im Projektnavigator gruppiert an (siehe Abbildung 12).

Abbildung 12: Internationalisierung in Xcode

Das Internationalisieren von Zeichenketten funktioniert mit einem Schlussel/Wert Verfahren. Im Quelltext werden anstatt der endgultigen Zeichenketten Schlusseltexte verwendet, fur die in einer separaten Datei Abbildungen auf die tats chlichen Werte a gespeichert sind. Diese Datei kann in mehreren Sprachversionen existieren.

43

5.5.4 Zeichenkettenkonstanten anstatt -literale [St10]. a Um den Aufwand zum Vergleichen von Zeichenketten minimal zu halten, wurden konstante Zeichenketten, speziell bei der Benutzung des Notication Centers, weitestgehend in eine separate Datei ausgelagert und als Konstanten deniert. Da diese Zeichenketten folglich im gesamten Adressraum nur einmal vorkommen, kann die Uberprufung auf Gleichheit im besten Fall schon nach dem Vergleich der Zeiger Adresse abgeschlossen werden (siehe Abbildung 18).
// Constants.h extern NSString * const kLeaderboardChangedNotificationName; // Constants.m NSString * const kLeaderboardChangedNotificationName = @"kLeaderboardChangedNotificationName"; // ScoresViewController.m [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(leaderboardChanged:) name:kLeaderboardChangedNotificationName object:nil]; // ScoreManager.m [[NSNotificationCenter defaultCenter] postNotificationName:kLeaderboardChangedNotificationName object:self];

Listing 18: Verwendung von Zeichenketten-Konstanten

5.5.5 Lazy Memory Allocation Da Speicher auf mobilen Ger ten knapp ist und jede Speicheranforderung Rechena zeit benotigt, ist es besonders wichtig, einerseits sparsam mit Speicher umzugehen, jedoch andererseits nicht unnotig viele Speicheranforderungen und -freigaben zu produzieren. In der Entwicklung des Schnittkraftmeisters wurde deshalb auf ein Konzept genannt Lazy Allocation62 zuruckgegriffen. Hierbei wird der getter-Teil von Eigenschaften (Pro perties) manuell implementiert und mit einer Abfrage versehen, die die Erzeugung der verborgenen Instanz bis zum ersten Lesezugriff hinauszogert (siehe Listing 19).

https://developer.apple.com/library/ios - Memory Usage Performance Guidelines (letzter Abruf: 24.09.2011)

62

44

@synthesize scoresViewController; - (ScoresViewController *)scoresViewController { if (scoresViewController == nil) { scoresViewController = [[ScoresViewController alloc] initWithNibName:nil bundle:nil]; ... } } return scoresViewController;

Listing 19: Demonstration des Lazy Memory Allocation Konzepts

Zus tzlich zu dieser Manahme sorgt die Methode applicationDidReceiveMemoryWara ning: dafur, dass bereits erzeugte View-Controller bei Speicherknappheit zerstort wer den, wenn diese nicht gerade am Navigationsstapel liegen (siehe Listing 20).
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { ... if (scoresViewController != nil && ![[navigationController viewControllers] containsObject:scoresViewController]) } self.scoresViewController = nil; ...

Listing 20: Freigabe einer View-Controller-Instanz

45

6 Diskussion
Allgemein Entwickler/innen von Smartphone Applikationen haben einen Vorteil, wenn sie die Zielplattform auch von der Anwenderseite kennen. Dadurch sollten sie uber g ngige a Bedienkonzepte Bescheid wissen und eine Vorstellung davon haben, wie, wann und in welchen Situationen die eigene Applikation dem Anwender nutzlich sein konnte. Weiters sollten sie dadurch in der Lage sein, ihre Kenntniss der zur Verfugung ste henden Ober chenelemente besser in die Planung der Implementierung einieen a zu lassen. Entwicklungsumgebung Xcode 4 ist sehr gut auf die Entwicklung mit Objective C und Cocoa (Touch)/UIKit abgestimmt. Die ausgezeichnete Einbindung der Dokumentation und ein ebenso perfektes Zusammenspiel zwischen IDE, iOS-Simulator und Performance-Werkzeug ermoglichen ein reibungsloses Entwickeln von iOS-Applikationen. Implementierung In der Implementierung des Schnittkraftmeisters ist es gelungen, die Applikation haupts chlich auf Komponenten des UIKit- und des Foundation-Frameworks zu a stutzen. Das Verwenden dieser komfortablen, hochabstrahierten Schnittstellen wirkt sich sehr positiv auf Umfang, Lesbarkeit und Verst ndlichkeit des Quelltextes aus. a Zudem unterstutzen die aussagekr ftigen Methodennamen der Cocoa (Touch)-Klassen a und das strenge Einhalten der Entwurfsmustern diese Charakteristika ungemein. Spiel Die Ober che der Applikation ist nach dem Motto Weniger ist mehr einfach gea halten. Sie besteht aus den Ansichten Spiel und Scores und Hilfe. Der Bereich Spiel enth lt nur essentielle Ober chenelemente, die neben dem Anzeia a gen von Punktestand, Spielfortschritt und Restzeit das Starten und Abbrechen des Spiels, sowie das Beantworten der Fragestellungen ermoglichen. Die Beispiel-Graken auf dem Antwortstreifen wurden so platziert, dass neben der ausgew hlten auch ein Teil der benachbarten Antwortmoglichkeit sichtbar bleibt. a Dadurch soll auf einen Blick erkennbar gemacht werden, dass es sich beim Antwortstreifen um eine bewegliche Komponente handelt.

46

Ein Kritikpunkt an der einfach gehaltenen Ober che ist, dass zum Best tigen der a a Auswahl auf eine separate Schalt che verzichtet wurde. Die Tatsache, dass dafur a ein erneutes Tippen auf den Antwortstreifen notwendig ist, entsprich nicht dem Konzept einer intuitiven Bedienbarkeit. Um Unklarheiten zu beseitigen wird deshalb bei erstmaligem Spielstart eine kurze Spielanleitung eingeblendet. Ein weiterer Kritikpunkt betrifft das Hinweisen auf falsche Antworten. Zum Erzielen eines Lerneffekts sollte auch eine Begrundung fur die Korrektheit der richti gen, bzw. fur die Inkorrektheit der falschen Antwortmoglichkeiten angezeigt wer den. Da diesem Aspekt bei der Erstellung des Beispiel-Bestands wenig Aufmerksamkeit geschenkt wurde und das nachtr gliche Anfertigen von Korrekturgraken a fur alle Beispiele einen zu groen Aufwand darstellen wurde, wurde eine Kompro misslosung angestrebt: Vor dem ersten Level muss ein Einfuhrungslevel absolviert werden, das aus einigen wenigen Beispielen besteht. Bei Falschantworten werden Korrektur-Graken mit kurzen Erkl rungen auf den Antwortmoglichkeiten eingea blendet, sodass der Spieler den Fehler nachvollziehen kann. Game-Center Das Vergleichen der erzielten Punktest nde mit anderen Spielern ist ein wichtia ger Faktor fur den Erhalt des Spielspaes und der Motivation. Durch die Einbin dung der Game-Center-Programmierschnittstelle kann Schnittkraftmeister von dieser Moglichkeit protieren. Ein Nachteil von Game-Center ist, dass dessen Einsatz auf Applikationen der Plattform iOS beschr nkt ist. a App Store Der Vertrieb von Applikationen uber den Apple App Store bringt einige Vorteile mit sich. So konnen Benutzer/innen z.B. darauf vertrauen, nur streng auf Qualit t und a Korrektheit kontrollierte Software zu beziehen. Als weiterer Vorteil kann genannt werden, dass dieser einheitlicher Vertriebsweg auch eine zentrale Verteilung von Softwareaktualisierungen anbietet. Die Verwendung des App Stores hat jedoch auch Nachteile, z.B. dass bei mehr als 400.000 Applikationen63 weniger popul re Apps schnell in der Menge untergehen a und ubersehen werden.

http://www.apple.com/pr - Apple Press Info - App Store Downloads Top 15 Billion (letzter Abruf: 24.09.2011)

63

47

Literatur
[Ali10] M. Ali. Advanced IOS 4 Programming: Developing Mobile Applications for Apple IPhone, IPad, and IPod Touch. John Wiley & Sons, 2010. isbn: 9780470971239. url: http://books.google.at/books?id=_yU1XDHBAF8C. Martin Ebner und Andreas Holzinger. Successful implementation of usercentered game based learning in higher education: An example from civil engineering . In: Computers & Education 49.3 (2007), S. 873 890. issn: 03601315. doi: 10.1016/j.compedu.2005.11.026. url: http://www.sciencedi rect.com/science/article/pii/S0360131505001910.

[EH07]

[Sad10] E. Sadun. Das groe iPhone Entwicklerbuch: Rezepte fur Anwendungsprogram mierung mit dem iPhone SDK. Apple Software. Addison Wesley Verlag, 2010. isbn: 9783827329172. url: http : / / books . google . at / books ? id = c4yrL NkriewC. [St 10] a M. St uble. Programmieren fur iPhone und iPad: Der Einstieg in die Appa Entwicklung fur das iOS 4. Dpunkt.Verlag GmbH, 2010. isbn: 9783898646895. url: http://books.google.com/books?id=dTO4cQAACAAJ. A.S. Tanenbaum. Moderne Betriebssysteme. Pearson Studium. Pearson Studium, 2009. isbn: 9783827373427. url: http://books.google.com/books?id= Wbxqf3eujtAC. J. Zechner und M. Ebner. Playing a game in civil engineering - The Internal Force Master for Structural Analysis . In: Interactive Collaborative Learning (ICL), 2011 14th International Conference on. Sep. 2011, S. 417 422. doi: 10.1109/ICL.2011.6059618.

[Tan09]

[ZE11]

48