Inhaltsverzeichnis

Alle Kapitel aufklappen
Alle Kapitel zuklappen
Geleitwort
17
Vorwort
19
1 Hello iPhone
23
1.1 Voraussetzungen
24
1.1.1 Das SDK und die Entwicklerprogramme
25
1.1.2 Der Simulator
26
1.1.3 Test der Arbeitsumgebung
28
1.2 App geht’s
33
1.2.1 Ein neues Projekt
34
1.2.2 Sehr verbunden
43
1.2.3 Netzwerk und Ausgabe
48
1.2.4 Test auf einem Gerät
50
1.2.5 Entwicklerzertifikat und Entwicklungsprofile
51
1.2.6 Apps mit speziellen Funktionalitäten
55
1.3 Zurück auf Los: Swift
57
1.4 Zusammenfassung
61
2 Die Reise nach iOS
63
2.1 Objektorientierte Programmierung
64
2.1.1 Objekte und Abstraktion
66
2.1.2 Vererbung
68
2.1.3 Überschreiben von Methoden und spätes Binden
71
2.1.4 Objektorientierung in Objective-C
72
2.1.5 Die Architektur von iOS-Programmen
80
2.2 Hefte raus, Klassenarbeit!
82
2.2.1 Controller und View in der Praxis
84
2.2.2 Modellbau
91
2.2.3 Initializer und Methoden
97
2.2.4 Vererbung
107
2.2.5 Kategorien
119
2.2.6 Protokolle
124
2.2.7 Vorwärtsdeklarationen
125
2.2.8 Kommunikation zwischen den Schichten
126
2.2.9 Delegation
132
2.2.10 Key-Value-Coding
140
2.3 Speicherverwaltung und Propertys
142
2.3.1 Stack und Heap
143
2.3.2 Starke und schwache Referenzen
145
2.3.3 Autoreleasepools
148
2.3.4 Propertys und Accessoren
149
2.4 In den Tiefen der Speicherverwaltung
155
2.4.1 Manuelles Referenzzählen
155
2.4.2 Die Speicherverwaltungsregeln für das manuelle Referenzzählen
159
2.4.3 Autoreleasepools
165
2.4.4 Der Referenzzähler
168
2.4.5 Automatisches Referenzzählen
169
2.4.6 Weakie und die starken Zeiger
169
2.4.7 Einzelgänger
173
2.4.8 Migration bestehender Projekte
175
2.5 Das Foundation-Framework
179
2.5.1 Mutables und Immutables
179
2.5.2 Elementare Klassen
182
2.5.3 Collections
189
2.6 Blöcke
193
2.6.1 Rückruffunktionen
197
2.7 Namenskonventionen
200
2.8 Swift
201
2.8.1 Ab auf den Spielplatz
203
2.8.2 Variablen
204
2.8.3 Konsolen-Ausgabe mit »println«
206
2.8.4 Tupel
206
2.8.5 Optionals
207
2.8.6 Funktionen
208
2.8.7 Klassen und Objekte
209
2.8.8 Propertys
211
2.8.9 Generics
212
2.8.10 Speicherverwaltung
213
2.9 Zusammenfassung
214
3 Sehen und anfassen
217
3.1 Eigene View-Klassen in Cocoa Touch
217
3.1.1 View-Geometrie
227
3.1.2 Zeichnen in Cocoa Touch
229
3.1.3 Zeitberechnung
238
3.1.4 View-Erzeugung über Storyboards
241
3.1.5 Aktualisierung der Zeitanzeige
244
3.1.6 Wiederverwendbarkeit von Views
246
3.1.7 Zeichenfarbe festlegen
249
3.2 Views und Viewcontroller
252
3.2.1 Outlets
253
3.2.2 Outlet-Collections
257
3.2.3 Containerviews
259
3.2.4 View-Hierarchien
260
3.2.5 Actions
261
3.2.6 Ereignisse
266
3.2.7 Control-Zustände und Buttons
270
3.2.8 Touch-A, Touch-A, Touch Me
273
3.2.9 Übergänge
288
3.2.10 Ein kleines Intermezzo über Labels
293
3.2.11 Objekte mit beliebigen Klassen im Storyboard
295
3.2.12 Benutzerdefinierte Laufzeitattribute
296
3.2.13 Der Lebenszyklus eines Viewcontrollers
297
3.2.14 Speicher- und Ressourcenverwaltung des Viewcontrollers
300
3.3 Lokale Benachrichtigungen
301
3.3.1 Benachrichtigungen versenden
302
3.3.2 Anmeldung erwünscht
307
3.3.3 Benachrichtigungen verarbeiten
309
3.4 Let’s do the Swift
315
3.4.1 Projektmodernisierung
315
3.4.2 Gemischtes Doppel
318
3.4.3 Von Objective-C nach Swift
319
3.4.4 Propertys konvertieren
324
3.4.5 Alertcontroller
327
3.4.6 Main-Funktion und Storyboard
330
3.5 Eine App für alle
331
3.5.1 Das Retina-Display
333
3.5.2 Der Startbildschirm
337
3.5.3 Von Pixeln und Punkten
339
3.5.4 Sprachkursus für die App
340
3.5.5 Es funktioniert nicht
345
3.5.6 Unterstützung älterer iOS-Versionen
347
3.5.7 Base-Internationalisierung ausschalten
350
3.5.8 Universelle Apps
352
3.6 Geräteausrichtungen, Autosizing und Autolayout
354
3.6.1 Flexible Views dank Autosizing
355
3.6.2 Autolayout
361
3.6.3 Restriktionen im Interface-Builder festlegen
361
3.6.4 Größenklassen
367
3.6.5 Autolayout und Lokalisierung
373
3.6.6 Ein komplexes Beispiel für Autolayout
377
3.7 Fehlersuche
384
3.7.1 Logging
385
3.7.2 Der Debugger
386
3.7.3 Breakpoints verwalten
391
3.7.4 Die Debugger-Konsole
393
3.7.5 View-Debugging
400
4 Alles unter Kontrolle
403
4.1 Viewcontroller, XIBs und Storyboards
403
4.1.1 Erstellung von Viewcontrollern über XIB-Dateien
404
4.1.2 Applikationsinitialisierung
407
4.1.3 Storyboards
408
4.1.4 Modale Dialoge
416
4.1.5 Pop-over
421
4.1.6 Übergänge
423
4.2 Der Navigationcontroller
426
4.2.1 Viewcontroller anzeigen und entfernen
427
4.2.2 Die Navigationsleiste
428
4.2.3 Der Zurück-Button
431
4.2.4 Gehe drei Felder zurück
432
4.2.5 Die Werkzeugleiste
435
4.3 Navigation- und Pop-over-Controller in der Praxis
437
4.3.1 Navigationcontroller anlegen
440
4.3.2 Einen Dialog für die Einstellungen gestalten
443
4.3.3 Früher war alles besser …
446
4.3.4 Einstellungen dauerhaft speichern
448
4.3.5 Storyboard lokalisieren
452
4.3.6 Anpassung an das iPad
456
4.4 Der Splitviewcontroller
458
4.4.1 Das Splitviewcontroller-Delegate
459
4.4.2 Eine Projektvariante erstellen
461
4.4.3 Rotationsverhalten für einzelne Viewcontroller ändern
464
4.4.4 Anlegen eines Splitviewcontrollers
465
4.4.5 Autolayout-Restriktionen per Programmcode erstellen
467
4.4.6 Anzeige des Masters
474
4.5 Der Tabbarcontroller
475
4.5.1 Aufbau einer Reiternavigation
475
4.5.2 Plaketten
477
4.5.3 Für ein paar Controller mehr
478
4.6 Der Page-Viewcontroller
482
4.6.1 Einen Page-Viewcontroller erzeugen
483
4.6.2 Die Datenquelle und das Delegate
485
4.7 Eigene Container- und Subviewcontroller
486
4.7.1 Container- und Subviewcontroller
486
4.7.2 Verwaltung der Subviewcontroller
490
4.7.3 Containerviews leicht gemacht
491
4.8 Regelbasierte Anpassung der Oberfläche
492
4.8.1 Gestaltungsregeln …
494
4.8.2 … und Gestaltungsmöglichkeiten
497
5 Daten, Tabellen und Controller
499
5.1 Benachrichtigungen
499
5.1.1 Benachrichtigungen empfangen
500
5.1.2 Eigene Benachrichtigungen verschicken
502
5.2 Layoutanpassungen und View-Rotationen
504
5.2.1 Lang lebe das Rotationsprinzip!
505
5.2.2 Anpassung des Layouts
508
5.3 Core Data
510
5.3.1 Datenmodellierung
510
5.3.2 Implementierung von Entitätstypen
515
5.3.3 Dokumentenordner und Application-Support-Verzeichnis
516
5.3.4 Einbindung von Core Data
518
5.3.5 Der Objektkontext
520
5.3.6 Die Nachrichten des Objektkontexts
522
5.3.7 Anlegen und Ändern von Entitäten in der Praxis
522
5.4 Texte, Bilder und Töne verwalten
524
5.4.1 View-Anpassungen für die Systemleisten
524
5.4.2 Die Tastatur betritt die Bühne
529
5.4.3 Fotos aufnehmen
535
5.4.4 Töne aufnehmen und abspielen
542
5.5 Tableviews und Core Data
552
5.5.1 Tableviews
552
5.5.2 Tabellenzellen gestalten
554
5.5.3 Zellprototypen über das Storyboard definieren
554
5.5.4 Zellprototypen per Programmcode bereitstellen
558
5.5.5 Der Target-Action-Mechanismus und Tabellenzellen
559
5.5.6 Zellen löschen
560
5.6 Core Data II: Die Rückkehr der Objekte
561
5.6.1 Prädikate
562
5.6.2 Aktualisierung des Tableviews
565
5.6.3 Das Delegate des Fetched-Results-Controllers
568
5.6.4 Tabelleneinträge suchen
571
5.7 Inhalte teilen
574
5.7.1 Integration in das Fototagebuch
575
5.7.2 Eigene Aktivitäten bereitstellen
576
5.8 Collectionviews
583
5.8.1 Der Collectionview-Controller
585
5.8.2 Gitterdarstellung
586
5.8.3 Zellen und die Datenquelle
589
5.8.4 Ergänzende Views
590
5.8.5 Freie Layouts
592
5.8.6 Freie Layouts und ergänzende Views
599
5.8.7 Decorationviews
601
6 Models, Layer, Animationen
603
6.1 Modell und Controller
604
6.1.1 iOS Next Topmodel
604
6.1.2 View an Controller
610
6.1.3 Gerätebewegungen auswerten
611
6.1.4 Modell an Controller
615
6.1.5 Undo und Redo
618
6.1.6 Unit-Tests
621
6.2 Als die Views das Laufen lernten
631
6.2.1 Animationen mit Blöcken
633
6.2.2 Transitionen
639
6.2.3 Zur Animation? Bitte jeder nur einen Block!
641
6.3 Core Animation
643
6.3.1 Layer
644
6.3.2 Vordefinierte Layer-Klassen
650
6.3.3 Der Layer mit der Maske
653
6.3.4 Unser Button soll schöner werden
654
6.3.5 Spieglein, Spieglein an der Wand
656
6.3.6 Der bewegte Layer
663
6.3.7 Daumenkino
668
6.3.8 Relativitätstheorie
670
6.3.9 Der View, der Layer, seine Animation und ihr Liebhaber
674
6.3.10 Transaktionen
679
6.3.11 Die 3. Dimension
681
6.4 Scrollviews und gekachelte Layer
685
6.4.1 Scrollen und Zoomen
685
6.4.2 Scrollviews und Autolayout
690
6.4.3 Die Eventverarbeitung
692
6.4.4 Scharfe Kurven
697
6.4.5 Ganz großes Kino
700
6.4.6 PDF-Dateien anzeigen
704
6.5 Einführung in das Sprite-Kit
711
6.5.1 Sprites und Knoten
711
6.5.2 Mach' mir eine Szene
714
6.5.3 ...uuuund Äkschion
720
6.5.4 Physik für alle
725
6.5.5 Auf Kollisionskurs
730
6.5.6 Freude schöner Götterfunken
734
6.6 Über diese Brücke musst du gehen
736
6.6.1 Toll-free Bridging und ARC
737
6.6.2 C-Frameworks und ARC
738
6.7 Was Sie schon immer über Instruments wissen wollten, aber nie zu fragen wagten
739
6.7.1 Spiel mir das Lied vom Leak
741
6.7.2 Ich folgte einem Zombie
747
6.7.3 Time Bandits
751
6.7.4 Instruments und der Analyzer
754
7 Programmieren, aber sicher
755
7.1 iOS und Hardware
756
7.2 Bedrohungen, Angriffe, Sicherheitslücken und Maßnahmen
760
7.2.1 Arten von Sicherheitslücken
762
7.3 Threat Modeling
763
7.3.1 Erstellen eines Datenflussdiagramms
766
7.3.2 STRIDE
787
7.3.3 Generische Designgrundsätze
794
7.3.4 Threat Modeling aus der Tube – das Microsoft SDL Threat Modeling Tool
795
7.4 Sichere Programmierung in der Praxis
801
7.4.1 Authentisierung
801
7.4.2 Keychain
816
7.4.3 Jailbreak-Erkennung
823
7.4.4 Verzeichnisse und Dateiattribute
829
7.4.5 Event-Handling
831
7.4.6 Screenshots
833
7.4.7 Sorgfältiger Umgang mit der Bildschirmsperre
835
7.4.8 Struktur und Ordnung im Sandkasten
836
7.4.9 UDID ist tot. Was nun?
839
7.4.10 Base64
842
7.5 iCloud
844
7.5.1 Denkanstöße
846
7.5.2 iCloud in der Praxis
847
7.5.3 Key-Value-Storage
851
7.5.4 Verschlüsselung (in der Cloud)
853
8 Datenserialisierung und Internetzugriff
861
8.1 Ich packe meine Texte
861
8.1.1 Serialisierung von Zeichenketten
861
8.1.2 Zeichenkodierungen
862
8.1.3 Unicode und UTF-8
863
8.1.4 Die Zeichenkodierung erkennen
864
8.1.5 Zeichenketten konvertieren
865
8.2 JSON und die URLonauten
866
8.2.1 Das JSON-Format
866
8.2.2 Einfacher YouTube-Zugriff mit JSON
867
8.2.3 URLs erstellen
874
8.2.4 JSON-Dokumente schreiben
878
8.2.5 Verwendung des JSONKits als Parser
878
8.3 XML
880
8.3.1 XML in Kürze
880
8.3.2 Property-Listen
886
8.3.3 SAX
890
8.3.4 DOM und XPath
905
8.3.5 Der Tag der Entscheidung
912
8.4 Eigene Parser schreiben
914
8.4.1 Token und Scanner
914
8.4.2 Klammern und Negation
917
8.4.3 Binäre Operationen
919
8.4.4 Initialisierung und Fehlerbehandlung
923
8.4.5 Erweiterungen
924
8.5 Daten, Daten, ihr müsst wandern
928
8.5.1 Synchrone Kommunikation
928
8.5.2 Komplexe Anfragen
930
8.5.3 Auf dem Webserver nichts Neues
934
8.5.4 Asynchrone Kommunikation
939
8.5.5 Große Datenmengen der Übertragung
944
8.5.6 Passwortabfragen
950
8.5.7 Sicher kommunizieren mit TSL (SSL)
954
8.5.8 Hier geht die POST ab
967
8.5.9 Datei-Upload
971
8.5.10 Überprüfung der Erreichbarkeit
980
8.6 URL-Sessions
984
8.6.1 Aufträge
985
8.6.2 Das Session-Delegate
988
8.6.3 Konfigurationen
990
8.6.4 Die im Dunkeln sieht man nicht
992
8.6.5 Hintergrundgespräche
996
8.7 Karten
999
8.7.1 Karten darstellen
999
8.7.2 Koordinatensysteme
1001
8.7.3 Geokoordinaten bestimmen
1003
8.7.4 Eigene Kartenbeschriftungen
1005
8.7.5 Routen
1008
9 Multimedia
1013
9.1 Schönschrift
1013
9.1.1 Texthervorhebungen über Attributed Strings
1016
9.1.2 Weitere Anzeigemöglichkeiten
1027
9.1.3 Text mit Hervorhebungen über Dokumente erzeugen
1027
9.1.4 Zeichenketten in Farben umwandeln
1029
9.2 Einbindung von HTML-Dokumenten
1034
9.2.1 Anzeige von HTML-Dokumenten
1034
9.2.2 Javascript-Dateien einbinden
1039
9.2.3 Das Delegate des Webviews
1040
9.2.4 Webviews und Scrollviews
1044
9.2.5 Der Viewport
1045
9.2.6 Dynamische HTML-Seiten
1049
9.2.7 HTML-Sonderzeichen maskieren
1053
9.2.8 Javascript ausführen
1055
9.2.9 Ereignisübergabe an die Applikation
1057
9.3 Antwort-Caching und Offlinemodus
1060
9.3.1 Bilder nachladen
1060
9.3.2 Vergiss mein nicht
1063
9.3.3 Cache me if you can
1067
9.3.4 Let’s go offline
1074
9.3.5 Protokolle
1075
9.3.6 Ein datenbankbasierter Offline-Cache
1081
9.3.7 Der Offline-Cache in anderen Projekten
1099
9.4 Videos
1099
9.4.1 YouTube-Videos einbetten
1099
9.4.2 Wiedergabe über das Media-Player-Framework
1103
9.4.3 Vorschaubilder erzeugen
1107
9.4.4 Videos über Layer anzeigen
1112
10 Jahrmarkt der Nützlichkeiten
1117
10.1 Ein Rundgang durch Xcode
1117
10.1.1 Die Navigatorspalte
1118
10.1.2 Der Utilitybereich
1121
10.1.3 Der Editor
1122
10.1.4 Autovervollständigung und Code-Schnipsel
1124
10.1.5 Tastaturkurzbefehle
1128
10.1.6 Tabs und Fenster
1129
10.1.7 Simulatoren und Dokumentation nachladen
1130
10.1.8 No Country for Old Man-Pages
1131
10.1.9 Projekte dokumentieren
1134
10.1.10 Snapshots
1135
10.1.11 Standortbestimmung im Simulator
1138
10.2 Refactoring
1140
10.2.1 Refactorings in Xcode
1141
10.2.2 Methoden auslagern
1144
10.2.3 Oberklassen erzeugen und Methoden verschieben
1147
10.3 Die Geräteverwaltung und der Organizer
1150
10.3.1 Die Geräteverwaltung
1151
10.3.2 Archive und die Archivverwaltung
1153
10.3.3 Projektverwaltung
1156
10.4 Das Buildsystem
1157
10.4.1 Workspaces, Projekte und Targets
1157
10.4.2 Projektbestandteile in ein Framework auslagern
1158
10.4.3 Frameworks wiederverwenden
1166
10.4.4 Frameworks dynamisch einbinden
1174
10.4.5 Statische Frameworks
1177
10.4.6 Konfigurationen
1180
10.4.7 Targets
1185
10.4.8 Schemata
1190
10.4.9 Externe Bibliotheken mit CocoaPods einbinden
1196
10.5 Ad-hoc-Distributionen
1208
10.5.1 Geräteregistrierung
1209
10.5.2 App-Installation über das iPhone-Konfigurationsprogramm
1212
10.5.3 Ad-hoc-Distributionen über einen Webserver
1215
10.5.4 Ad-hoc-Distributionen über HockeyApp
1217
10.6 Versionsverwaltung mit Git
1222
10.6.1 Lokale Git-Repositorys
1223
10.6.2 Arbeiten mit verteilten Git-Repositorys
1225
10.6.3 Git-Integration in Xcode
1226
10.6.4 Einbindung existierender Git-Repositorys
1231
10.6.5 GitX
1232
10.6.6 SourceTree
1233
10.6.7 Das Kommandozeilenprogramm von Git
1235
10.6.8 Der eigene Git-Server
1237
Index
1245