Sauberen Code schreiben mit Swift 3 und Objective-C. Stabile Apps für iPhone und iPad programmieren. Techniken & Methoden von Grund auf verstehen
E-Book, Deutsch, 811 Seiten
ISBN: 978-3-446-45206-0
Verlag: Carl Hanser
Format: PDF
Kopierschutz: 1 - PDF Watermark
Diese komplett überarbeitete und aktualisierte Neuauflage bietet Ihnen einen vollständigen Überblick über alle wichtigen Methoden und Techniken der iOS 10-Programmierung. Thomas Sillmann zeigt Ihnen, wie Sie auf einer sauberen Code-Basis zukunftsfähige Apps für iPhone, iPad und Apple Watch entwickeln.
Entwickeln, warten und erweitern Sie Ihre eigenen, mobilen Anwendungen
Sie lernen Swift 3 und Objective-C von Grund auf kennen und erfahren alles Wissenswerte über die Grundlagen der iOS-Entwicklung sowie die Entwicklungsumgebung Xcode. Darauf aufbauend beschäftigen Sie sich mit zentralen Themen der iOS-Programmierung wie MVC-Pattern, View-Controller und Views sowie Datenhaltung.
Um fortgeschrittene Bereiche wie Local und Push Notifications und alle verfügbaren Arten von Extensions geht es in den folgenden Kapiteln. Abgerundet wird das Buch durch die Themen Unit-, UI- und Performance-Tests, Versionierung mit Git sowie der Arbeit im Team mit dem Xcode-Server. Am Ende veröffentlichen Sie im App Store eigene professionelle Anwendungen für iPhone, iPad und Apple Watch.
Autoren/Hrsg.
Fachgebiete
Weitere Infos & Material
1;Inhalt;8
2;Vorwort;22
3;Danksagung;26
4;1 Über iOS;28
4.1;1.1 Was ist iOS?;28
4.1.1;1.1.1 iOS und macOS;29
4.1.2;1.1.2 Besonderheiten der iOS-Plattform;30
4.2;1.2 iOS für Entwickler;31
4.2.1;1.2.1 Hardware für Entwickler;31
4.2.2;1.2.2 Software für Entwickler;33
4.2.3;1.2.3 Das Apple Developer Program;33
4.3;1.3 Der Aufbau von iOS;35
4.3.1;1.3.1 Die vier Schichten von iOS;35
4.4;1.4 Die perfekte iOS-App;37
4.4.1;1.4.1 iOS Human Interface Guidelines;38
5;2 Die (bisherige) Programmiersprache – Objective-C;40
5.1;2.1 Über Objective-C und objektorientierte Programmierung;40
5.2;2.2 Grundlagen der Programmierung;41
5.2.1;2.2.1 Objekte;41
5.2.2;2.2.2 Primitive Datentypen;41
5.2.3;2.2.3 Variablen;42
5.2.4;2.2.4 Operatoren;44
5.2.5;2.2.5 Abfragen und Schleifen;44
5.2.6;2.2.6 Kommentare;49
5.3;2.3 Aufbau einer Klasse;50
5.3.1;2.3.1 Die Header-Datei;50
5.3.2;2.3.2 Die Implementation-Datei;52
5.3.3;2.3.3 Los geht’s: Unsere erste Klasse!;53
5.4;2.4 Methoden;57
5.4.1;2.4.1 Aufbau von Methoden;57
5.4.2;2.4.2 Methoden in Header- und Implementation-Dateien einer Klasse;59
5.4.3;2.4.3 Implementierung von Methoden;61
5.4.4;2.4.4 Methoden aufrufen;63
5.4.5;2.4.5 Klassen- und Instanzmethoden;64
5.5;2.5 Instanzvariablen;65
5.6;2.6 Properties;67
5.6.1;2.6.1 Aufbau einer Property;67
5.6.2;2.6.2 Die Punktnotation;69
5.6.3;2.6.3 Optionen;70
5.6.4;2.6.4 Direktzugriff auf Properties;72
5.6.5;2.6.5 Setter und Getter überschreiben;74
5.7;2.7 Konstanten;76
5.7.1;2.7.1 Deklaration von Konstanten;77
5.8;2.8 Namenskonventionen;78
5.8.1;2.8.1 Klassen;78
5.8.2;2.8.2 Methoden;78
5.8.3;2.8.3 Properties;79
5.9;2.9 Strukturen;79
5.9.1;2.9.1 enum;79
5.9.2;2.9.2 typedef;80
5.10;2.10 Initialisierung von Objekten;81
5.10.1;2.10.1 alloc und init;82
5.10.2;2.10.2 Zeiger;84
5.11;2.11 init im Detail;85
5.11.1;2.11.1 Erstellen eigener init-Methoden;87
5.11.2;2.11.2 Designated Initializer;88
5.12;2.12 Vererbung;90
5.12.1;2.12.1 Methoden der Superklasse überschreiben;92
5.13;2.13 Kategorien;94
5.13.1;2.13.1 Aufbau von Kategorien;94
5.13.2;2.13.2 Kategorien in Xcode erstellen;95
5.13.3;2.13.3 Verwenden von Kategorien;97
5.14;2.14 Erweiterungen;97
5.14.1;2.14.1 Aufbau von Erweiterungen;98
5.14.2;2.14.2 Erweiterungen innerhalb der Implementation-Datei;98
5.14.3;2.14.3 Erweiterungen in Xcode erstellen;99
5.15;2.15 Protokolle;100
5.15.1;2.15.1 Aufbau von Protokollen;101
5.15.2;2.15.2 Zuweisen eines Protokolls zu einer Klasse;102
5.15.3;2.15.3 Vererbung in Protokollen;103
5.15.4;2.15.4 Protokolle in Xcode erstellen;103
5.16;2.16 #import und @class;105
5.16.1;2.16.1 #import;105
5.16.2;2.16.2 @class;106
5.17;2.17 Blöcke;107
5.17.1;2.17.1 Was sind Blöcke?;108
5.17.2;2.17.2 Aufbau eines Blocks;108
5.17.3;2.17.3 Zuweisen eines Blocks zu einer Variablen;109
5.17.4;2.17.4 Nutzen eines Blocks als Parameter einer Methode;110
5.17.5;2.17.5 Blöcke als Properties;112
5.17.6;2.17.6 Blockvariablen;112
5.17.7;2.17.7 Globale Blöcke;113
5.18;2.18 Singletons;114
6;3 Der Neue im Club – Swift;116
6.1;3.1 Programmierst du noch oder swifst du schon?;116
6.1.1;3.1.1 Über Swift;116
6.1.2;3.1.2 Voraussetzungen zur Nutzung von Swift;117
6.1.3;3.1.3 Swift und Objective-C;117
6.1.4;3.1.4 Playgrounds;118
6.2;3.2 Grundlagen der Programmierung;120
6.2.1;3.2.1 Swift Standard Library und Fundamental Types;120
6.2.2;3.2.2 Variablen und Konstanten;122
6.2.3;3.2.3 Operatoren;124
6.2.4;3.2.4 Abfragen und Schleifen;125
6.2.5;3.2.5 Kommentare;132
6.2.6;3.2.6 print;133
6.3;3.3 Fundamental Types und Swift Standard Library im Detail;135
6.3.1;3.3.1 Strings;135
6.3.2;3.3.2 Arrays;138
6.3.3;3.3.3 Dictionaries;143
6.3.4;3.3.4 Any und AnyObject;147
6.4;3.4 Aufbau einer Klasse;147
6.4.1;3.4.1 Erstellen einer Instanz einer Klasse;150
6.4.2;3.4.2 Zugriff auf Eigenschaften einer Klasse;150
6.5;3.5 Methoden;151
6.5.1;3.5.1 Methoden mit Rückgabewert;152
6.5.2;3.5.2 Methoden mit Parametern;153
6.5.3;3.5.3 Local und External Parameter Names;156
6.5.4;3.5.4 Methodennamen in Swift;158
6.5.5;3.5.5 Aufruf von Methoden einer Klasse;159
6.5.6;3.5.6 Zugriff auf andere Eigenschaften und Methoden einer Klasse;160
6.5.7;3.5.7 Klassen- und Instanzmethoden;161
6.5.8;3.5.8 Verändern von Parametern einer Methode mittels inout;163
6.6;3.6 Closures;164
6.6.1;3.6.1 Closures als Variablen und Konstanten;166
6.6.2;3.6.2 Closures als Parameter für Methoden;167
6.6.3;3.6.3 Kurzschreibweise für Closures als Parameter von Methoden;170
6.7;3.7 Properties;173
6.7.1;3.7.1 Computed Properties;174
6.7.2;3.7.2 Property Observers;177
6.7.3;3.7.3 Type Properties;178
6.8;3.8 Vererbung;179
6.8.1;3.8.1 Überschreiben von Eigenschaften und Methoden der Superklasse;181
6.8.2;3.8.2 Zugriff auf Eigenschaften und Methoden der Superklasse;182
6.9;3.9 Optionals;183
6.9.1;3.9.1 Deklaration von Optionals;183
6.9.2;3.9.2 Zugriff auf Optionals;184
6.10;3.10 Initialisierung;187
6.10.1;3.10.1 Schreiben von Initializern;188
6.10.2;3.10.2 Designated und Convenience Initializer;193
6.10.3;3.10.3 Initializer und Vererbung;194
6.10.4;3.10.4 Deinitialisierung;196
6.11;3.11 Type Casting;197
6.11.1;3.11.1 Typ prüfen;197
6.11.2;3.11.2 Downcasting;199
6.12;3.12 Enumerations;201
6.12.1;3.12.1 Zusätzliche Werte in Membern einer Enumeration speichern;202
6.13;3.13 Structures;204
6.14;3.14 Generics;205
6.14.1;3.14.1 Generic Function;207
6.14.2;3.14.2 Generic Type;209
6.15;3.15 Error Handling Model;211
6.16;3.16 Extensions;214
6.17;3.17 Protocols;215
6.17.1;3.17.1 Protocol Type;216
6.18;3.18 Access Control;218
7;4 Grundlagen der iOS-Entwicklung;220
7.1;4.1 Foundation-Framework;220
7.1.1;4.1.1 Die wichtigsten Klassen aus dem Foundation-Framework und ihre Funktionen;221
7.2;4.2 UIKit-Framework;226
7.3;4.3 Speicherverwaltung;226
7.4;4.4 Besonderheiten von Objective-C;230
7.4.1;4.4.1 Kurzschreibweisen zum Erstellen von Objekten;230
7.4.2;4.4.2 Vergleichen der Werte von verschiedenen Objekten;233
7.4.3;4.4.3 Schlüsselwörter zum Zusammenspiel mit Optionals;234
7.5;4.5 Besonderheiten von Swift;235
7.5.1;4.5.1 Zusammenspiel zwischen Fundamental Types und Foundation-Framework-Klassen;235
7.5.2;4.5.2 Playgrounds im Detail;235
7.6;4.6 ObjectiveC und Swift vereint;239
7.6.1;4.6.1 ObjectiveC-Code in Swift verwenden;240
7.6.2;4.6.2 Swift-Code in Objective-C verwenden;241
7.7;4.7 NSError;241
7.7.1;4.7.1 Eigene Methode mit NSError-Parameter erstellen;243
7.8;4.8 Dokumentation;244
7.8.1;4.8.1 Besonderheiten bei Methoden;245
7.8.2;4.8.2 Doxygen-Dokumentation in Xcode;247
7.9;4.9 Nebenläufigkeit mit Grand Central Dispatch;248
7.9.1;4.9.1 Parallel laufenden Code erstellen;249
7.10;4.10 Grundlegende Struktur einer App;251
7.10.1;4.10.1 main.m;251
7.10.2;4.10.2 Info.plist;252
7.10.3;4.10.3 App Delegate;252
7.11;4.11 Lebenszyklus einer iOS-App;253
7.11.1;4.11.1 Start einer App;253
7.11.2;4.11.2 Lebenszyklus einer App;254
7.11.3;4.11.3 Die Methoden des App Delegate;255
7.11.4;4.11.4 Start der App;256
7.12;4.12 Tipps für die tägliche Arbeit;258
7.12.1;4.12.1 Die netten Kleinigkeiten .?.?.;258
7.12.2;4.12.2 Fast Enumeration in ObjectiveC;259
7.12.3;4.12.3 Type Casting in ObjectiveC;259
7.12.4;4.12.4 Xcode-Beispielprojekte;260
8;5 Die Entwicklungsumgebung – Xcode;262
8.1;5.1 Willkommen bei Xcode!;262
8.1.1;5.1.1 Was ist Xcode?;263
8.1.2;5.1.2 Interface Builder und Xcode – endlich vereint!;263
8.2;5.2 Arbeiten mit Xcode;264
8.2.1;5.2.1 Dateien und Formate eines Xcode-Projekts;264
8.2.2;5.2.2 Umgang mit Dateien und Ordnern in Xcode;269
8.3;5.3 Der Aufbau von Xcode;272
8.3.1;5.3.1 Die Toolbar;272
8.3.2;5.3.2 Die Navigation Area;274
8.3.3;5.3.3 Die Editor Area;277
8.3.4;5.3.4 Die Utilities Area;279
8.3.5;5.3.5 Die Debug Area;280
8.4;5.4 Einstellungen in Xcode;281
8.4.1;5.4.1 Anpassen von Xcode;281
8.4.2;5.4.2 General;281
8.4.3;5.4.3 Accounts;282
8.4.4;5.4.4 Behaviors;283
8.4.5;5.4.5 Navigation;283
8.4.6;5.4.6 Fonts & Colors;284
8.4.7;5.4.7 Text Editing;285
8.4.8;5.4.8 Key Bindings;285
8.4.9;5.4.9 Source Control;286
8.4.10;5.4.10 Components;287
8.4.11;5.4.11 Locations;287
8.5;5.5 Projekteinstellungen;288
8.5.1;5.5.1 Grundlagen;288
8.5.2;5.5.2 Einstellungen am Projekt;290
8.5.3;5.5.3 Einstellungen am Target;293
8.5.4;5.5.4 Einstellungen am Scheme;299
8.6;5.6 Grafiken und Asset-Bundles;302
8.7;5.7 Lokalisierung mit Localizable.strings;304
8.7.1;5.7.1 Grundlagen;304
8.7.2;5.7.2 NSLocalizedString;304
8.7.3;5.7.3 Erstellen der Localizable.strings-Datei;305
8.7.4;5.7.4 Localized String mit Parameter;307
8.7.5;5.7.5 Alle Localized Strings automatisch auslesen;308
8.8;5.8 Der iOS-Simulator;309
8.8.1;5.8.1 Grundlagen;309
8.8.2;5.8.2 Funktionen und Möglichkeiten des Simulators;309
8.8.3;5.8.3 Performance und Einschränkungen des Simulators;313
8.9;5.9 Dokumentation;313
8.9.1;5.9.1 Nichts geht über die Dokumentation!;313
8.9.2;5.9.2 Das Documentation-Window;316
8.9.3;5.9.3 Direktes Aufrufen der Dokumentation aus Xcode heraus;319
8.10;5.10 Devices;320
8.11;5.11 Organizer;322
8.12;5.12 Debugging in Xcode;325
8.12.1;5.12.1 Was ist Debugging?;325
8.12.2;5.12.2 Die Debug Area;325
8.12.3;5.12.3 Die Arbeit mit dem Debugger – NSLog und Breakpoints;326
8.12.4;5.12.4 Debug Navigator;335
8.13;5.13 Refactoring;336
8.13.1;5.13.1 Grundlagen;336
8.13.2;5.13.2 Refactoring-Funktionen in Xcode;337
8.14;5.14 Instruments;340
8.14.1;5.14.1 Über Instruments;340
8.14.2;5.14.2 Nächste Schritte;343
8.15;5.15 Tipps für die tägliche Arbeit;343
8.15.1;5.15.1 Man lernt immer was dazu!;343
8.15.2;5.15.2 Code Snippets;344
8.15.3;5.15.3 Open Quickly;345
8.15.4;5.15.4 Caller einer Methode feststellen;346
8.15.5;5.15.5 Speicherorte für Ordner und Dateien ändern;347
8.15.6;5.15.6 Shortcuts für die Navigation Area;347
8.15.7;5.15.7 Run Without Building;348
8.15.8;5.15.8 Clean Build;349
9;6 MVC – Model-View-Controller;350
9.1;6.1 MVC .?.?. was?;350
9.2;6.2 MVC in der Praxis;352
9.3;6.3 Kommunikation zwischen Model und Controller;352
9.3.1;6.3.1 Key-Value-Observing;353
9.3.2;6.3.2 Notifications;359
9.4;6.4 Kommunikation zwischen View und Controller;362
9.4.1;6.4.1 Target-Action;362
9.4.2;6.4.2 Delegation;364
10;7 Die Vielfalt der (View-)Controller;366
10.1;7.1 Alles beginnt mit einem View-Controller .?.?.;366
10.2;7.2 UIViewController – die Mutter aller View-Controller;368
10.2.1;7.2.1 Wichtige Methoden von UIViewController;370
10.2.2;7.2.2 UIView – fester Bestandteil eines jeden UIViewControllers;372
10.3;7.3 View-Controller-Hierarchien;373
10.4;7.4 View-Controller erstellen mit dem Interface Builder;375
10.4.1;7.4.1 View-Controller mit NIB-File;376
10.5;7.5 Storyboards;406
10.5.1;7.5.1 Über Storyboards;406
10.5.2;7.5.2 Das Storyboard-Projekt;407
10.5.3;7.5.3 Die Klasse UIStoryboard;417
10.5.4;7.5.4 Segues;419
10.5.5;7.5.5 Zugriff über den App Delegate;422
10.5.6;7.5.6 Quo vadis – Storyboard oder NIB-File?;423
10.6;7.6 Auto Layout;424
10.6.1;7.6.1 Setzen und Konfigurieren von Constraints;424
10.6.2;7.6.2 Constraints bearbeiten und weiter anpassen;426
10.6.3;7.6.3 „Optimale“ Constraints automatisch setzen lassen;428
10.7;7.7 UIViewController und seine Subklassen;429
10.7.1;7.7.1 UINavigationController;430
10.7.2;7.7.2 UITabBarController;436
10.7.3;7.7.3 UITableViewController;440
10.7.4;7.7.4 UICollectionViewController;447
10.7.5;7.7.5 UISplitViewController;448
11;8 Views erstellen und gestalten;452
11.1;8.1 Über Views in iOS;452
11.2;8.2 UIView – die Mutter aller Views;452
11.3;8.3 Arbeiten mit UIView;453
11.3.1;8.3.1 Programmatisches Erstellen einer UIView;453
11.3.2;8.3.2 View-Hierarchien;455
11.3.3;8.3.3 Weiterführendes zu UIView;459
11.4;8.4 Views erstellen mit dem Interface Builder;460
11.4.1;8.4.1 Grundlagen;460
11.4.2;8.4.2 View-Klasse mit NIB-File erstellen;461
11.4.3;8.4.3 Beliebiges NIB-File laden und verwenden;465
11.4.4;8.4.4 NIB-File nachträglich erstellen;466
11.4.5;8.4.5 Unterschiedliche NIB-Files für iPhone und iPad erstellen;468
11.5;8.5 Die wichtigsten Views und ihre Funktionen;470
11.5.1;8.5.1 Grundlagen;470
11.5.2;8.5.2 UILabel;470
11.5.3;8.5.3 UIButton;470
11.5.4;8.5.4 UISwitch;471
11.5.5;8.5.5 UISegmentedControl;471
11.5.6;8.5.6 UITextField;471
11.5.7;8.5.7 UIImageView;472
11.5.8;8.5.8 UIPickerView;472
11.5.9;8.5.9 UIDatePicker;473
11.5.10;8.5.10 UIWebView;473
11.5.11;8.5.11 UIMapView;474
11.5.12;8.5.12 UIScrollView;474
11.5.13;8.5.13 UITextView;475
11.5.14;8.5.14 UITableView;476
11.5.15;8.5.15 UICollectionView;476
11.5.16;8.5.16 Wichtig und unerlässlich: die Dokumentation!;476
11.5.17;8.5.17 Views und der Interface Builder;477
11.6;8.6 Die Grundlage gut gestalteter Views;477
12;9 Das Model und die Datenhaltung;480
12.1;9.1 Die Logik Ihrer App;480
12.2;9.2 Benutzereinstellungen sichern und nutzen;481
12.2.1;9.2.1 Über UserDefaults;481
12.2.2;9.2.2 Standardeinstellungen festlegen;484
12.3;9.3 Zugriff auf das Dateisystem;484
12.3.1;9.3.1 Das Dateisystem von iOS;484
12.3.2;9.3.2 FileManager;486
12.3.3;9.3.3 File-Sharing-Funktion nutzen;493
12.4;9.4 Core Data;494
12.4.1;9.4.1 Datenbankverwaltung mit Core Data;494
12.4.2;9.4.2 Wie funktioniert Core Data?;495
12.4.3;9.4.3 Die Klassen und Bestandteile von Core Data;496
12.4.4;9.4.4 Aufbau eines Standard-Core Data Stacks;497
12.4.5;9.4.5 Der Core Data-Editor;500
12.4.6;9.4.6 Erstellen eines neuen Managed-Objects;508
12.4.7;9.4.7 Löschen eines Managed-Objects;509
12.4.8;9.4.8 Laden von Managed-Objects;509
12.4.9;9.4.9 Was kommt als Nächstes?;511
13;10 Local und Push Notifications;512
13.1;10.1 Was sind Notifications?;512
13.2;10.2 Registrieren von Notification Types;514
13.3;10.3 Registrieren von Notification Categories und Actions;518
13.3.1;10.3.1 Erstellen einer Action;518
13.3.2;10.3.2 Erstellen einer Kategorie;520
13.3.3;10.3.3 Registrieren von Kategorien;522
13.3.4;10.3.4 Reagieren auf eine Action;523
13.4;10.4 Local Notifications;525
13.4.1;10.4.1 Konfiguration des Alerts;525
13.4.2;10.4.2 Konfiguration des Sounds;527
13.4.3;10.4.3 Konfiguration des Badge Values;528
13.4.4;10.4.4 Konfiguration von Audio, Bildern und Videos;528
13.4.5;10.4.5 Speichern zusätzlicher Informationen in einer Local Notification;530
13.4.6;10.4.6 Festlegen des Ausführungsereignisses;531
13.4.7;10.4.7 Erstellen von Notification Requests;535
13.4.8;10.4.8 Registrieren von Local Notifications im System;536
13.4.9;10.4.9 Abbrechen bereits registrierter Local Notifications;537
13.4.10;10.4.10 Reagieren auf den Erhalt einer Notification bei aktiver App;537
13.5;10.5 Push Notifications;539
13.5.1;10.5.1 Versand von Push Notifications;540
13.5.2;10.5.2 Erstellen einer Push Notification;544
13.5.3;10.5.3 Quality of Service;547
14;11 Extensions;548
14.1;11.1 Verfügbare Typen von Extensions;548
14.2;11.2 Erstellen von Extensions in Xcode;551
14.3;11.3 Funktionsweise einer Extension;554
14.4;11.4 Wichtige Klassen und Objekte;555
14.5;11.5 Unterstützte Dateitypen für Share- und Action-Extensions festlegen;556
14.6;11.6 Action Extension;557
14.6.1;11.6.1 Action mit User Interface;557
14.6.2;11.6.2 Action ohne User Interface;558
14.7;11.7 Content Blocker Extension;559
14.7.1;11.7.1 Konfiguration eines Content Blockers;560
14.7.2;11.7.2 Aktualisieren eines Content Blockers;563
14.7.3;11.7.3 Die Klasse ContentBlockerRequestHandler;563
14.8;11.8 Custom Keyboard;564
14.8.1;11.8.1 Erstellen eines Custom Keyboards;564
14.8.2;11.8.2 Arbeit mit der Klasse UIInputViewController;565
14.8.3;11.8.3 Bearbeiten und Setzen von Text;567
14.8.4;11.8.4 Mehrsprachige Keyboards;568
14.9;11.9 Document Provider;568
14.9.1;11.9.1 Document Provider-Extension;569
14.9.2;11.9.2 File Provider;572
14.9.3;11.9.3 Document Provider aufrufen;574
14.10;11.10 iMessage Extension;576
14.10.1;11.10.1 Aufbau und Funktionsweise der iMessage Extension;576
14.10.2;11.10.2 Entwicklung einer iMessage Extension;580
14.11;11.11 Intents Extension;591
14.11.1;11.11.1 Domains und Intents;592
14.11.2;11.11.2 Bestandteile einer Intents Extension;593
14.11.3;11.11.3 Funktionsweise einer Intents Extension;594
14.11.4;11.11.4 Übersicht über verfügbare Intents;603
14.11.5;11.11.5 Voraussetzungen zur Verwendung von Siri in einer Intents Extension;605
14.11.6;11.11.6 Erweitern von Siris Vokabular;608
14.11.7;11.11.7 Testen einer Intents Extension;614
14.12;11.12 Intents UI Extension;615
14.12.1;11.12.1 Vorbereitung der Intents UI Extension;616
14.12.2;11.12.2 Konfiguration des View-Controllers;617
14.12.3;11.12.3 Default-Layout bei Maps und Messaging deaktivieren;619
14.13;11.13 Notification Content Extension;619
14.13.1;11.13.1 UNNotificationContentExtension;619
14.13.2;11.13.2 Konfiguration der Info.plist-Datei;621
14.14;11.14 Notification Service Extension;622
14.15;11.15 Photo Editing Extension;623
14.15.1;11.15.1 Festlegen der unterstützten Typen zur Bearbeitung;627
14.16;11.16 Share Extension;628
14.17;11.17 Shared Links Extension;629
14.17.1;11.17.1 Erstellen eines NSExtensionItem;630
14.17.2;11.17.2 NSExtensionItem als Shared Link bereitstellen;631
14.18;11.18 Sticker Pack Extension;632
14.18.1;11.18.1 Erstellen einer Sticker Pack Extension;633
14.18.2;11.18.2 Komplexere Sticker Pack Extensions erstellen;637
14.19;11.19 Today Extension;639
14.19.1;11.19.1 Today Extension testen;641
14.20;11.20 Watch App;642
14.21;11.21 App Groups;642
14.21.1;11.21.1 Registrieren einer App Group im Apple Developer Portal;643
14.21.2;11.21.2 Registrieren einer App Group innerhalb einer App;644
14.21.3;11.21.3 Zugriff auf eine App Group;645
15;12 App-Entwicklung für die Apple Watch;648
15.1;12.1 Apples neues großes Ding: Die Apple Watch;648
15.2;12.2 Möglichkeiten, Einschränkungen, Unterschiede;649
15.3;12.3 Das WatchKit SDK;651
15.3.1;12.3.1 WKInterfaceController;652
15.3.2;12.3.2 WKInterfaceObject;652
15.3.3;12.3.3 WKExtensionDelegate;653
15.3.4;12.3.4 Weitere Klassen;653
15.4;12.4 Aufbau und Funktionsweise von Apple Watch-Apps;654
15.4.1;12.4.1 iPhone-App;654
15.4.2;12.4.2 WatchKit Extension;654
15.4.3;12.4.3 WatchKit App;655
15.4.4;12.4.4 Verbindung von WatchKit Extension und WatchKit App;655
15.4.5;12.4.5 Notification Scene;655
15.4.6;12.4.6 Complications;656
15.5;12.5 Erstellen einer WatchKit App mitsamt WatchKit Extension;656
15.5.1;12.5.1 Dateien der WatchKit Extension;659
15.5.2;12.5.2 Dateien der WatchKit App;660
15.5.3;12.5.3 Ausführen und Testen der Apple Watch-App;661
15.6;12.6 Lebenszyklus einer WatchKit App;662
15.7;12.7 Der WKInterfaceController im Detail;664
15.7.1;12.7.1 Initialisierung;664
15.7.2;12.7.2 Activation Events;666
15.7.3;12.7.3 Setzen des Titels;666
15.7.4;12.7.4 Ein- und Ausblenden von Interface-Controllern;667
15.7.5;12.7.5 Umsetzen eines Navigation Stacks;669
15.7.6;12.7.6 Reaktion auf Storyboard-Events;670
15.7.7;12.7.7 Weitere Attribute;671
15.7.8;12.7.8 Weitere Funktionen von WKInterfaceController;672
15.8;12.8 Arbeiten mit dem Interface-Storyboard einer WatchKit App;672
15.8.1;12.8.1 Erstellen und Konfigurieren eines WKInterfaceController;673
15.8.2;12.8.2 Hinzufügen und Konfigurieren von Interface-Elementen;675
15.8.3;12.8.3 Positionierung und Anordnung von Interface-Elementen;676
15.8.4;12.8.4 Ändern der Größe von Interface-Elementen;676
15.8.5;12.8.5 Unterschiedliche Konfigurationen für verschiedene Apple Watch-Größen;678
15.8.6;12.8.6 Gruppierung von Interface-Elementen mittels WKInterfaceGroup;680
15.8.7;12.8.7 Verbindung von Storyboard und Code;682
15.8.8;12.8.8 Zusammenfassen mehrerer Interface-Controller zu einem page-based Interface;686
15.8.9;12.8.9 Erstellen und Konfigurieren von Segues;686
15.9;12.9 Erstellen von Tabellen;689
15.9.1;12.9.1 Hinzufügen einer Tabelle im Storyboard;689
15.9.2;12.9.2 Konfiguration einer Zelle;690
15.9.3;12.9.3 Konfiguration einer Tabelle;694
15.9.4;12.9.4 Verwenden verschiedener Zellen in einer Tabelle;696
15.9.5;12.9.5 Zellen hinzufügen und entfernen;699
15.9.6;12.9.6 Direkt zu einer bestimmten Zelle scrollen;700
15.9.7;12.9.7 Aktuelle Anzahl an Zellen auslesen;700
15.9.8;12.9.8 Auf die Auswahl einer Zelle reagieren;701
15.9.9;12.9.9 Segues von Zellen einer Tabelle über das Storyboard konfigurieren;702
15.10;12.10 Erstellen von Menüs;703
15.10.1;12.10.1 Erstellen eines Menüs im Storyboard;704
15.10.2;12.10.2 Erstellen eines Menüs im Code;708
15.10.3;12.10.3 Fazit: Menüerstellung im Storyboard oder im Code?;710
15.10.4;12.10.4 Mischen von Menüpunkten aus Storyboard und Code;711
15.11;12.11 Eingabe von Text;711
15.12;12.12 Notification Scene;713
15.12.1;12.12.1 Short-Look und Long-Look Interface;714
15.12.2;12.12.2 Long-Look Interface im Detail;715
15.12.3;12.12.3 Erstellen eigener Notification Scenes;716
15.12.4;12.12.4 Testen einer Notification Scene;724
15.13;12.13 Complications;724
15.13.1;12.13.1 Was sind Complications?;725
15.13.2;12.13.2 Das ClockKit Framework;725
15.13.3;12.13.3 Aufbau und Bestandteile von Complications;725
15.13.4;12.13.4 Vorbereiten des eigenen Projekts;729
15.13.5;12.13.5 Entwicklung einer Complication;731
15.13.6;12.13.6 Bereitstellen der Complication mittels CLKComplicationDataSource;736
15.14;12.14 Kommunikation und Datenaustausch zwischen iOS und watchOS;739
15.14.1;12.14.1 Watch Connectivity;740
15.15;12.15 Was sonst noch zu sagen und zu beachten ist;745
16;13 Tests;748
16.1;13.1 Unit-Tests;748
16.1.1;13.1.1 Aufbau und Funktionsweise von Unit-Tests;753
16.1.2;13.1.2 Aufbau einer Test-Case-Klasse;755
16.1.3;13.1.3 Neue Test-Case-Klasse erstellen;757
16.1.4;13.1.4 Ausführen von Unit-Tests;759
16.1.5;13.1.5 Was sollte ich eigentlich testen?;761
16.2;13.2 Performance-Tests;761
16.3;13.3 UI-Tests;763
16.3.1;13.3.1 Klassen für UI-Tests;764
16.3.2;13.3.2 Aufbau von UI-Test-Klassen;767
16.3.3;13.3.3 Automatisches Erstellen von UI-Tests;767
16.3.4;13.3.4 Einsatz von UI-Tests;768
16.4;13.4 Test-Driven Development;768
17;14 Versionierung;770
17.1;14.1 Über Versionskontrolle;770
17.2;14.2 Basisfunktionen und -begriffe von Git;771
17.2.1;14.2.1 Begriffe;771
17.2.2;14.2.2 Funktionen;771
17.3;14.3 Source Control in Xcode;773
17.4;14.4 Version Editor und Source Control;777
18;15 Veröffentlichung im App Store;780
18.1;15.1 Zertifikate, Provisioning Profiles und Ihre App;780
18.1.1;15.1.1 Certificates, IDs & Profiles;782
18.1.2;15.1.2 Erstellen von?.?.?.;784
18.2;15.2 Testen auf dem eigenen Endgerät;797
18.2.1;15.2.1 Setzen des Teams;797
18.2.2;15.2.2 Auswahl Ihres iOS-Geräts;797
18.3;15.3 iTunes Connect und Veröffentlichung im App Store;799
18.3.1;15.3.1 Vorbereiten der App in iTunes Connect;801
18.3.2;15.3.2 Upload der App in den App Store;804
18.3.3;15.3.3 Wie geht es weiter?;805
19;Index;806