Thomas Sillmann
Das Swift-Handbuch
Apps programmieren für macOS, iOS, watchOS und tvOS
2., aktualisierte Auflage
Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.
Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Bibliografische Information der Deutschen Nationalbibliothek:
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
Dieses Werk ist urheberrechtlich geschützt.
Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.
© 2022 Carl Hanser Verlag München, www.hanser-fachbuch.de
Lektorat: Sylvia Hasselbach
Copy editing: Walter Saumweber, Ratingen
Umschlagdesign: Marc Müller-Bremer, München, www.rebranding.de
Umschlagrealisation: Max Kostopoulos
Ausstattung patentrechtlich geschützt. Kösel FD 351, Patent-Nr. 0748702
Print-ISBN: 978-3-446-46782-8
E-Book-ISBN: 978-3-446-46963-1
E-Pub-ISBN: 978-3-446-47286-0
Update inside.
Mit unserem kostenlosen Update-Service
zum Buch erhalten Sie aktuelle Infos zu den neuen Versionen von Swift, Xcode, macOS, iOS, watchOS und tvOS.
Und so funktioniert es:
1. Registrieren Sie sich unter:
www.hanser-fachbuch.de/swift-update
2. Geben Sie diesen Code ein:
3TLr-EpVw-uR9-n83m
Der Update-Service läuft bis Dezember 2023.
Als registrierter Nutzer werden Sie in diesem Zeitraum persönlich per E-Mail informiert,sobald ein neues Buch-Update zum Download verfügbar ist.
Wenn Sie Fragen haben, wenden Sie sich gerne an:
swift-update@hanser.de
„Bis zum Mond und wieder zurück haben wir uns lieb.“
Für meinen Vater
Wo Du auch bist, Du begleitest mich auf meiner Reise – bis zu jenem Tag, an dem wir uns wiedersehen und uns viele Geschichten erzählen werden.
Titelei
Impressum
Inhalt
Vorwort
Teil I: Swift
1 Die Programmiersprache Swift
1.1 Die Geschichte von Swift
1.2 Die Bedeutung von Swift im Apple-Kosmos
1.3 Das neue UI-Framework: SwiftUI
1.4 Was Sie als App-Entwickler brauchen
1.5 Programmieren für Beginner (und darüber hinaus): Playgrounds
1.6 Weitere wichtige Ressourcen
1.6.1 Apple-Developer-App
1.6.2 Apples Developer-Website
1.6.3 Swift. org
1.6.4 In eigener Sache
2 Grundlagen der Programmierung
2.1 Grundlegendes
2.1.1 Swift Standard Library
2.1.2 print
2.1.3 Befehle und Semikolons
2.1.4 Operatoren
2.2 Variablen und Konstanten
2.2.1 Erstellen von Variablen und Konstanten
2.2.2 Variablen und Konstanten in der Konsole ausgeben
2.2.3 Type Annotation und Type Inference
2.2.4 Gleichzeitiges Erstellen und Deklarieren mehrerer Variablen und Konstanten
2.2.5 Namensrichtlinien
2.3 Kommentare
3 Schleifen und Abfragen
3.1 Schleifen
3.1.1 For-In
3.1.2 While
3.1.3 Repeat-While
3.2 Abfragen
3.2.1 If
3.2.2 Switch
3.2.3 Guard
3.3 Control Transfer Statements
3.3.1 Anstoßen eines neuen Schleifendurchlaufs mit continue
3.3.2 Verlassen der kompletten Schleife mit break
3.3.3 Labeled Statements
4 Typen in Swift
4.1 Integer
4.2 Fließkommazahlen
4.3 Bool
4.4 String
4.4.1 Erstellen eines Strings
4.4.2 Zusammenfügen von Strings
4.4.3 Character auslesen
4.4.4 Character mittels Index auslesen
4.4.5 Character entfernen und hinzufügen
4.4.6 Anzahl der Character zählen
4.4.7 Präfix und Suffix prüfen
4.4.8 String Interpolation
4.5 Array
4.5.1 Erstellen eines Arrays
4.5.2 Zusammenfügen von Arrays
4.5.3 Inhalte eines Arrays leeren
4.5.4 Prüfen, ob ein Array leer ist
4.5.5 Anzahl der Elemente eines Arrays zählen
4.5.6 Zugriff auf die Elemente eines Arrays
4.5.7 Neue Elemente zu einem Array hinzufügen
4.5.8 Bestehende Elemente aus einem Array entfernen
4.5.9 Bestehende Elemente eines Arrays ersetzen
4.5.10 Alle Elemente eines Arrays auslesen und durchlaufen
4.6 Set
4.6.1 Erstellen eines Sets
4.6.2 Inhalte eines bestehenden Sets leeren
4.6.3 Prüfen, ob ein Set leer ist
4.6.4 Anzahl der Elemente eines Sets zählen
4.6.5 Element zu einem Set hinzufügen
4.6.6 Element aus einem Set entfernen
4.6.7 Prüfen, ob ein bestimmtes Element in einem Set vorhanden ist
4.6.8 Alle Elemente eines Sets auslesen und durchlaufen
4.6.9 Sets miteinander vergleichen
4.6.10 Neue Sets aus bestehenden Sets erstellen
4.7 Dictionary
4.7.1 Erstellen eines Dictionaries
4.7.2 Prüfen, ob ein Dictionary leer ist
4.7.3 Anzahl der Schlüssel-Wert-Paare eines Dictionaries zählen
4.7.4 Wert zu einem Schlüssel eines Dictionaries auslesen
4.7.5 Neues Schlüssel-Wert-Paar zu Dictionary hinzufügen
4.7.6 Bestehendes Schlüssel-Wert-Paar aus Dictionary entfernen
4.7.7 Bestehendes Schlüssel-Wert-Paar aus Dictionary verändern
4.7.8 Alle Schlüssel-Wert-Paare eines Dictionaries auslesen und durchlaufen
4.8 Tuple
4.8.1 Zugriff auf die einzelnen Elemente eines Tuples
4.8.2 Tuple und switch
4.9 Optional
4.9.1 Deklaration eines Optionals
4.9.2 Zugriff auf den Wert eines Optionals
4.9.3 Optional Binding
4.9.4 Implicitly Unwrapped Optional
4.9.5 Optional Chaining
4.9.6 Optional Chaining über mehrere Eigenschaften und Funktionen
4.10 Any und AnyObject
4.11 Type Alias
4.12 Value Type versus Reference Type
4.12.1 Reference Types auf Gleichheit prüfen
5 Funktionen
5.1 Funktionen mit Parametern
5.1.1 Argument Labels und Parameter Names
5.1.2 Default Value für Parameter
5.1.3 Variadic Parameter
5.1.4 In-Out-Parameter
5.2 Funktionen mit Rückgabewert
5.3 Function Types
5.3.1 Funktionen als Variablen und Konstanten
5.4 Verschachtelte Funktionen
5.5 Closures
5.5.1 Closures als Parameter von Funktionen
5.5.2 Trailing Closures
5.5.3 Autoclosures
6 Enumerations, Structures und Classes
6.1 Enumerations
6.1.1 Enumerations und switch
6.1.2 Associated Values
6.1.3 Raw Values
6.2 Structures
6.2.1 Erstellen von Structures und Instanzen
6.2.2 Eigenschaften und Funktionen
6.3 Classes
6.3.1 Erstellen von Klassen und Instanzen
6.3.2 Eigenschaften und Funktionen
6.4 Enumeration vs. Structure vs. Class
6.4.1 Gemeinsamkeiten und Unterschiede
6.4.2 Wann nimmt man was?
6.5 self
7 Eigenschaften und Funktionen von Typen
7.1 Properties
7.1.1 Stored Property
7.1.2 Lazy Stored Property
7.1.3 Computed Property
7.1.4 Read-Only Computed Property
7.1.5 Property Observer
7.1.6 Property Wrapper
7.1.7 Type Property
7.2 Globale und lokale Variablen
7.3 Methoden
7.3.1 Instance Methods
7.3.2 Type Methods
7.4 Subscripts
8 Initialisierung
8.1 Aufgabe der Initialisierung
8.2 Erstellen eigener Initializer
8.3 Initializer Delegation
8.3.1 Initializer Delegation bei Value Types
8.3.2 Initializer Delegation bei Reference Types
8.4 Failable Initializer
8.5 Required Initializer
8.6 Deinitialisierung
9 Vererbung
9.1 Überschreiben von Eigenschaften und Funktionen einer Klasse
9.2 Überschreiben von Eigenschaften und Funktionen einer Klasse verhindern
9.3 Zugriff auf die Superklasse
9.4 Initialisierung und Vererbung
9.4.1 Zwei-Phasen-Initialisierung
9.4.2 Überschreiben von Initializern
9.4.3 Vererbung von Initializern
9.4.4 Required Initializer
10 Speicherverwaltung mit ARC
10.1 Strong Reference Cycles
10.1.1 Weak References
10.1.2 Unowned References
10.1.3 Weak Reference vs. Unowned Reference
11 Weiterführende Sprachmerkmale von Swift
11.1 Nested Types
11.2 Extensions
11.2.1 Computed Properties
11.2.2 Methoden
11.2.3 Initializer
11.2.4 Subscripts
11.2.5 Nested Types
11.3 Protokolle
11.3.1 Deklaration von Eigenschaften und Funktionen
11.3.2 Der Typ eines Protokolls
11.3.3 Protokolle und Extensions
11.3.4 Vererbung in Protokollen
11.3.5 Class-only-Protokolle
11.3.6 Optionale Eigenschaften und Funktionen
11.3.7 Protocol Composition
11.3.8 Delegation
11.3.9 Übersicht diverser vorhandener Protokolle
11.4 Key-Path
12 Type Checking und Type Casting
12.1 Type Checking mit „is“
12.2 Type Casting mit „as“
13 Error Handling
13.1 Deklaration und Feuern eines Fehlers
13.2 Reaktion auf einen Fehler
13.2.1 Mögliche Fehler mittels do-catch auswerten
13.2.2 Mögliche Fehler in Optionals umwandeln
13.2.3 Mögliche Fehler weitergeben
13.2.4 Mögliche Fehler ignorieren
14 Generics
14.1 Generic Functions
14.2 Generic Types
14.3 Type Constraints
14.4 Associated Types
15 Nebenläufigkeit
15.1 Asynchronen Code schreiben und aufrufen
15.2 Mehrere asynchrone Funktionen parallel ausführen
15.3 Actors
16 Dateien und Interfaces
16.1 Modules und Source Files
16.2 Access Control
16.2.1 Access Level
16.2.2 Explizite und implizite Zuweisung eines Access Levels
16.2.3 Besonderheiten
Teil II: Xcode
17 Grundlagen, Aufbau und Einstellungen von Xcode
17.1 Über Xcode
17.2 Arbeiten mit Xcode
17.2.1 Dateien und Formate eines Xcode-Projekts
17.2.2 Umgang mit Dateien und Ordnern
17.3 Der Aufbau von Xcode
17.3.1 Toolbar
17.3.2 Navigator
17.3.3 Editor
17.3.4 Inspectors
17.3.5 Debug Area
17.4 Einstellungen
17.4.1 General
17.4.2 Accounts
17.4.3 Behaviors
17.4.4 Navigation
17.4.5 Themes
17.4.6 Text Editing
17.4.7 Key Bindings
17.4.8 Source Control
17.4.9 Components
17.4.10 Locations
17.4.11 Server & Bots
17.5 Projekteinstellungen
17.5.1 Einstellungen am Projekt
17.5.2 Einstellungen am Target
17.5.3 Einstellungen am Scheme
18 Dokumentation, Devices und Organizer
18.1 Dokumentation
18.1.1 Aufbau und Funktionsweise
18.1.2 Direktzugriff im Editor
18.2 Devices und Simulatoren
18.2.1 Simulatoren
18.2.2 Devices
18.3 Organizer
19 Debugging und Refactoring
19.1 Debugging
19.1.1 Konsolenausgaben
19.1.2 Arbeiten mit Breakpoints
19.1.3 Debug Navigator
19.2 Refactoring
19.3 Instruments
20 Tipps und Tricks für das effiziente Arbeiten mit Xcode
20.1 Code Snippets
20.2 Open Quickly
20.3 Related Items
20.4 Navigation über die Jump Bar
20.5 MARK, TODO und FIXME
20.6 Shortcuts für den Navigator
20.7 Clean Build
20.8 Playgrounds
Teil III: App-Entwicklung
21 Grundlagen der App-Entwicklung
21.1 Die Basis: SwiftUI
21.2 Bestandteile einer App
21.2.1 Umsetzung der Daten
21.2.2 Umsetzung der Ansichten
21.2.3 Weitere Frameworks
21.3 Die Syntax von SwiftUI
21.4 Aufbau einer App
21.5 Das View-Protokoll
21.6 Aktualisierung von Views mittels Status
21.7 Grundlagen des Status
21.8 Anpassung von Views mittels Modifier
21.9 Gruppierung von Views mittels Containern
21.10 Praxis: Unsere erste App
21.10.1 Bestandteile des neuen Projekts
21.10.2 Änderung des Textes
21.10.3 Einsatz der Preview
22 Views in SwiftUI
22.1 Textdarstellung und -bearbeitung
22.1.1 Text
22.1.2 TextField
22.1.3 SecureField
22.1.4 TextEditor
22.2 Bilder
22.2.1 Image-Instanz erstellen
22.2.2 Größe einer Image-Instanz ändern
22.3 Schaltflächen
22.3.1 Button
22.3.2 EditButton
22.3.3 PasteButton
22.4 Werteauswahl
22.4.1 Toggle
22.4.2 Slider
22.4.3 Stepper
22.4.4 Picker
22.4.5 DatePicker
22.4.6 ColorPicker
22.5 Werteindikatoren
22.5.1 Label
22.5.2 ProgressView
22.5.3 Gauge
23 View-Layout
23.1 Stacks
23.1.1 HStack
23.1.2 VStack
23.1.3 ZStack
23.1.4 Stacks verschachteln
23.1.5 Lazy Stacks
23.2 Listen
23.2.1 List
23.2.2 ForEach
23.3 Grids
23.4 Container-Views
23.4.1 Form
23.4.2 Section
23.4.3 Group
23.4.4 GroupBox
23.5 Weitere Views
23.5.1 ScrollView
23.5.2 OutlineGroup
23.5.3 DisclosureGroup
23.5.4 Spacer
23.5.5 Divider
24 Navigation
24.1 NavigationView und NavigationLink
24.1.1 Festlegen einer Standard-View für die Detailansicht
24.1.2 NavigationView-Style anpassen
24.1.3 NavigationView-Titel setzen
24.1.4 Navigation-Bar ausblenden
24.1.5 Eigene View zur Darstellung eines NavigationLink nutzen
24.1.6 NavigationLink programmatisch ausführen
24.1.7 Verhalten eines NavigationLink unter iPadOS anpassen
24.2 TabView
24.3 HSplitView und VSplitView
24.4 Funktionen zur Präsentation von Views
24.4.1 Sheet einblenden
24.4.2 View über gesamtes Fenster legen
24.4.3 Popover einblenden
25 Weitere View-Konfigurationen
25.1 Toolbar
25.2 Alerts
25.3 Confirmation Dialog
25.4 Farben
25.5 View-Events
26 Status
26.1 Property
26.2 State
26.3 Binding
26.4 ObservedObject
26.4.1 Datenmodell vorbereiten
26.4.2 Datenmodell in View einbinden
26.4.3 Auf Änderungen reagieren
26.5 StateObject
26.6 EnvironmentObject
26.7 Environment
26.8 SceneStorage
26.9 AppStorage
26.10 Source of Truth vs. Derived Value
26.11 Best Practices
27 Datenhaltung
27.1 UserDefaults
27.1.1 UserDefaults und SwiftUI
27.2 Core Data
27.2.1 Grundlegende Funktionsweise von Core Data
27.2.2 Grundlegende Elemente beim Einsatz von Core Data
27.2.3 Einen Core Data Stack erstellen
27.2.4 Ein Managed Object Model erstellen
27.2.5 Grundlegende Core-Data-Operationen
27.2.6 Core Data mit SwiftUI
28 Weitere Projektkonfigurationen
28.1 Cross-Platform-Entwicklung
28.1.1 Neue Targets hinzufügen
28.1.2 Target-Zuweisung
28.1.3 Plattform im Code prüfen
28.2 Mehrsprachigkeit
28.2.1 Grundlagen
28.2.2 Übersetzungen mit SwiftUI
28.2.3 Verschiedene Sprachen einer App testen
28.3 Asset Catalogs
29 Preview und Library
29.1 Preview
29.1.1 Funktionsweise der Preview
29.1.2 Konfiguration der Preview
29.1.3 Preview ausführen
29.2 Library
29.3 Attributes Inspector
Teil IV: Source Control und Testing
30 Source Control
30.1 Basisfunktionen und -begriffe der Source Control
30.2 Source Control in Xcode
30.2.1 Bestehendes Projekt klonen
30.2.2 Lokale Änderungen committen
30.2.3 Lokale Änderungen verwerfen
30.2.4 Pull und Push
30.2.5 Aktuelle Branches vom Repository laden
30.2.6 Git-Repository mit neuem Xcode-Projekt erzeugen
30.2.7 Optische Source-Control-Hervorhebungen im Editor
30.2.8 Zugriff auf GitHub, GitLab und Bitbucket
30.3 Source Control Navigator
30.4 Code Review-Mode
31 Testing
31.1 Unit-Tests
31.1.1 Aufbau und Funktionsweise von Unit-Tests
31.1.2 Aufbau einer Test-Case-Klasse
31.1.3 Neue Test-Case-Klasse erstellen
31.1.4 Ausführen von Unit-Tests
31.1.5 Was sollte ich eigentlich testen?
31.2 Performancetests
31.3 UI-Tests
31.3.1 Klassen für UI-Tests
31.3.2 Aufbau von UI-Test-Klassen
31.3.3 Automatisches Erstellen von UI-Tests
31.3.4 Einsatz von UI-Tests
Teil V: Veröffentlichung von Apps
32 Veröffentlichung im App Store
32.1 Das Apple Developer Portal
32.1.1 Zertifikate, App IDs und Provisioning Profiles
32.1.2 Code Signing
32.2 App Store Connect
32.2.1 Apps für den App Store vorbereiten und verwalten
32.2.2 Apps erstellen, hochladen und einreichen
32.3 App Store Review Guidelines
33 Das Business Model für Ihre App
33.1 Geschäftsmodelle
33.1.1 Free Model
33.1.2 Freemium Model
33.1.3 Subscription Model
33.1.4 Paid Model
33.1.5 Paymium Model
33.2 App Bundles
33.3 Veröffentlichung außerhalb des App Store
33.3.1 Das Apple Developer Enterprise Program
34 TestFlight
34.1 TestFlight in App Store Connect
34.2 TestFlight im App Store
Vorwort |
Herzlich Willkommen in der Welt von Swift, Apples hauseigener Programmiersprache zur Entwicklung von Apps für iPhone, iPad, Mac und Co.! Da Sie dieses Buch in Händen halten, mutmaße ich, dass Sie mehr über die Programmierung für Apple-Plattformen erfahren oder Ihre ersten Schritte in dieser faszinierenden Welt bestreiten möchten.
Bevor ich Sie in die Welt der Programmierung entführe, möchte ich dieses Vorwort dazu nutzen, einige grundlegende Worte über den Aufbau und die Inhalte dieses Buches zu verlieren. Das soll Ihnen als erste Übersicht und weiterer Wegweiser dienen, um bestmöglich mit dem Buch arbeiten zu können und schnelle Erfolge bei der Programmierung zu erzielen.
Das Buch basiert auf der im Herbst 2021 erschienen Version 5.5 von Swift. Alle Kapitel der ersten Auflage wurden entsprechend aktualisiert sowie um neue Inhalte ergänzt. Ein Highlight stellt hierbei sicherlich ein neues Kapitel zur Nebenläufigkeit dar, das den Einsatz der neuen Schlüsselwörter async und await erläutert.
Auch basieren alle Inhalte des Buches vollständig auf der ebenfalls im Herbst 2021 erschienenen Version 13 von Apples Entwicklungsumgebung Xcode und sie wurden entsprechend aktualisiert. Das betrifft auch die Bereiche Source Control und Testing. Zu guter Letzt finden Sie im Buch aktuelle Infos zur Einreichung von Apps im App Store, mögliche App-Geschäftsmodelle sowie den Einsatz von TestFlight.
Mit dieser zweiten Auflage des Swift-Handbuchs gibt es jedoch eine große Änderung im Vergleich zum ursprünglichen Werk. Das betrifft die Kapitel zur App-Entwicklung für macOS und Co. auf Basis von AppKit, UIKit und WatchKit. Diese wurden durch gänzlich neue Inhalte auf Basis des SwiftUI-Frameworks ersetzt.
Dieser radikal anmutende Schritt hat drei Gründe:
SwiftUI stellt die Zukunft der App-Entwicklung für Apple-Plattformen dar. Seit der erstmaligen Vorstellung auf der WWDC 2019 hat sich das Framework bereits massiv weiterentwickelt und stellt die momentan beste Möglichkeit dar, Apps für iOS und Co. zu entwickeln. Das gilt umso mehr, wenn man frisch in diese Thematik einsteigt.
Der Einstieg in SwiftUI ist deutlich leichter und die Funktionsweise des Frameworks weniger komplex. Haben Sie einmal die Arbeit mit SwiftUI verinnerlicht, können Sie Apps für alle Apple-Plattformen entwickeln, ohne sich separat in mehrere verschiedene Frameworks einarbeiten zu müssen.
SwiftUI zusätzlich zu AppKit, UIKit und WatchKit zu behandeln, hätte schlicht den Rahmen dieses Buches gesprengt. Es war klar, dass nur eine dieser UI-Technologien in diesem Buch Platz finden wird. Und da, wie gesagt, SwiftUI die Zukunft der UI-Entwicklung darstellt, mussten die bisherigen Inhalte zu AppKit, UIKit und WatchKit (leider) weichen.
Diese komplett neuen Kapitel zur App-Entwicklung stellen Ihnen SwiftUI detailliert vor. Sie erfahren so, wie Apples neues UI-Framework funktioniert, welche Views Ihnen zur Verfügung stehen, wie Sie Navigationsstrukturen umsetzen und effizient mit dem Status arbeiten. Sie erhalten so letztlich das Rüstzeug, Apps übergreifend für alle Apple-Plattformen entwickeln zu können. Gleichzeitig sind Sie für zukünftige Updates gewappnet, die SwiftUI um neue spannende Funktionen ergänzen werden.
Da SwiftUI plattformübergreifend funktioniert, nimmt so tatsächlich auch der Umfang dieses Handbuchs ein wenig ab. Das ist schlicht der Tatsache geschuldet, dass ich nicht mehr die Programmiergrundlagen für jedes einzelne System (macOS, iOS, watchOS, tvOS) erläutern muss. Haben Sie die Funktionsweise von SwiftUI einmal verinnerlicht, können Sie dieses Wissen umgehend auf alle verfügbaren Apple-Plattformen übertragen.
Apple veröffentlicht im Jahresrhythmus neue Versionen der Betriebssysteme sowie der Entwicklungsumgebung Xcode. Auch die Programmiersprache Swift wird regelmäßig um Updates ergänzt.
Damit Sie möglichst lange mit diesem Buch arbeiten können, haben Sie die Möglichkeit, sich für den kostenlosen Update inside-Service zu registrieren: Geben Sie unter
www.hanser-fachbuch.de/swift-update
diesen Code ein:
3TLr-EpVw-uR9-n83m
Dann erhalten Sie bis Dezember 2023 Aktualisierungen in Form zusätzlicher Kapitel als PDF. Darin stelle ich Ihnen wichtige Neuerungen vor und gehe auf Änderungen ein, die die Inhalte dieses Buches betreffen.
Mir ist es wichtig, das Buch als Referenzwerk nutzen zu können. Entsprechend finden Sie je einen eigenen Teil zur Programmiersprache Swift, zur Entwicklungsumgebung Xcode sowie zur App-Entwicklung mit SwiftUI. Das ermöglicht es Ihnen, sich separat mit diesen drei Bestandteilen auseinanderzusetzen und notwendige Infos zu erhalten, ohne diese Inhalte im Buch zu vermischen.
Ich möchte Sie in die Lage versetzen, eigene Apps entwickeln zu können. Zu diesem Zweck halte ich die Code-Beispiele im Buch bewusst klein und setze nicht auf die Umsetzung ganzer Projekte. Stattdessen sollen Sie das nötige Wissen erlangen, um Ihre eigenen Anwendungen erstellen zu können und zu diesem Zweck alles über die dafür notwendigen Komponenten erfahren.
Ein solches Grundverständnis erlaubt es Ihnen außerdem, sich selbstständig in weitere Bereiche einzuarbeiten und künftige Neuerungen mithilfe der Dokumentation anzuwenden.
In diesem Sinne wünsche ich Ihnen nun viel Freude mit dem Buch und Erfolg beim Programmieren. Sollten Sie Feedback zum Buch oder Wünsche für kommende Update inside-Kapitel haben, können Sie mich gerne via E-Mail an
contact@thomassillmann.de
kontaktieren.
Ich bin inzwischen seit über zehn Jahren begeisterter Entwickler für die verschiedenen Apple-Plattformen. Ich finde das Apple-Ökosystem, die Programmiersprache Swift und die Entwicklungsumgebung Xcode faszinierend und arbeite jeden Tag voller Begeisterung damit. Ich hoffe, dass ich mit diesem Buch einen Teil meiner Begeisterung auch auf Sie übertragen kann.
Thomas Sillmann
Oktober 2021
Teil I: Swift |
Kapitel 1: Die Programmiersprache Swift
Kapitel 2: Grundlagen der Programmierung
Kapitel 3: Schleifen und Abfragen
Kapitel 4: Typen in Swift
Kapitel 5: Funktionen
Kapitel 6: Enumerations, Structures und Classes
Kapitel 7: Eigenschaften und Funktionen von Typen
Kapitel 8: Initialisierung
Kapitel 9: Vererbung
Kapitel 10: Speicherverwaltung mit ARC
Kapitel 11: Weiterführende Sprachmerkmale von Swift
Kapitel 12: Type Checking und Type Casting
Kapitel 13: Error-Handling
Kapitel 14: Generics
Kapitel 15: Nebenläufigkeit
Kapitel 16: Dateien und Interfaces
1 | Die Programmiersprache Swift |
Nach dem Vorwort heiße ich Sie nun an dieser Stelle ein weiteres Mal recht herzlich willkommen in der faszinierenden Welt von Swift. ☺ Bevor es im zweiten Kapitel konkret mit der Programmierung losgeht, möchte ich Ihnen an dieser Stelle etwas über die Geschichte von Swift, die Bedeutung der Sprache im Apple-Kosmos sowie die Tools erzählen, die für uns als Entwickler unabdingbar sind.
1.1 | Die Geschichte von Swift |
Keine Bange, das soll hier keine langatmige monotone Geschichtsstunde werden. Falls es Sie auch nicht im Geringsten interessieren sollte, wie Swift entstanden ist, dürfen Sie diesen Abschnitt guten Gewissens gerne überspringen; ich wäre Ihnen nicht böse deswegen. ☺ Obwohl ich den Hintergrund, wie Swift das Licht der Welt erblickte, durchaus spannend finde.
Dabei sind viele Details über die genaue Entstehungsgeschichte von Swift gar nicht bekannt. Was man weiß, ist, dass Chris Lattner wohl in gewisser Weise als „Vater“ von Swift bezeichnet werden kann. Er begann die Entwicklung von Swift im Juli 2010 bei Apple aus eigenem Antrieb heraus und zunächst im Alleingang. Ab Ende 2011 kamen dann weitere Entwickler dazu, während das Projekt im Geheimen bei Apple fortgeführt wurde. Das erste Mal zeigte Apple die neue Sprache der Weltöffentlichkeit auf der WWDC (Worldwide Developers Conference) 2014 (siehe Bild 1.1).
Bild 1.1 Auf der WWDC 2014 präsentierte Apple Swift erstmals der Weltöffentlichkeit.
Mit dieser erstmaligen Präsentation von Swift überraschte Apple sowohl Presse als auch Entwickler gleichermaßen. Dabei war die Sprache zunächst – ähnlich wie Objective-C – ausschließlich auf die Plattformen von Apple beschränkt. Ein Mac mitsamt der zugehörigen IDE Xcode von Apple waren also Pflicht, wollte man mit Swift Apps für macOS, iOS, watchOS oder tvOS entwickeln. Im Herbst 2014 folgte dann die erste finale Version von Swift, die Apple den Entwicklern zusammen mit einem Update für Xcode zugänglich machte.
Im darauffolgenden Jahr sorgte Apple auf der WWDC 2015 dann für die nächste große Überraschung. Sie präsentierten nicht nur die neue Version 2 von Swift, sondern gaben auch bekannt, dass Swift noch im gleichen Jahr Open Source werden würde. Dieses Versprechen wurde dann am 03. Dezember 2015 umgesetzt und Apple startete die Plattform Swift.org, um darüber zukünftig alle Weiterentwicklungen und Neuerungen zu Swift zusammenzutragen.
Seitdem hat die Sprache viele weitere Versionssprünge hinter sich und sie entwickelt sich noch immer stetig weiter. Einen großen Beitrag leistet hierbei auch die große Swift-Community, die mögliche Neuerungen und Änderungen vorantreibt.
Heute ist Swift die Sprache der Wahl, wenn es um die Entwicklung von Apps für Apple-Plattformen geht. Darüber hinaus findet Swift aber auch auf immer mehr Systemen wie Linux oder Windows Verwendung, ist dort aber bei weitem nicht so verbreitet wie im Apple-Umfeld.
1.2 | Die Bedeutung von Swift im Apple-Kosmos |
Aus Sicht von Apple ist eines ganz offensichtlich: Swift gehört die Zukunft. Zwar unterstützt Apple noch immer die „alte“ Programmiersprache Objective-C, doch die wird im Gegensatz zu Swift kaum bis gar nicht weiterentwickelt.
Auch ist Swift in bestimmten Bereichen der App-Entwicklung inzwischen ein Muss. Manche Systemfunktionen lassen sich nur mit Swift und nicht mit Objective-C ansteuern. So zeigt Apple auf sehr drastische Art und Weise, welcher Programmiersprache Entwickler ihre Aufmerksamkeit widmen sollten.
Zwar gibt es noch sehr viel Objective-C-Code da draußen und sicherlich diverse Entwickler-Kollegen, die Objective-C im Vergleich zu Swift klar bevorzugen. Doch es ändert nichts daran, dass Swift die Zukunft gehört, und danach sollten auch wir Entwickler uns richten.
Und wenn ich hier persönlich werden darf: In meinen Augen ist Swift nicht nur eine äußerst mächtige und vielseitige, sondern auch wunderschön zu schreibende Programmiersprache. Mit modernen Ansätzen erleichtert sie außerdem Neulingen den Einstieg, und ich behaupte einmal, dass diese Aussage jeder unterschreiben kann, der bereits einmal mit Objective-C entwickelt hat.
Auch Swift mag nicht perfekt sein, doch die Entwicklung der letzten Jahre zeigt, dass die Sprache auf einem verdammt guten Weg ist und sowohl von Apple als auch der Open-Source-Community sehr viel Pflege erfährt.
Es mag abgedroschen klingen, doch jetzt ist definitiv der beste Zeitpunkt, sich der Programmierung mit Swift zu widmen.
1.3 | Das neue UI-Framework: SwiftUI |
In Teil 3 dieses Buches, der sich vollumfassend den spezifischen Besonderheiten der App-Entwicklung widmet, werden Sie sehr sehr viel über SwiftUI lesen. Bei SwiftUI handelt es sich um ein sogenanntes Framework. Frameworks setzen sich aus einem Set verschiedener Funktionen zusammen, die Sie als App-Entwickler nutzen können, wenn Sie das Framework in Ihr App-Projekt einbinden.
Auch wenn SwiftUI nicht direkt etwas mit der Programmiersprache Swift zu tun hat, möchte ich an dieser Stelle ein paar Worte darüber verlieren. Das hängt nämlich mit einer grundsätzlichen Verständnisfrage zusammen, auf die ich in den letzten Jahren öfters gestoßen bin. So gilt:
Swift ist eine Programmiersprache. SwiftUI ist ein Framework, das auf Swift basiert und spezielle Funktionen für die Erstellung von Nutzeroberflächen zur Verfügung stellt.
Wenn Sie also die Begriffe Swift und SwiftUI hören, geht es nicht darum, welches der beiden Sie verwenden sollen. Wenn Sie SwiftUI einsetzen, kommen Sie um ein Verständnis der Programmiersprache Swift gar nicht herum, denn darauf basiert SwiftUI nun einmal. Doch beschränkt sich der Einsatz von Swift nicht nur auf die Entwicklung von Nutzeroberflächen. So gesehen benötigen Sie Swift immer. Es ist die grundlegendste Säule der App-Entwicklung.
Wie gesagt, finden Sie in Teil 3 des Buches weitreichende Informationen zur Nutzung und Funktionsweise von SwiftUI.
1.4 | Was Sie als App-Entwickler brauchen |
Um mit Swift Ihre eigenen Apps für iPhone, iPad und Co. entwickeln zu können, führt in der Regel kein Weg an Apples hauseigener Entwicklungsumgebung Xcode vorbei (warum ich hier „in der Regel“ schreibe, erläutere ich noch).
Xcode ist eine App, die exklusiv auf dem Mac zur Verfügung steht und die Sie kostenlos und bequem aus dem Mac App Store herunterladen und installieren können (siehe Bild 1.2). Erschrecken Sie nur nicht: Es ist normal, dass Xcode über 10 GByte an Speicherplatz für sich in Anspruch nimmt (und der Download so je nach Internetverbindung lang oder sehr lang dauern kann).
Bild 1.2 Xcode ist Apples vollwertige Entwicklungsumgebung für die Programmierung von Apps.
Xcode bringt alles mit, was Sie für die App-Entwicklung benötigen. Dazu gehört auch Unterstützung für Swift und SwiftUI. Außerdem verfügt Xcode über verschiedene Simulatoren, die es Ihnen beispielsweise ermöglichen, iPhone-Apps direkt auf Ihrem Mac auszuführen und zu testen.
Mithilfe von Xcode erstellen Sie Projekte für Ihre Apps und verwalten darin sowohl den Quellcode als auch weitere Ressourcen wie Bilder. Xcode kann Ihnen darüber hinaus beim Auffinden von Fehlern in Ihrer App helfen und ermöglicht es sogar, Ihre fertige App direkt in den App Store hochzuladen. Mehr zur Veröffentlichung von Apps erfahren Sie im letzten Teil dieses Buches.
Aufgrund dieses großen Funktionsumfangs kann Xcode als durchaus komplexe Anwendung angesehen werden. Das gilt umso mehr, wenn man zuvor noch keinerlei Programmiererfahrung gesammelt hat. Aus diesem Grund liefert Ihnen der zweite Teil dieses Buches einen Rundumüberblick über den Aufbau und die verschiedenen Bestandteile von Apples Entwicklungsumgebung.
Ich habe ja zu Beginn dieses Abschnitts geschrieben, dass zur App-Entwicklung „in der Regel“ kein Weg an Xcode vorbeiführt. Tatsächlich gibt es für das iPad eine Alternative zur vollwertigen Entwicklungsumgebung auf dem Mac: die App Swift Playgrounds (siehe Bild 1.3).
Bild 1.3 Swift Playgrounds ermöglicht das Programmieren auch auf Apples iPad.
Swift Playgrounds entstand ursprünglich, um Nutzern die Grundlagen der Programmierung spielerisch näherzubringen. Diese Funktion besitzt die App auch heute noch und sie ist definitiv einen Blick wert. Zusätzlich ermöglicht sie es inzwischen aber auch, vollwertige Apps für iPhone und iPad mit ihr zu entwickeln und direkt in den App Store hochzuladen.
Das ist definitiv eine großartige Sache, doch sollte man sich keinen Illusionen hingeben: Für die professionelle Entwicklung von Apps ist noch immer Xcode das Mittel der Wahl. Xcode bietet deutlich mehr Funktionen und Möglichkeiten als Swift Playgrounds. Dafür erlaubt es Swift Playgrounds, Apps nicht nur auf dem Mac, sondern auch auf Apples iPad zu entwickeln.
Übrigens: Für die App-Entwicklung unterstützt Swift Playgrounds ausschließlich die Programmiersprache Swift sowie das neue UI-Framework SwiftUI. Das ist also ein klarer Grund mehr, sich heute ausgiebig mit diesen beiden so wichtigen Technologien für Apple-Entwickler auseinanderzusetzen.
1.5 | Programmieren für Beginner (und darüber hinaus): Playgrounds |
Wenn es um die Entwicklung von Apps geht, arbeitet man in sogenannten Projekten. In diesen verwaltet man neben dem Quellcode auch alle zusätzlichen Ressourcen wie Bilder. Außerdem enthält solch ein Projekt weitere Informationen wie die Versionsnummer und die Unterstützung für optionale Services (beispielsweise iCloud).
Gerade am Anfang erhält man mit solch einem Projekt von Haus aus bereits sehr viele Dateien, die einen gerade als Anfänger überfordern können. Außerdem möchte man in manchen Fällen auch einfach einmal ein wenig mit Swift experimentieren, ohne dafür gleich ein ganzes Projekt erzeugen zu müssen.
Abhilfe schaffen hier die sogenannten Playgrounds (siehe Bild 1.4). In einem Playground können Sie einfach Code drauflos schreiben, ohne sich mit Projektstrukturen und dem Ablauf Ihrer App beschäftigen zu müssen. Per Klick auf einen Button führen Sie den Code aus und sehen umgehend dessen Ergebnis.
Gerade zu Beginn ist es absolut sinnvoll, Ihren Code in Playgrounds zu schreiben und zu testen. So machen Sie sich schnell mit den Grundlagen und der Syntax von Swift vertraut, ohne von den genannten Projektstrukturen ganzer Apps womöglich überfordert zu werden.
Gerade wenn Sie bisher nur wenig oder gar keine Erfahrung mit Swift gesammelt haben, empfehle ich Ihnen, die Beispiele in diesem ersten Teil des Buches mithilfe von Playgrounds ebenfalls zu programmieren. Nutzen Sie die Flexibilität von Playgrounds, um ruhig auch selbst zu experimentieren und Dinge auszuprobieren, die Sie interessieren oder die Ihnen in den Sinn kommen. Besser kann man sich mit der Programmierung gar nicht vertraut machen!
Übrigens sind Playgrounds nicht nur ein ideales Mittel, um das Programmieren grundlegend zu lernen. Auch Profis nutzen sie, um sich bequem mit neuen Frameworks oder der Umsetzung einer komplexen Programmlogik auseinanderzusetzen. Entwickler können so Ihren Code unabhängig von einem vollständigen und meist komplexen App-Projekt testen. Hat man eine passende Lösung erarbeitet, kann man diese anschließend in das eigentliche Projekt übertragen.
Bild 1.4 Playgrounds sind ein ideales Mittel, um zu experimentieren und das Programmieren zu lernen.
Mehr zur Verwendung von Playgrounds und wie Sie solche mit Xcode erstellen, erfahren Sie im zweiten Teil dieses Buches.
Swift Playgrounds auf dem iPad
Sie können Playgrounds auch auf dem iPad erstellen und so auf Apples Tablet programmieren. Zu diesem Zweck steht Ihnen eine App mit dem passenden Namen Swift Playgrounds zur Verfügung, die Sie kostenlos aus dem App Store laden können (siehe auch Abschnitt 1.4, „Was Sie als App-Entwickler brauchen“).
Die App eignet sich auch ideal für Einsteiger, die das Programmieren lernen möchten. Sie finden darin verschiedene kleine Lernkurse, die spielerisch die Grundlagen der Entwicklung mit Swift vorstellen. Darüber hinaus können Sie mit der App aber auch die eben beschriebenen Playgrounds erstellen und so ganz frei mit Code und dem Programmieren experimentieren.
Übrigens steht die Swift-Playgrounds-App auch als dedizierte Anwendung auf dem Mac zur Verfügung, unabhängig von Xcode. Falls Sie die genannten Lernkurse daher auch auf dem Mac ausprobieren möchten, können Sie das über die Swift-Playgrounds-App tun. Wenn Sie aber erst einmal näher mit der Swift-Programmierung und der Entwicklungsumgebung Xcode vertraut sind, benötigen Sie die App nicht wirklich auf dem Mac. Xcode liefert Ihnen alles, was Sie brauchen, um Ihre eigenen Anwendungen umzusetzen und Code in separaten Playgrounds zu testen.
1.6 | Weitere wichtige Ressourcen |
In der Welt der App-Entwicklung gibt es keinen Stillstand. In mehr oder weniger regelmäßigen Abständen erscheinen neue Versionen von Programmiersprachen, Entwicklungsumgebungen und Betriebssystemen. Manche dieser Updates verbessern lediglich die Stabilität oder ergänzen praktische neue Funktionen. Andere wiederum ersetzen bekannte Mechanismen durch neue. Entsprechend wichtig ist es, als Entwickler up to date zu sein.
Erfreulicherweise gibt es diverse Ressourcen, über die Sie sich auf dem Laufenden halten können. Nachfolgend möchte ich Ihnen einige davon vorstellen, die ich selbst als regelmäßige Anlaufstellen nutze.
1.6.1 | Apple-Developer-App |
Für macOS, iOS und tvOS stellt Apple eine kostenlose Developer-App zur Verfügung (siehe Bild 1.5). Darin finden Sie eine Vielzahl an Videos und diverse Artikel, die spezifische Aspekte der App-Entwicklung erläutern.
Insbesondere erhalten Sie über die App Zugriff auf die verschiedenen Session-Videos, die Apple im Zuge seiner alljährlichen Entwicklerkonferenz (Worldwide Developers Conference, kurz WWDC) veröffentlicht. Eine bessere Möglichkeit, sich über die neuesten Techniken im Bereich Swift, iOS und Co. zu informieren, gibt es wohl nicht.
Bild 1.5 Apples offizielle Developer-App ist die ideale Ergänzung für alle Entwickler.
1.6.2 | Apples Developer-Website |
Eine zentrale Anlaufstelle für alle Apple-Entwickler stellt Apples offizielle Developer-Website dar, die Sie mittels des Links https://developer.apple.com erreichen (siehe Bild 1.6). Sie liefert Ihnen eine Übersicht über die neuesten Entwicklungen und ermöglicht den Zugriff auf Beta-Versionen von iOS und Co. Über diese Website erstellen Sie zudem Ihren eigenen Entwickler-Account und können auf verschiedene Ressourcen wie Zertifikate und App-IDs zurückgreifen. Mehr zu diesen Möglichkeiten erfahren Sie im letzten Teil dieses Buches.
Bild 1.6 Über Apples offizielle Entwickler-Website haben Sie Zugriff auf aktuelle Infos und Beta-Versionen.
1.6.3 | Swift.org |
Wenn Sie sich im Speziellen für die Programmiersprache Swift interessieren, ist die offizielle Website swift.org genau das richtige (siehe Bild 1.7). Neben grundlegenden Informationen zu Swift finden Sie dort auch eine vollständige Dokumentation sowie einen Blog, der über kommende Updates und Änderungen der Sprache informiert. Vorbeischauen lohnt sich!
Bild 1.7 Die geballte Ladung Swift gibt es auf der offizie llen Website der Sprache unter swift.org.
1.6.4 | In eigener Sache |
Als Besitzer und Leser dieses Buches haben Sie Zugriff auf einen ganz besonderen Service namens Update inside. Bis Dezember 2023 erhalten Sie darüber in unregelmäßigen Abständen neue Buch-Kapitel in PDF-Form, die Sie sich bequem herunterladen können. Diese Kapitel widmen sich kommenden Neuerungen in Swift, iOS und Co. und behandeln zusätzliche Themen, die nicht Teil dieses Buches sind. Update inside ist somit eine weitere Möglichkeit, über kommende Aktualisierungen informiert zu werden.
Zusätzlich finden Sie unter
https://letscode.thomassillmann.de
meinen ganz persönlichen Entwickler-Blog. Dort veröffentliche ich in unregelmäßigen Abständen neue Beiträge rund um die App-Entwicklung für Apple-Plattformen. Außerdem gibt es auf meinem YouTube-Kanal unter
https://www.youtube.com/user/Sillivan1988
regelmäßig neue Videos zur App-Entwicklung.
2 | Grundlagen der Programmierung |