Vorwort | 5 |
iOS und Swift | 5 |
Leser | 6 |
Beispielcode | 6 |
Das Blog zum Buch | 7 |
Inhaltsübersicht | 9 |
Inhaltsverzeichnis | 11 |
1 Einleitung | 19 |
1.1 iPhone, iPad & Co. | 20 |
1.2 Für wen ist dieses Buch gedacht? | 20 |
1.3 Benötigte Hard- und Software | 21 |
1.3.1 Welcher Mac genügt? | 21 |
1.3.2 Welche macOS-Version? | 21 |
Benötigen Sie ein iOS-Gerät? | 22 |
1.4 Xcode und das iOS-SDK | 22 |
1.4.1 Download und Installation von Xcode | 23 |
1.4.2 Xcode im Detail | 24 |
1.4.3 Projektübersicht | 27 |
1.4.4 Quellcodefenster | 27 |
1.4.5 Interface Builder | 29 |
1.4.6 Object Library & Co. | 29 |
1.4.7 Inspektoren | 31 |
1.5 Vorlagen in Xcode | 33 |
1.5.1 Schnellstart: Hallo Playground | 33 |
1.5.2 Die Projektvorlagen von Xcode für iOS-Apps | 34 |
1.5.3 Schnellstart: Die Master-Detail-Application-Vorlage | 34 |
1.5.4 Schnellstart: Die Page-Based-Application-Vorlage | 37 |
1.5.5 Schnellstart: Die Single-View-Application-Vorlage | 38 |
1.5.6 Schnellstart: Die Tabbed-Application-Vorlage | 39 |
1.5.7 Bestandteile eines Projekts | 40 |
1.6 Apps ausführen | 44 |
1.6.1 App im Simulator | 45 |
1.6.2 Die App auf dem iOS-Gerät | 47 |
1.6.3 Der iOS-Simulator im Detail | 47 |
1.7 Mehrere Xcode-Versionen parallel verwenden | 49 |
1.7.1 Ältere Versionen von Xcode finden | 49 |
1.7.2 Weitere Xcode-Versionen installieren | 51 |
1.8 Das Apple Developer Program – Anlaufstelle für Entwickler | 51 |
1.8.1 Von Zertifikaten, Profilen und Identitäten | 53 |
1.8.2 App auf ein angeschlossenes iOS-Gerät übertragen | 56 |
2 Schnellstart mit Swift | 59 |
2.1 Das Projekt anlegen | 60 |
2.2 Die Oberfläche mit dem Interface Builder bauen | 64 |
2.3 Controls und Ereignisse | 68 |
2.4 Mit Swift zum Ergebnis | 71 |
3 Einstieg in Swift | 75 |
3.1 Variablen, Konstanten und Zuweisungen | 75 |
3.1.1 Zuweisungsoperator | 75 |
3.1.2 Konstanten | 76 |
3.2 Datentypen | 77 |
3.2.1 Strings | 77 |
Umwandlung von Groß- in Kleinbuchstaben | 78 |
Umwandlung von Zeichen in eine Zahl | 78 |
Ausgabe von String-Inhalten mit String-Interpolation | 79 |
Kommentare | 80 |
3.2.2 Ganze Zahlen und Fließkommazahlen | 80 |
Zeichenketten | 80 |
Fließkommazahlen (Float und Double) | 81 |
Rechnen mit ganzen Zahlen und Fließkommazahlen | 81 |
3.2.3 Wahrheitswerte | 82 |
3.2.4 Aufzählungen (Enumerationen) | 83 |
Assoziierte Werte in Enumerationen | 83 |
3.2.5 Felder (Arrays) | 85 |
3.2.6 Dictionarys | 87 |
3.2.7 NS-Datentypen | 89 |
3.2.8 NSNumber | 90 |
3.2.9 NSString | 91 |
3.2.10 NSDate | 91 |
3.2.11 NSRange | 92 |
3.2.12 TimeInterval | 92 |
3.2.13 NSArray/NSMutableArray | 93 |
3.2.14 NSDictionary und NSMutableDictionary | 93 |
3.3 Operatoren | 93 |
3.3.1 Boolesche Operatoren | 93 |
3.4 Arithmetische Operatoren | 94 |
3.5 Kontrollstrukturen | 95 |
3.5.1 Die Fallunterscheidung (if) | 95 |
3.5.2 Mehrfachauswahl | 97 |
3.6 Schleifen | 98 |
3.6.1 Kopfgesteuerte Schleifen (while-Schleife) | 99 |
3.6.2 Fußgesteuerte Schleifen (repeat...while-Schleife) | 99 |
3.6.3 Zählschleifen (for-Schleife) | 99 |
3.7 Funktionen | 102 |
3.7.1 Funktionen – Parameter übergeben | 103 |
3.7.2 Funktionen – Werte zurückgeben | 104 |
3.7.3 Funktionen – Mehrere Werte zurückgeben (Tupel) | 105 |
3.7.4 Funktionen – Externe Parameternamen | 105 |
3.7.5 Funktionen – Parameter vorbelegen | 106 |
3.7.6 Funktionen – Weitere Parametertypen | 107 |
Variadic Parameter | 107 |
Konstante und variable Parameter | 108 |
In-Out-Parameter | 108 |
3.7.7 Verschachtelte Funktionen | 109 |
3.7.8 Closures | 109 |
3.7.9 Optionals | 111 |
Implicitly Unwrapped Optionals | 112 |
3.8 Strukturen Teil 1 (Structs) | 113 |
4 Objektorientierte Programmierung mit Swift | 117 |
4.1 Grundlagen der OOP | 117 |
4.1.1 Strukturen aus objektorientierter Sicht (Strukturen Teil 2) | 117 |
4.1.2 Was sind Objekte? | 118 |
4.1.3 Was sind Klassen? | 119 |
Klasse vs. Struktur | 120 |
Werttypen (Value Types) | 121 |
Referenztypen (Reference Types) | 122 |
Vergleichen von Objekten mit Operatoren | 123 |
Wann sollte eine Struktur und wann sollte eine Klasse verwendet werden? | 123 |
4.1.4 Public, Private und wer noch? | 123 |
Sonderfall Tupel | 128 |
4.2 Eigenschaften (Properties) | 128 |
Eigenschaften überwachen (Property Observers) | 131 |
4.3 Methoden | 132 |
4.3.1 Instanzmethoden (Instance Methods) | 132 |
4.3.2 Klassenmethoden (Type Methods) | 135 |
4.3.3 Der Initialisierer (Konstruktor) | 136 |
Parameter und Initialisierer | 137 |
Die Eigenschaft »self« | 138 |
4.3.4 Der Deinitialisierer (Dekonstruktor) | 139 |
4.4 Vererbung | 139 |
4.4.1 Erben (Ableitung) von Klassen | 140 |
4.4.2 Zugriff auf Elemente der vererbenden Klasse | 141 |
4.4.3 Initializer delegation | 141 |
4.4.4 Überschreiben von Methoden | 143 |
4.4.5 Überschreiben von Eigenschaften | 144 |
4.4.6 Das Überschreiben von Elementen verhindern | 145 |
4.5 Schnittstellen | 146 |
4.5.1 Was sind Protokolle? | 146 |
4.5.2 Ableitung von Protokollen | 148 |
Swift 1.2 | 149 |
4.6 Erweiterung von Typen (Klassen, Strukturen und Enumerationen) | 150 |
4.6.1 Subscripts | 150 |
4.6.2 Verschachtelte Typen (Nested Types) | 151 |
4.6.3 Erweiterungen (Extensions) | 152 |
Swift 2 | 153 |
4.6.4 Optional Chaining | 155 |
Aufruf von Methoden durch Optional Chaining | 156 |
4.7 Typumwandlung (is & as) und (Any & AnyObject) | 157 |
Typüberprüfung mit dem is-Operator | 157 |
Downcasting | 158 |
Verwaltung und Umwandlung mit Any und AnyObject | 160 |
Any | 161 |
4.8 Generics | 162 |
4.9 Speicherverwaltung (Automatic Reference Counting) | 163 |
Weak Reference | 167 |
Unowned Reference | 168 |
5 Grundlagen der App-Entwicklung | 171 |
5.1 Storyboard und Interface Builder | 171 |
5.1.1 App im Storyboard | 171 |
Storyboard und Interface Builder | 172 |
Navigation mit Controller | 174 |
ViewController dem Storyboard hinzufügen | 175 |
5.2 Bausteine einer iOS-App | 177 |
5.2.1 View, ViewController und wer noch? | 179 |
UIScreen | 179 |
UIWindow | 179 |
UIView | 179 |
UIViewController | 179 |
UINavigationController | 180 |
UIPageViewController | 181 |
UITabBarController | 181 |
UITableViewController | 181 |
Segues | 182 |
View mit ViewController | 182 |
5.2.2 View-Ereignisse und View-Lebenszyklus | 187 |
5.2.3 Outlets und Actions | 189 |
Actions | 190 |
5.2.4 MVC – Model View Controller | 191 |
5.2.5 Controls | 193 |
Switch | 193 |
Slider | 195 |
Activity Indicator | 197 |
Segmented Control | 198 |
Stepper | 200 |
PickerView | 201 |
5.2.6 UIAlertController | 204 |
Standard-Dialog | 204 |
Dialog mit mehreren Schaltflächen | 206 |
Textfelder im Dialog | 207 |
5.3 Delegate | 210 |
Wie funktioniert ein Delegate? | 211 |
ApplicationDelegate-Protokoll | 212 |
5.4 Gestenverarbeitung (Touch Events) | 214 |
Skalierung mit Pinch-Geste | 219 |
5.5 AutoLayout | 222 |
AutoLayout programmiert | 229 |
5.6 Workshop – Passwortverwaltung – Teil 1 | 231 |
5.6.1 Planung der App | 232 |
5.6.2 Umsetzung des Projekts – Teil 1 | 235 |
Anpassung des Codes (Punkt 1) | 237 |
Erweiterung des Storyboards (Punkt 2) | 239 |
Klasse implementieren (Punkt 3) | 241 |
6 Fehlersuche und Problembehandlung | 245 |
6.1 Breakpoints im Quellcode setzen | 245 |
6.2 Inspizieren von Variablen | 247 |
print bzw. Print vs NSLog | 249 |
6.3 View Debugging | 249 |
6.4 Fehlerbehandlung mit »try catch«, (NS)Error & Co. | 252 |
Das Protokoll »Error« | 255 |
Die defer-Anweisung | 257 |
6.5 Fehlerbehandlung bei knappem Speicher | 258 |
Knappen Speicher simulieren | 259 |
6.6 Vorausetzungen prüfen, Fehler vermeiden | 260 |
Überwachte Ausführung mit guard | 260 |
7 Tabellen und Controller | 263 |
7.1 Schnellstart: App mit Master-Detail-Application-Vorlage | 263 |
7.1.1 Datenquelle für Master-Detail hinzufügen | 265 |
7.1.2 Das Projekt testen | 269 |
7.2 UITableView und Controller | 270 |
7.3 UITableViewCell | 272 |
7.4 CustomCell | 274 |
7.5 NavigationBar anpassen | 279 |
7.6 Workshop – Passwortverwaltung – Teil 2 | 281 |
Container für Testdaten | 282 |
Anzeige der Passwörter im TableView | 283 |
GeneratorViewController gestalten | 284 |
Ein Segue für das Passwort | 286 |
Detailansicht | 287 |
Zwischenfazit | 288 |
8 Core Data | 291 |
8.1 Was ist Core Data? | 291 |
8.2 Ein neues Projekt mit Core Data | 291 |
8.3 Ein Modell für die Speicherung | 293 |
8.4 Core-Data-Klassen verwenden | 297 |
8.5 Workshop – Passwortverwaltung – Teil 3 | 299 |
Core Data im Projekt implementieren | 301 |
9 Internet und Netzwerke | 309 |
9.1 Das UIWebView | 309 |
9.2 Wetter mit JSON | 315 |
Eine JSON-Schnittstelle | 317 |
Das OpenWeatherMap-API | 318 |
JSON-Antwort interpretieren | 319 |
9.2.1 Mit der App zum (aktuellen) Wetter | 320 |
URL-Abfrage erstellen | 322 |
JSON-Antwort im Code auswerten | 323 |
9.3 Dateiaustausch mit AirDrop | 325 |
Vorbereitungen für AirDrop | 326 |
View und Datentypen | 327 |
AirDrop implementieren | 327 |
… und ab durch die Luft | 328 |
9.4 Daten in der iCloud | 329 |
Konfiguration der Cloud-App für die Cloud | 330 |
Code für die Cloud | 332 |
10 Sensoren | 335 |
10.1 Kamera | 335 |
10.2 Mikrofon | 338 |
10.3 Beschleunigungssensor | 343 |
Umsetzung im Code | 344 |
Animation, Gravitation und Verhalten kontrollieren | 346 |
Der Beschleunigungssensor spielt mit ... | 346 |
10.4 Positionsdienste | 347 |
Konfiguration des Projekts | 348 |
Positionsermittlung durchführen | 352 |
10.5 Workshop – Passwortverwaltung – Teil 4 | 354 |
11 iOS Maps | 357 |
11.1 Das MapKit-Framework | 357 |
11.2 Das MapView-Control | 359 |
11.3 Markierung mit Annotation | 360 |
11.4 Markierung auf der Karte anzeigen | 361 |
11.5 Icon ändern | 362 |
12 Lokalisierung | 365 |
12.1 Statische Texte in der GUI | 365 |
12.2 Eine Sprache hinzufügen | 367 |
12.3 Lokalisierung von Bildern | 370 |
12.4 Dynamische Texte | 372 |
12.5 Lokalisierung des App-Namens | 375 |
12.6 Workshop – Passwortverwaltung – Teil 5 | 375 |
Dynamische Texte hinzufügen | 377 |
13 Universal Apps | 381 |
13.1 Universal Apps | 381 |
13.2 Ein Projekt als Universal App anlegen | 381 |
13.3 Bilder in der App | 383 |
13.4 Portrait oder Landscape? | 386 |
13.5 iPad oder iPhone? | 387 |
13.6 Icons und Launch Images | 388 |
13.7 Workshop – Passwortverwaltung – Teil 6 | 389 |
14 App Extensions | 391 |
14.1 Widgets und iOS | 391 |
14.2 Ein Projekt für Widgets | 392 |
Apps mit Extension | 393 |
14.3 Today Extension anlegen | 393 |
14.4 Code und GUI des Widgets entwerfen | 395 |
14.5 Test des Widgets | 396 |
15 WatchKit | 399 |
15.1 Apple und die Watch | 399 |
15.2 Zweiteilung | 400 |
15.3 Das Projekt im Projekt | 401 |
15.4 Das WatchKit-Projekt | 403 |
15.5 GUI für die Watch-App | 404 |
15.6 Der Code im anderen Abschnitt | 406 |
15.7 Wie kommt die App auf die Watch? | 408 |
16 Apps für Apple TV 4 | 411 |
16.1 Apps im Fernsehen | 411 |
16.2 Projektvorlagen für Apple-TV-Apps | 412 |
16.3 Auflösungen berücksichtigen | 413 |
16.4 Fokus und Steuerung der App | 413 |
16.5 Der Simulator und Apple Remote | 414 |
16.6 Würfel im Fernsehen | 415 |
16.7 Die Programmlogik der Würfel-App | 416 |
16.8 Icons hinzufügen | 418 |
16.9 Installation der App | 420 |
17 NSOperation und Dispatch Queue | 421 |
17.1 Operationen und Queues | 421 |
17.2 Grand Central Dispatch und Queues im Überblick | 421 |
17.2.1 Serielle Queues | 422 |
17.2.2 Konkurrierende Queues | 422 |
17.3 Queues in der praktischen Anwendung | 423 |
17.4 Serielle Abarbeitung | 425 |
17.5 NSOperation Queues | 426 |
18 Handoff-API | 429 |
18.1 Einrichtung von Handoff | 429 |
18.2 Die Klasse NSUserActivity | 430 |
18.3 Das Projekt einrichten | 431 |
18.4 Activity anlegen | 432 |
18.5 Update und Ereignisse | 433 |
19 Das Core Spotlight Framework | 435 |
19.1 Indizierung mit Spotlight | 435 |
19.2 Neue Struktur für ein Zitat | 437 |
19.3 Den Text analysieren | 437 |
19.4 NSUserActivity verwenden | 439 |
19.5 Activity-Instanz prüfen | 441 |
19.6 Ein Activity wiederherstellen | 442 |
20 3D Touch verwenden | 445 |
20.1 Was ist 3D Touch? | 445 |
20.2 3D Touch verwenden | 446 |
20.3 Waage mit 3D Touch | 447 |
20.4 Shortcuts definieren | 449 |
20.5 Shortcut im Code | 451 |
21 Drucken unter iOS | 455 |
21.1 Was ist Airprint? | 455 |
21.2 Der Printer Simulator | 456 |
21.3 Drucken aus einem TextView-Control | 457 |
21.4 Generierung eines PDF-Dokuments | 459 |
21.4.1 Drucklayout mit HTML | 460 |
21.4.2 PDF im Code erzeugen | 461 |
22 Apps verteilen | 463 |
22.1 Der Distributionsprozess | 463 |
22.2 iTunes Connect verwenden | 465 |
22.2.1 Meine Apps (App registrieren) | 466 |
Verkäufe und Trends | 470 |
Zahlungen und Finanzberichte | 470 |
Benutzer und Rollen | 471 |
Vereinbarungen, Steuern und Bankverbindungen | 471 |
Ressourcen und Hilfe | 471 |
22.3 Apps verteilen | 471 |
22.3.1 App Store | 471 |
22.3.2 Ad Hoc Deployment | 474 |
22.3.3 Enterprise Deployment | 475 |
22.3.4 Bereitstellung einer App zur Verteilung | 475 |
Nachwort | 477 |
Index | 479 |
www.dpunkt.de | 0 |