Thomas Sillmann
Apps für iOS 10 professionell entwickeln
Sauberen Code schreiben mit Swift 3 und Objective-C. Stabile Apps für iPhone und iPad programmieren. Techniken & Methoden von Grund auf verstehen
Inhalt
8
Vorwort
22
Danksagung
26
1 Über iOS
28
1.1 Was ist iOS?
28
1.1.1 iOS und macOS
29
1.1.2 Besonderheiten der iOS-Plattform
30
1.2 iOS für Entwickler
31
1.2.1 Hardware für Entwickler
31
1.2.2 Software für Entwickler
33
1.2.3 Das Apple Developer Program
33
1.3 Der Aufbau von iOS
35
1.3.1 Die vier Schichten von iOS
35
1.4 Die perfekte iOS-App
37
1.4.1 iOS Human Interface Guidelines
38
2 Die (bisherige) Programmiersprache – Objective-C
40
2.1 Über Objective-C und objektorientierte Programmierung
40
2.2 Grundlagen der Programmierung
41
2.2.1 Objekte
41
2.2.2 Primitive Datentypen
41
2.2.3 Variablen
42
2.2.4 Operatoren
44
2.2.5 Abfragen und Schleifen
44
2.2.6 Kommentare
49
2.3 Aufbau einer Klasse
50
2.3.1 Die Header-Datei
50
2.3.2 Die Implementation-Datei
52
2.3.3 Los geht’s: Unsere erste Klasse!
53
2.4 Methoden
57
2.4.1 Aufbau von Methoden
57
2.4.2 Methoden in Header- und Implementation-Dateien einer Klasse
59
2.4.3 Implementierung von Methoden
61
2.4.4 Methoden aufrufen
63
2.4.5 Klassen- und Instanzmethoden
64
2.5 Instanzvariablen
65
2.6 Properties
67
2.6.1 Aufbau einer Property
67
2.6.2 Die Punktnotation
69
2.6.3 Optionen
70
2.6.4 Direktzugriff auf Properties
72
2.6.5 Setter und Getter überschreiben
74
2.7 Konstanten
76
2.7.1 Deklaration von Konstanten
77
2.8 Namenskonventionen
78
2.8.1 Klassen
78
2.8.2 Methoden
78
2.8.3 Properties
79
2.9 Strukturen
79
2.9.1 enum
79
2.9.2 typedef
80
2.10 Initialisierung von Objekten
81
2.10.1 alloc und init
82
2.10.2 Zeiger
84
2.11 init im Detail
85
2.11.1 Erstellen eigener init-Methoden
87
2.11.2 Designated Initializer
88
2.12 Vererbung
90
2.12.1 Methoden der Superklasse überschreiben
92
2.13 Kategorien
94
2.13.1 Aufbau von Kategorien
94
2.13.2 Kategorien in Xcode erstellen
95
2.13.3 Verwenden von Kategorien
97
2.14 Erweiterungen
97
2.14.1 Aufbau von Erweiterungen
98
2.14.2 Erweiterungen innerhalb der Implementation-Datei
98
2.14.3 Erweiterungen in Xcode erstellen
99
2.15 Protokolle
100
2.15.1 Aufbau von Protokollen
101
2.15.2 Zuweisen eines Protokolls zu einer Klasse
102
2.15.3 Vererbung in Protokollen
103
2.15.4 Protokolle in Xcode erstellen
103
2.16 #import und @class
105
2.16.1 #import
105
2.16.2 @class
106
2.17 Blöcke
107
2.17.1 Was sind Blöcke?
108
2.17.2 Aufbau eines Blocks
108
2.17.3 Zuweisen eines Blocks zu einer Variablen
109
2.17.4 Nutzen eines Blocks als Parameter einer Methode
110
2.17.5 Blöcke als Properties
112
2.17.6 Blockvariablen
112
2.17.7 Globale Blöcke
113
2.18 Singletons
114
3 Der Neue im Club – Swift
116
3.1 Programmierst du noch oder swifst du schon?
116
3.1.1 Über Swift
116
3.1.2 Voraussetzungen zur Nutzung von Swift
117
3.1.3 Swift und Objective-C
117
3.1.4 Playgrounds
118
3.2 Grundlagen der Programmierung
120
3.2.1 Swift Standard Library und Fundamental Types
120
3.2.2 Variablen und Konstanten
122
3.2.3 Operatoren
124
3.2.4 Abfragen und Schleifen
125
3.2.5 Kommentare
132
3.2.6 print
133
3.3 Fundamental Types und Swift Standard Library im Detail
135
3.3.1 Strings
135
3.3.2 Arrays
138
3.3.3 Dictionaries
143
3.3.4 Any und AnyObject
147
3.4 Aufbau einer Klasse
147
3.4.1 Erstellen einer Instanz einer Klasse
150
3.4.2 Zugriff auf Eigenschaften einer Klasse
150
3.5 Methoden
151
3.5.1 Methoden mit Rückgabewert
152
3.5.2 Methoden mit Parametern
153
3.5.3 Local und External Parameter Names
156
3.5.4 Methodennamen in Swift
158
3.5.5 Aufruf von Methoden einer Klasse
159
3.5.6 Zugriff auf andere Eigenschaften und Methoden einer Klasse
160
3.5.7 Klassen- und Instanzmethoden
161
3.5.8 Verändern von Parametern einer Methode mittels inout
163
3.6 Closures
164
3.6.1 Closures als Variablen und Konstanten
166
3.6.2 Closures als Parameter für Methoden
167
3.6.3 Kurzschreibweise für Closures als Parameter von Methoden
170
3.7 Properties
173
3.7.1 Computed Properties
174
3.7.2 Property Observers
177
3.7.3 Type Properties
178
3.8 Vererbung
179
3.8.1 Überschreiben von Eigenschaften und Methoden der Superklasse
181
3.8.2 Zugriff auf Eigenschaften und Methoden der Superklasse
182
3.9 Optionals
183
3.9.1 Deklaration von Optionals
183
3.9.2 Zugriff auf Optionals
184
3.10 Initialisierung
187
3.10.1 Schreiben von Initializern
188
3.10.2 Designated und Convenience Initializer
193
3.10.3 Initializer und Vererbung
194
3.10.4 Deinitialisierung
196
3.11 Type Casting
197
3.11.1 Typ prüfen
197
3.11.2 Downcasting
199
3.12 Enumerations
201
3.12.1 Zusätzliche Werte in Membern einer Enumeration speichern
202
3.13 Structures
204
3.14 Generics
205
3.14.1 Generic Function
207
3.14.2 Generic Type
209
3.15 Error Handling Model
211
3.16 Extensions
214
3.17 Protocols
215
3.17.1 Protocol Type
216
3.18 Access Control
218
4 Grundlagen der iOS-Entwicklung
220
4.1 Foundation-Framework
220
4.1.1 Die wichtigsten Klassen aus dem Foundation-Framework und ihre Funktionen
221
4.2 UIKit-Framework
226
4.3 Speicherverwaltung
226
4.4 Besonderheiten von Objective-C
230
4.4.1 Kurzschreibweisen zum Erstellen von Objekten
230
4.4.2 Vergleichen der Werte von verschiedenen Objekten
233
4.4.3 Schlüsselwörter zum Zusammenspiel mit Optionals
234
4.5 Besonderheiten von Swift
235
4.5.1 Zusammenspiel zwischen Fundamental Types und Foundation-Framework-Klassen
235
4.5.2 Playgrounds im Detail
235
4.6 ObjectiveC und Swift vereint
239
4.6.1 ObjectiveC-Code in Swift verwenden
240
4.6.2 Swift-Code in Objective-C verwenden
241
4.7 NSError
241
4.7.1 Eigene Methode mit NSError-Parameter erstellen
243
4.8 Dokumentation
244
4.8.1 Besonderheiten bei Methoden
245
4.8.2 Doxygen-Dokumentation in Xcode
247
4.9 Nebenläufigkeit mit Grand Central Dispatch
248
4.9.1 Parallel laufenden Code erstellen
249
4.10 Grundlegende Struktur einer App
251
4.10.1 main.m
251
4.10.2 Info.plist
252
4.10.3 App Delegate
252
4.11 Lebenszyklus einer iOS-App
253
4.11.1 Start einer App
253
4.11.2 Lebenszyklus einer App
254
4.11.3 Die Methoden des App Delegate
255
4.11.4 Start der App
256
4.12 Tipps für die tägliche Arbeit
258
4.12.1 Die netten Kleinigkeiten .?.?.
258
4.12.2 Fast Enumeration in ObjectiveC
259
4.12.3 Type Casting in ObjectiveC
259
4.12.4 Xcode-Beispielprojekte
260
5 Die Entwicklungsumgebung – Xcode
262
5.1 Willkommen bei Xcode!
262
5.1.1 Was ist Xcode?
263
5.1.2 Interface Builder und Xcode – endlich vereint!
263
5.2 Arbeiten mit Xcode
264
5.2.1 Dateien und Formate eines Xcode-Projekts
264
5.2.2 Umgang mit Dateien und Ordnern in Xcode
269
5.3 Der Aufbau von Xcode
272
5.3.1 Die Toolbar
272
5.3.2 Die Navigation Area
274
5.3.3 Die Editor Area
277
5.3.4 Die Utilities Area
279
5.3.5 Die Debug Area
280
5.4 Einstellungen in Xcode
281
5.4.1 Anpassen von Xcode
281
5.4.2 General
281
5.4.3 Accounts
282
5.4.4 Behaviors
283
5.4.5 Navigation
283
5.4.6 Fonts & Colors
284
5.4.7 Text Editing
285
5.4.8 Key Bindings
285
5.4.9 Source Control
286
5.4.10 Components
287
5.4.11 Locations
287
5.5 Projekteinstellungen
288
5.5.1 Grundlagen
288
5.5.2 Einstellungen am Projekt
290
5.5.3 Einstellungen am Target
293
5.5.4 Einstellungen am Scheme
299
5.6 Grafiken und Asset-Bundles
302
5.7 Lokalisierung mit Localizable.strings
304
5.7.1 Grundlagen
304
5.7.2 NSLocalizedString
304
5.7.3 Erstellen der Localizable.strings-Datei
305
5.7.4 Localized String mit Parameter
307
5.7.5 Alle Localized Strings automatisch auslesen
308
5.8 Der iOS-Simulator
309
5.8.1 Grundlagen
309
5.8.2 Funktionen und Möglichkeiten des Simulators
309
5.8.3 Performance und Einschränkungen des Simulators
313
5.9 Dokumentation
313
5.9.1 Nichts geht über die Dokumentation!
313
5.9.2 Das Documentation-Window
316
5.9.3 Direktes Aufrufen der Dokumentation aus Xcode heraus
319
5.10 Devices
320
5.11 Organizer
322
5.12 Debugging in Xcode
325
5.12.1 Was ist Debugging?
325
5.12.2 Die Debug Area
325
5.12.3 Die Arbeit mit dem Debugger – NSLog und Breakpoints
326
5.12.4 Debug Navigator
335
5.13 Refactoring
336
5.13.1 Grundlagen
336
5.13.2 Refactoring-Funktionen in Xcode
337
5.14 Instruments
340
5.14.1 Über Instruments
340
5.14.2 Nächste Schritte
343
5.15 Tipps für die tägliche Arbeit
343
5.15.1 Man lernt immer was dazu!
343
5.15.2 Code Snippets
344
5.15.3 Open Quickly
345
5.15.4 Caller einer Methode feststellen
346
5.15.5 Speicherorte für Ordner und Dateien ändern
347
5.15.6 Shortcuts für die Navigation Area
347
5.15.7 Run Without Building
348
5.15.8 Clean Build
349
6 MVC – Model-View-Controller
350
6.1 MVC .?.?. was?
350
6.2 MVC in der Praxis
352
6.3 Kommunikation zwischen Model und Controller
352
6.3.1 Key-Value-Observing
353
6.3.2 Notifications
359
6.4 Kommunikation zwischen View und Controller
362
6.4.1 Target-Action
362
6.4.2 Delegation
364
7 Die Vielfalt der (View-)Controller
366
7.1 Alles beginnt mit einem View-Controller .?.?.
366
7.2 UIViewController – die Mutter aller View-Controller
368
7.2.1 Wichtige Methoden von UIViewController
370
7.2.2 UIView – fester Bestandteil eines jeden UIViewControllers
372
7.3 View-Controller-Hierarchien
373
7.4 View-Controller erstellen mit dem Interface Builder
375
7.4.1 View-Controller mit NIB-File
376
7.5 Storyboards
406
7.5.1 Über Storyboards
406
7.5.2 Das Storyboard-Projekt
407
7.5.3 Die Klasse UIStoryboard
417
7.5.4 Segues
419
7.5.5 Zugriff über den App Delegate
422
7.5.6 Quo vadis – Storyboard oder NIB-File?
423
7.6 Auto Layout
424
7.6.1 Setzen und Konfigurieren von Constraints
424
7.6.2 Constraints bearbeiten und weiter anpassen
426
7.6.3 „Optimale“ Constraints automatisch setzen lassen
428
7.7 UIViewController und seine Subklassen
429
7.7.1 UINavigationController
430
7.7.2 UITabBarController
436
7.7.3 UITableViewController
440
7.7.4 UICollectionViewController
447
7.7.5 UISplitViewController
448
8 Views erstellen und gestalten
452
8.1 Über Views in iOS
452
8.2 UIView – die Mutter aller Views
452
8.3 Arbeiten mit UIView
453
8.3.1 Programmatisches Erstellen einer UIView
453
8.3.2 View-Hierarchien
455
8.3.3 Weiterführendes zu UIView
459
8.4 Views erstellen mit dem Interface Builder
460
8.4.1 Grundlagen
460
8.4.2 View-Klasse mit NIB-File erstellen
461
8.4.3 Beliebiges NIB-File laden und verwenden
465
8.4.4 NIB-File nachträglich erstellen
466
8.4.5 Unterschiedliche NIB-Files für iPhone und iPad erstellen
468
8.5 Die wichtigsten Views und ihre Funktionen
470
8.5.1 Grundlagen
470
8.5.2 UILabel
470
8.5.3 UIButton
470
8.5.4 UISwitch
471
8.5.5 UISegmentedControl
471
8.5.6 UITextField
471
8.5.7 UIImageView
472
8.5.8 UIPickerView
472
8.5.9 UIDatePicker
473
8.5.10 UIWebView
473
8.5.11 UIMapView
474
8.5.12 UIScrollView
474
8.5.13 UITextView
475
8.5.14 UITableView
476
8.5.15 UICollectionView
476
8.5.16 Wichtig und unerlässlich: die Dokumentation!
476
8.5.17 Views und der Interface Builder
477
8.6 Die Grundlage gut gestalteter Views
477
9 Das Model und die Datenhaltung
480
9.1 Die Logik Ihrer App
480
9.2 Benutzereinstellungen sichern und nutzen
481
9.2.1 Über UserDefaults
481
9.2.2 Standardeinstellungen festlegen
484
9.3 Zugriff auf das Dateisystem
484
9.3.1 Das Dateisystem von iOS
484
9.3.2 FileManager
486
9.3.3 File-Sharing-Funktion nutzen
493
9.4 Core Data
494
9.4.1 Datenbankverwaltung mit Core Data
494
9.4.2 Wie funktioniert Core Data?
495
9.4.3 Die Klassen und Bestandteile von Core Data
496
9.4.4 Aufbau eines Standard-Core Data Stacks
497
9.4.5 Der Core Data-Editor
500
9.4.6 Erstellen eines neuen Managed-Objects
508
9.4.7 Löschen eines Managed-Objects
509
9.4.8 Laden von Managed-Objects
509
9.4.9 Was kommt als Nächstes?
511
10 Local und Push Notifications
512
10.1 Was sind Notifications?
512
10.2 Registrieren von Notification Types
514
10.3 Registrieren von Notification Categories und Actions
518
10.3.1 Erstellen einer Action
518
10.3.2 Erstellen einer Kategorie
520
10.3.3 Registrieren von Kategorien
522
10.3.4 Reagieren auf eine Action
523
10.4 Local Notifications
525
10.4.1 Konfiguration des Alerts
525
10.4.2 Konfiguration des Sounds
527
10.4.3 Konfiguration des Badge Values
528
10.4.4 Konfiguration von Audio, Bildern und Videos
528
10.4.5 Speichern zusätzlicher Informationen in einer Local Notification
530
10.4.6 Festlegen des Ausführungsereignisses
531
10.4.7 Erstellen von Notification Requests
535
10.4.8 Registrieren von Local Notifications im System
536
10.4.9 Abbrechen bereits registrierter Local Notifications
537
10.4.10 Reagieren auf den Erhalt einer Notification bei aktiver App
537
10.5 Push Notifications
539
10.5.1 Versand von Push Notifications
540
10.5.2 Erstellen einer Push Notification
544
10.5.3 Quality of Service
547
11 Extensions
548
11.1 Verfügbare Typen von Extensions
548
11.2 Erstellen von Extensions in Xcode
551
11.3 Funktionsweise einer Extension
554
11.4 Wichtige Klassen und Objekte
555
11.5 Unterstützte Dateitypen für Share- und Action-Extensions festlegen
556
11.6 Action Extension
557
11.6.1 Action mit User Interface
557
11.6.2 Action ohne User Interface
558
11.7 Content Blocker Extension
559
11.7.1 Konfiguration eines Content Blockers
560
11.7.2 Aktualisieren eines Content Blockers
563
11.7.3 Die Klasse ContentBlockerRequestHandler
563
11.8 Custom Keyboard
564
11.8.1 Erstellen eines Custom Keyboards
564
11.8.2 Arbeit mit der Klasse UIInputViewController
565
11.8.3 Bearbeiten und Setzen von Text
567
11.8.4 Mehrsprachige Keyboards
568
11.9 Document Provider
568
11.9.1 Document Provider-Extension
569
11.9.2 File Provider
572
11.9.3 Document Provider aufrufen
574
11.10 iMessage Extension
576
11.10.1 Aufbau und Funktionsweise der iMessage Extension
576
11.10.2 Entwicklung einer iMessage Extension
580
11.11 Intents Extension
591
11.11.1 Domains und Intents
592
11.11.2 Bestandteile einer Intents Extension
593
11.11.3 Funktionsweise einer Intents Extension
594
11.11.4 Übersicht über verfügbare Intents
603
11.11.5 Voraussetzungen zur Verwendung von Siri in einer Intents Extension
605
11.11.6 Erweitern von Siris Vokabular
608
11.11.7 Testen einer Intents Extension
614
11.12 Intents UI Extension
615
11.12.1 Vorbereitung der Intents UI Extension
616
11.12.2 Konfiguration des View-Controllers
617
11.12.3 Default-Layout bei Maps und Messaging deaktivieren
619
11.13 Notification Content Extension
619
11.13.1 UNNotificationContentExtension
619
11.13.2 Konfiguration der Info.plist-Datei
621
11.14 Notification Service Extension
622
11.15 Photo Editing Extension
623
11.15.1 Festlegen der unterstützten Typen zur Bearbeitung
627
11.16 Share Extension
628
11.17 Shared Links Extension
629
11.17.1 Erstellen eines NSExtensionItem
630
11.17.2 NSExtensionItem als Shared Link bereitstellen
631
11.18 Sticker Pack Extension
632
11.18.1 Erstellen einer Sticker Pack Extension
633
11.18.2 Komplexere Sticker Pack Extensions erstellen
637
11.19 Today Extension
639
11.19.1 Today Extension testen
641
11.20 Watch App
642
11.21 App Groups
642
11.21.1 Registrieren einer App Group im Apple Developer Portal
643
11.21.2 Registrieren einer App Group innerhalb einer App
644
11.21.3 Zugriff auf eine App Group
645
12 App-Entwicklung für die Apple Watch
648
12.1 Apples neues großes Ding: Die Apple Watch
648
12.2 Möglichkeiten, Einschränkungen, Unterschiede
649
12.3 Das WatchKit SDK
651
12.3.1 WKInterfaceController
652
12.3.2 WKInterfaceObject
652
12.3.3 WKExtensionDelegate
653
12.3.4 Weitere Klassen
653
12.4 Aufbau und Funktionsweise von Apple Watch-Apps
654
12.4.1 iPhone-App
654
12.4.2 WatchKit Extension
654
12.4.3 WatchKit App
655
12.4.4 Verbindung von WatchKit Extension und WatchKit App
655
12.4.5 Notification Scene
655
12.4.6 Complications
656
12.5 Erstellen einer WatchKit App mitsamt WatchKit Extension
656
12.5.1 Dateien der WatchKit Extension
659
12.5.2 Dateien der WatchKit App
660
12.5.3 Ausführen und Testen der Apple Watch-App
661
12.6 Lebenszyklus einer WatchKit App
662
12.7 Der WKInterfaceController im Detail
664
12.7.1 Initialisierung
664
12.7.2 Activation Events
666
12.7.3 Setzen des Titels
666
12.7.4 Ein- und Ausblenden von Interface-Controllern
667
12.7.5 Umsetzen eines Navigation Stacks
669
12.7.6 Reaktion auf Storyboard-Events
670
12.7.7 Weitere Attribute
671
12.7.8 Weitere Funktionen von WKInterfaceController
672
12.8 Arbeiten mit dem Interface-Storyboard einer WatchKit App
672
12.8.1 Erstellen und Konfigurieren eines WKInterfaceController
673
12.8.2 Hinzufügen und Konfigurieren von Interface-Elementen
675
12.8.3 Positionierung und Anordnung von Interface-Elementen
676
12.8.4 Ändern der Größe von Interface-Elementen
676
12.8.5 Unterschiedliche Konfigurationen für verschiedene Apple Watch-Größen
678
12.8.6 Gruppierung von Interface-Elementen mittels WKInterfaceGroup
680
12.8.7 Verbindung von Storyboard und Code
682
12.8.8 Zusammenfassen mehrerer Interface-Controller zu einem page-based Interface
686
12.8.9 Erstellen und Konfigurieren von Segues
686
12.9 Erstellen von Tabellen
689
12.9.1 Hinzufügen einer Tabelle im Storyboard
689
12.9.2 Konfiguration einer Zelle
690
12.9.3 Konfiguration einer Tabelle
694
12.9.4 Verwenden verschiedener Zellen in einer Tabelle
696
12.9.5 Zellen hinzufügen und entfernen
699
12.9.6 Direkt zu einer bestimmten Zelle scrollen
700
12.9.7 Aktuelle Anzahl an Zellen auslesen
700
12.9.8 Auf die Auswahl einer Zelle reagieren
701
12.9.9 Segues von Zellen einer Tabelle über das Storyboard konfigurieren
702
12.10 Erstellen von Menüs
703
12.10.1 Erstellen eines Menüs im Storyboard
704
12.10.2 Erstellen eines Menüs im Code
708
12.10.3 Fazit: Menüerstellung im Storyboard oder im Code?
710
12.10.4 Mischen von Menüpunkten aus Storyboard und Code
711
12.11 Eingabe von Text
711
12.12 Notification Scene
713
12.12.1 Short-Look und Long-Look Interface
714
12.12.2 Long-Look Interface im Detail
715
12.12.3 Erstellen eigener Notification Scenes
716
12.12.4 Testen einer Notification Scene
724
12.13 Complications
724
12.13.1 Was sind Complications?
725
12.13.2 Das ClockKit Framework
725
12.13.3 Aufbau und Bestandteile von Complications
725
12.13.4 Vorbereiten des eigenen Projekts
729
12.13.5 Entwicklung einer Complication
731
12.13.6 Bereitstellen der Complication mittels CLKComplicationDataSource
736
12.14 Kommunikation und Datenaustausch zwischen iOS und watchOS
739
12.14.1 Watch Connectivity
740
12.15 Was sonst noch zu sagen und zu beachten ist
745
13 Tests
748
13.1 Unit-Tests
748
13.1.1 Aufbau und Funktionsweise von Unit-Tests
753
13.1.2 Aufbau einer Test-Case-Klasse
755
13.1.3 Neue Test-Case-Klasse erstellen
757
13.1.4 Ausführen von Unit-Tests
759
13.1.5 Was sollte ich eigentlich testen?
761
13.2 Performance-Tests
761
13.3 UI-Tests
763
13.3.1 Klassen für UI-Tests
764
13.3.2 Aufbau von UI-Test-Klassen
767
13.3.3 Automatisches Erstellen von UI-Tests
767
13.3.4 Einsatz von UI-Tests
768
13.4 Test-Driven Development
768
14 Versionierung
770
14.1 Über Versionskontrolle
770
14.2 Basisfunktionen und -begriffe von Git
771
14.2.1 Begriffe
771
14.2.2 Funktionen
771
14.3 Source Control in Xcode
773
14.4 Version Editor und Source Control
777
15 Veröffentlichung im App Store
780
15.1 Zertifikate, Provisioning Profiles und Ihre App
780
15.1.1 Certificates, IDs & Profiles
782
15.1.2 Erstellen von?.?.?.
784
15.2 Testen auf dem eigenen Endgerät
797
15.2.1 Setzen des Teams
797
15.2.2 Auswahl Ihres iOS-Geräts
797
15.3 iTunes Connect und Veröffentlichung im App Store
799
15.3.1 Vorbereiten der App in iTunes Connect
801
15.3.2 Upload der App in den App Store
804
15.3.3 Wie geht es weiter?
805
Index
806
© 2009-2023 ciando GmbH