E-Book, Deutsch, 729 Seiten
Reihe: Rheinwerk Computing
Kofler Swift
5. Auflage 2025
ISBN: 978-3-367-10736-0
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Das umfassende Handbuch
E-Book, Deutsch, 729 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10736-0
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Mit Swift und SwiftUI erstellen Sie professionelle und moderne Apps für macOS und iOS. Wie das geht, zeigt Ihnen Michael Kofler in diesem vollständig neu konzipierten Swift-Handbuch. Von den ersten Zeilen in Xcode über das Design Ihrer neuen App mit SwiftUI bis zur Veröffentlichung im App-Store lernen Sie alle Schritte der Anwendungsentwicklung kennen und machen sich mit den neuen Features von Swift 6 vertraut. Ideal für das Selbststudium und den Unterricht.
Aus dem Inhalt:
- Crashkurs Xcode
- Schleifen, Funktionen und Closures
- Strukturen, Klassen und Protokolle
- Views anwenden und selbst programmieren
- App-Design und Animation
- Data Binding, SwiftData und iCloud
- Internationalisierung und App Store
Die Fachpresse zur Vorauflage:
Mac Life: »Wer Apps mit Swift programmieren möchte, erhält mit diesem Wälzer einen soliden Helfer.«
Michael Kofler hat Telematik an der TU Graz studiert und ist einer der erfolgreichsten deutschsprachigen IT-Fachbuchautoren. Zu seinen Themengebieten zählen neben Linux auch IT-Sicherheit, Python, Swift, Java und der Raspberry Pi. Er ist Entwickler, berät Firmen und arbeitet als Lehrbeauftragter.
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 13
Teil I. Einführung ... 17 1. Hello, World! ... 19 1.1 ... Erste Schritte mit Xcode ... 20 1.2 ... Der Hello-World-Code ... 24 1.3 ... Eigene Code-Experimente ... 28 2. Learning by Doing: Die erste App ... 31 2.1 ... Schritt 1: Eine Liste mit den Buchtiteln ... 33 2.2 ... Schritt 2: Gestaltung der Listenelemente ... 45 2.3 ... Schritt 3: Bücher nach Sprachen gruppieren ... 55 2.4 ... Schritt 4: Von der Liste zur Detailansicht ... 58 2.5 ... Schritt 5: Die RatingView ... 63 2.6 ... Schritt 6: Multiplatform- und Farb-Finetuning ... 70 2.7 ... Schritt 7: Persistenz mit SwiftData ... 74 3. Tipps & Tricks ... 81 3.1 ... Syntaxeigenheiten von Swift ... 82 3.2 ... Coding mit KI-Unterstützung ... 87 3.3 ... Xcode ... 90
Teil II. Swift ... 101 4. Variablen, Optionals und Datentypen ... 103 4.1 ... Variablen und Konstanten ... 103 4.2 ... Optionals ... 107 4.3 ... Elementare Datentypen ... 111 4.4 ... Zeichenketten ... 115 4.5 ... Wert- versus Referenztypen ... 122 5. Operatoren ... 125 5.1 ... Zuweisungs- und Rechenoperatoren ... 125 5.2 ... Vergleichsoperatoren und logische Operatoren ... 128 5.3 ... Range-Operatoren ... 131 5.4 ... Operatoren für Fortgeschrittene ... 132 6. Verzweigungen und Schleifen ... 135 6.1 ... Verzweigungen mit if ... 135 6.2 ... Inverse Logik mit guard ... 138 6.3 ... Verzweigungen mit switch ... 139 6.4 ... Versions- oder plattformabhängiger Code ... 141 6.5 ... Schleifen ... 142 7. Funktionen und Closures ... 149 7.1 ... Funktionen definieren und ausführen ... 149 7.2 ... Parameter ... 157 7.3 ... Standardfunktionen ... 164 7.4 ... Funktionen als eigener Datentyp ... 166 7.5 ... Closures ... 168 8. Arrays, Dictionaries, Sets und Tupel ... 173 8.1 ... Arrays ... 173 8.2 ... Arrays und Aufzählungen verarbeiten ... 180 8.3 ... Dictionaries ... 187 8.4 ... Sets ... 189 8.5 ... Tupel ... 191 9. Grundlagen der objektorientierten Programmierung ... 193 9.1 ... Klassen und Strukturen ... 193 9.2 ... Enumerationen ... 201 9.3 ... Eigenschaften ... 204 9.4 ... Init-Funktion ... 213 9.5 ... Methoden ... 219 9.6 ... Subscripts ... 225 9.7 ... Typ-Aliasse ... 227
10. Objektorientierte Programmierung für Fortgeschrittene ... 229 10.1 ... Vererbung ... 229 10.2 ... Generics ... 239 10.3 ... Protokolle ... 242 10.4 ... Standardprotokolle ... 251 10.5 ... Extensions ... 256 10.6 ... Protokollerweiterungen ... 258
11. Fehlerabsicherung ... 263 11.1 ... Fehlerabsicherung mit try und catch ... 263 11.2 ... Selbst Fehler auslösen (throws und throw) ... 270 11.3 ... Fehler in Funktionen weitergeben (rethrows) ... 273 11.4 ... Das Error-Protokoll ... 275
12. Swift-Interna ... 277 12.1 ... Speicherverwaltung ... 277 12.2 ... Attribute, Property Wrapper und Makros ... 282 12.3 ... Reflection und KeyPath-Ausdrücke ... 286 12.4 ... Swift Package Manager ... 290
Teil III. SwiftUI ... 293
13. Views ... 295 13.1 ... Grundlagen ... 297 13.2 ... Text ... 307 13.3 ... Buttons und Optionen ... 312 13.4 ... Bitmaps und Icons (Image) ... 317 13.5 ... Grafik (Canvas, Path und Shape) ... 321 13.6 ... Container (Stack, ScrollView, Grid) ... 323 13.7 ... Farbe, Datum und Uhrzeit auswählen (Date- und ColorPicker) ... 330 13.8 ... Ereignisse (Gestures) ... 333 13.9 ... Vorschau (Preview-Optionen) ... 336 13.10 ... Apps auf dem eigenen iPhone ausführen ... 340
14. State, Binding und Observable ... 343 14.1 ... Variablen synchronisieren (@State und @Binding) ... 343 14.2 ... Umgebungsvariablen (@Environment) ... 352 14.3 ... Fokus-Management (@FocusState) ... 354 14.4 ... Instanzen von Klassen beobachten (@Observable) ... 355 14.5 ... Model-View-ViewModel (MVVM) ... 362 14.6 ... Code-Organisation nach MVVM-Regeln ... 364
15. Listen und Tabellen ... 373 15.1 ... Listen ... 373 15.2 ... Listen manipulieren ... 379 15.3 ... Beispiel: Issue-Management ... 382 15.4 ... Tabellen ... 392
16. Navigation ... 399 16.1 ... NavigationStack ... 399 16.2 ... Navigation entlang eines Pfads ... 402 16.3 ... Deep Links ... 407 16.4 ... NavigationSplitView ... 414 16.5 ... TabView ... 419 16.6 ... Toolbar ... 421 16.7 ... Modale Dialoge (Alerts, Sheets, Popovers) ... 424 16.8 ... Best Practices ... 428
17. SwiftUI-Spezialthemen ... 431 17.1 ... Animationen ... 432 17.2 ... Einstellungen (User-Defaults, @AppStorage) ... 437 17.3 ... macOS-App mit mehreren Fenstern (FileDocuments) ... 440 17.4 ... Eigene View-Modifier ... 448 17.5 ... UIKit-Views in SwiftUI verwenden ... 452 17.6 ... Capabilities und Entitlements ... 458
Teil IV. Programmier- und Arbeitstechniken ... 461
18. Asynchrone Programmierung ... 463 18.1 ... Tasks, async und await ... 465 18.2 ... actor und Sendable ... 473 18.3 ... Asynchrone Programmierung in SwiftUI ... 480 18.4 ... Beispiel: Asynchroner Download ... 484 18.5 ... Beispiel: Datenauswertung und -visualisierung ... 491
19. Dateien, JSON und XML ... 499 19.1 ... Dateinamen und URLs ... 500 19.2 ... Standardverzeichnisse ... 501 19.3 ... Dateioperationen ... 506 19.4 ... Bundle-Dateien und Assets ... 510 19.5 ... JSON-Dateien verarbeiten ... 512 19.6 ... XML-Dateien lesen ... 519
20. Netzwerkfunktionen und REST-APIs ... 525 20.1 ... Dateien herunterladen ... 526 20.2 ... REST-APIs nutzen ... 528 20.3 ... Beispiel: Aktuelles Wetter ermitteln ... 531 20.4 ... Beispiel: New-York-Times-Bestsellerliste ... 534
21. SwiftData ... 541 21.1 ... Persistenz ... 541 21.2 ... SwiftData-Überblick ... 543 21.3 ... Modellierung (Schema) ... 545 21.4 ... Container ... 549 21.5 ... Daten lesen und speichern (Kontext) ... 550 21.6 ... Relationen ... 554 21.7 ... SwiftData-Interna ... 559 21.8 ... Beispiel: To-do-App ... 564 21.9 ... Undo-Funktion für die To-do-App ... 574
22. iCloud ... 581 22.1 ... iCloud-Grundlagen ... 581 22.2 ... Hello, iCloud! ... 583 22.3 ... SwiftData und iCloud ... 592
Teil V Apps ... 597
23. Währungskalkulator ... 599 23.1 ... App-Überblick ... 599 23.2 ... Umrechnungskurse herunterladen und speichern (Model) ... 602 23.3 ... UI-Logik (View Model) ... 606 23.4 ... Benutzeroberfläche (View) ... 612 23.5 ... Währungseinstellung (View) ... 616
24. Lokalisierung und App Store ... 623 24.1 ... Artwork ... 623 24.2 ... Mehrsprachige Apps ... 626 24.3 ... Eigene Apps im App Store anbieten ... 637 24.4 ... macOS-Programme selbst weitergeben ... 647
25. Familieneinkaufsliste ... 653 25.1 ... Bedienung ... 654 25.2 ... Software-Design ... 658 25.3 ... Einkaufsliste und Kategorien (Model) ... 666 25.4 ... UI-Logik (View Model) ... 671 25.5 ... Grundaufbau der Benutzeroberfläche (ContentView) ... 675 25.6 ... Shopping-Tab (View) ... 678 25.7 ... Planungs-Tab (View) ... 685 25.8 ... Settings-Tab (View) ... 689 25.9 ... REST-Server-Implementierung mit Python ... 693 25.10 ... REST-Client in Swift (View Model) ... 706 Index ... 717
1 Hello, World!
In diesem Kapitel geht es darum, dass Sie Ihr Arbeitswerkzeug – also Xcode – kennenlernen. Ich gebe Ihnen einen Überblick über die wichtigsten Bestandteile der komplexen Oberfläche und zeige Ihnen, aus welchen Dateien sich ein einfaches SwiftUI-Projekt zusammensetzt.
Xcode ist kostenlos. Einen Apple Developer Account (aktuell 120 €/Jahr) brauchen Sie erst, wenn Sie selbst programmierte iCloud-Funktionen testen oder Apps über den App Store weitergeben oder verkaufen möchten.
Hardware-Voraussetzungen
Teuer ist die App-Entwicklung leider trotzdem – Sie brauchen nämlich angemessene Hardware. Grundsätzlich läuft Xcode auf jedem Mac, auch auf einem alten MacBook Air mit nur 8 GB RAM. Verwenden Sie unbedingt ein Gerät mit M-Prozessor (Apple Silicon); Geräte mit Intel-CPU, die im Gebrauchtmarkt günstig angeboten werden, sind für die moderne App-Entwicklung ungeeignet und haben keine Zukunft.
Mit der Ausführung von Xcode ist es nicht getan. Während der Entwicklung von Apps brauchen Sie einen Simulator (wird mit Xcode mitgeliefert), um dort ein iPhone oder iPad als virtuelle Testumgebung auszuführen. Xcode plus Simulator sprengen die 8-GB-Grenze bereits.
Ich habe für dieses Buch mit einem MacBook Pro mit 36 GB RAM gearbeitet. So viel muss es nicht sein, aber ich rate Ihnen dringend zu einem Rechner mit zumindest 24 GB RAM. Alle anderen Eckdaten sind nicht so wichtig. Es muss weder die neueste noch die schnellste CPU sein. Auch die Größe der SSD ist sekundär. Rechnen Sie großzügig mit 100 GByte für Xcode, diverse iOS-Simulatordateien sowie Build-Dateien für eigene Projekte. (Anfangs ist der Platzbedarf deutlich kleiner, aber mit der Zeit sammeln sich immer mehr Build-Dateien und iOS-Simulatoren an. Räumen Sie hin und wieder auf! Tipps dazu folgen im Abschnitt 3.3, »Xcode«.)
Zu guter Letzt: Verwenden Sie einen großen Monitor. Es muss kein Studio Display sein, ein 4k-Monitor für 200 € reicht absolut aus.
1.1 Erste Schritte mit Xcode
Sofern Sie Xcode noch nicht installiert haben, finden Sie das Programm kostenlos im App Store. Von dort erhalten Sie allerdings nur die Grundkomponenten. Beim ersten Start fragt Xcode, welche Simulatordateien es herunterladen soll. Diese Dateien sind notwendig, damit Xcode Ihren Code in einem simulierten iPhone oder iPad ausführen kann. Der iOS-Simulator (immerhin ein weiterer Download im Umfang von ca. 8 GB) reicht aus. Auf tvOS, watchOS etc. gehe ich in diesem Buch nicht ein.
Mit File • New • Project starten Sie nun Ihr erstes Projekt. Im ersten Dialog haben Sie die Auswahl zwischen verschiedenen Vorlagen. Für die meisten Projekte in diesem Buch ist Multiplatform • App die richtige Wahl (siehe Abbildung 1.1). Das sind SwiftUI-Programme, die auf mehreren Betriebssystemen (iOS, macOS) laufen. Für Teil II des Buchs ist auch macOS • Command Line Tool eine gute Alternative. Damit können Sie Swift-Sprachmerkmale ohne den Overhead einer grafischen Benutzeroberfläche ausprobieren.
Abbildung 1.1 Multiplatform-Apps benutzen SwiftUI und sind auf diversen Apple-Betriebssystemen ausführbar.
Im zweiten Schritt geben Sie Ihrem Projekt einen Namen (siehe .
Abbildung 1.2 Einstellung des Projektnamens
Als Organization Identifier verwenden Sie – falls vorhanden – Ihren Domain-Namen oder den Ihrer Firma/Organisation/Universität in umgekehrter Reihenfolge (also com.example für die Domain example.com). Xcode setzt aus diesen Namen den Bundle Identifier zusammen. Wenn Sie irgendwann Ihre erste App in den App Store stellen, muss dieser Identifier weltweit eindeutig sein. Wir brauchen für unsere ersten Experimente weder ein Testing System noch ein Backend für Storage.
Zuletzt müssen Sie angeben, in welchem Verzeichnis Sie Ihr Projekt speichern möchten (siehe Abbildung 1.3). Xcode erzeugt dort wiederum ein Unterverzeichnis mit dem Projektnamen. Standardmäßig ist in diesem Dialog die Option Create Git repository on my Mac aktiviert. Selbst wenn Sie das Versionsverwaltungsprogramm Git (siehe auch Abschnitt 3.3, »Xcode«) nicht verwenden möchten, können Sie die Option belassen. Das vorerst leere Git-Verzeichnis kostet kaum Speicherplatz und gibt Ihnen später die Möglichkeit, Git jederzeit zu nutzen.
Abbildung 1.3 Speicherort für das Projekt
1.1.1 Die Oberfläche von Xcode
Der Button Create erzeugt endlich Ihr Projekt. Es besteht selbst in dieser Minimalvariante aus mehreren Dateien, deren Funktion ich Ihnen gleich erläutere. In Xcode ist automatisch die Datei ContentView.swift des neuen Projekts geöffnet. (Wenn nicht, öffnen Sie die Datei durch einen Doppelklick im Project Explorer, also im ersten Tab der linken Seitenleiste.) Neben dem Code wird eine Voransicht der App angezeigt (siehe Abbildung 1.4). Aus Effizienzgründen ist als Preview-Gerät normalerweise macOS eingestellt. Zumeist wollen Sie aber wissen, wie Ihre App auf einem iPhone aussieht. Stellen Sie einfach das gewünschte Preview-Gerät ein. (Xcode muss hinter den Kulissen den iOS-Simulator laden, was beim ersten Mal etwas Zeit kostet.)
Abbildung 1.4 Xcode setzt sich aus zahlreichen Teilfenstern zusammen, die ein- und ausgeblendet werden können.
Abbildung 1.5 Hier laufen zwei Instanzen des Hello-World-Programms:
eine im iPad-Simulator, die zweite nativ als macOS-Programm.
Während der App-Entwicklung ist die Preview-Ansicht für die meisten Arbeitsschritte ausreichend. Hin und wieder müssen Sie Ihr Programm aber direkt im iPhone- oder iPad-Simulator ausführen. Dazu wählen Sie in der Fensterleiste das gewünschte Gerät aus und drücken dann auf den Start-Button. Nach ein paar Sekunden erscheint das Programm im Simulator oder als macOS-Fenster (siehe Abbildung 1.5).
Xcode zeichnet sich durch eine fast unüberschaubare Fülle von Funktionen aus. Das liegt daran, dass Xcode die Entwicklungsumgebung von Apple ist, mit der die Firma alle eigenen Software-Produkte entwickelt. Xcode ist insofern ein echtes Profi-Tool. Das macht die ersten Schritte mit Xcode leider etwas mühsam. Beim Design von Xcode stand eine einfache Bedienung offenbar etwas weiter unten in der Prioritätenliste. Anfangs fällt nicht nur die Orientierung in Xcode schwer, auch das Verhalten bei den kleinsten Fehlern ist mühsam: Xcode zeigt zwar eine Fehlermeldung an, diese ist aber nur in Ausnahmefällen hilfreich. Sie müssen die Ursache des Problems selbst mit Intuition und Hilfe aus dem Internet oder von KI-Tools suchen und den Fehler beheben.
Lassen Sie sich während der ersten Tage mit Xcode nicht entmutigen! Es dauert ein paar Tage, sich an die wesentlichsten Eigenheiten von Xcode zu gewöhnen. Danach kann man mit der Entwicklungsumgebung durchaus gut arbeiten. (Ich will aber nicht verschweigen, dass mich das Programm auch nach jahrelanger Arbeit manchmal zur Weißglut bringt.) Werfen Sie auch einen Blick in Abschnitt 3.3, »Xcode«, wo ich eine Sammlung von Tipps & Tricks für den Umgang mit Xcode zusammengefasst habe. Dort finden Sie auch einen Überblick über die wichtigsten Tastenkürzel.
Vorerst ist es wichtig, dass Sie mit den Grundfunktionen des Programms vertraut werden. Es gibt drei Seitenleisten, die jeweils ein- und ausgeblendet werden können:
-
Navigator: Die linke Seitenleiste beinhaltet diverse Navigatoren. Sie helfen dabei, Dateien zu öffnen, zu einem Fehler zu springen etc.
-
Eigenschaften: In der rechten Seitenleiste verbergen sich mehrere Tabs zur Einstellung aller möglichen Eigenschaften des ganzen Projekts, einer Datei, eines Elements der Oberfläche usw.
-
Debugging: In der unteren Seitenleiste finden Sie die Ausgaben Ihrer Programme inklusive aller print-Anweisungen.
-
Code und Preview: Im Zentrum der Oberfläche steht die gerade offene Code-Datei. Bei SwiftUI-Dateien wird daneben eine Vorschau angezeigt. Die Vorschau friert ein (Preview paused), sobald Sie das Programm in einem Simulator starten, wenn der Code einen Fehler enthält oder wenn sich Xcode sonst überfordert fühlt. In diesem Fall müssen Sie die Vorschau mit einem Klick auf den Refresh-Button neu starten.
1.1.2 Swift 6 aktivieren
Zumindest bis zum Frühjahr 2025 (Xcode Version 16.3) verwenden neue Projekte standardmäßig Swift 5. Das klingt absurd: Swift 6 wurde schon ein ganzes Jahr vorher bei der WWDC 2024 präsentiert und wird seit Herbst 2024 offiziell ausgeliefert.
Grundsätzlich sind die Unterschiede zwischen der letzten Swift-5-Version (das war 5.10, Release im März 2024) und den Versionen 6.0 bzw. 6.1 gering (Oktober...