Lernziel
Nach dieser Lektion hast du eine kleine, funktionierende App gebaut, eine Motivations-App, die dir auf Knopfdruck einen zufälligen Spruch zeigt. Du startest sie im Simulator und, wenn du willst, auf deinem eigenen iPhone.
Vorab: Du musst noch nicht alles verstehen
Diese Lektion ist anders als die folgenden. Wir bauen eine App, ohne jedes Detail zu erklären. Warum?
Weil du sehen sollst, wohin die Reise geht. Wenn du am Ende dieser Lektion eine eigene App auf dem Bildschirm hast, weißt du: Das ist machbar. Die Details lernst du ab Stufe 1 Schritt für Schritt, und bei jedem neuen Konzept wirst du denken: „Ach, das war das in meiner ersten App!“
Also: Tipp mit, staune, und lass dich nicht verunsichern, wenn manches noch wie Zauberei wirkt.
Schritt 1: Neues Projekt anlegen
Wie in Lektion 0.3:
- File → New → Project… (
⇧ ⌘ N) - iOS → App → Next
- Product Name:
Motivation - Interface: SwiftUI · Language: Swift · Testing System: None · Storage: None
- Next → Speicherort wählen → Create
Öffne ContentView.swift.
Schritt 2: Ein großer Spruch
Ersetze den gesamten Inhalt von ContentView.swift durch diesen Code:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 30) {
Image(systemName: "sparkles")
.font(.system(size: 60))
.foregroundStyle(.orange)
Text("Jeder Profi war einmal Anfänger.")
.font(.title)
.fontWeight(.bold)
.multilineTextAlignment(.center)
}
.padding()
}
}
#Preview {
ContentView()
}Erwartetes Ergebnis im Canvas
Ein orangefarbenes Funkel-Symbol, darunter in großer, fetter Schrift der Spruch, zentriert.
Was passiert hier, grob gesagt?
VStackstapelt Dinge untereinander, mitspacing: 30Abstand.Image(systemName: "sparkles")zeigt ein Symbol aus Apples Symbolbibliothek.Text(...)zeigt einen Text.- Die Zeilen mit dem Punkt am Anfang, wie
.font(.title), nennt man Modifier. Sie verändern das Aussehen: Schriftgröße, Farbe, Ausrichtung.
Probier ruhig ein bisschen herum: Ändere .orange in .purple oder .title in .largeTitle. Der Canvas zeigt dir sofort das Ergebnis.
Schritt 3: Mehrere Sprüche und ein Button
Eine App mit einem einzigen Spruch ist schnell langweilig. Wir wollen auf Knopfdruck einen neuen bekommen. Ersetze den Code erneut komplett:
import SwiftUI
struct ContentView: View {
let quotes = [
"Jeder Profi war einmal Anfänger.",
"Fehler sind Beweise dafür, dass du es versuchst.",
"Kleine Schritte sind auch Schritte.",
"Heute ist ein guter Tag, um etwas Neues zu lernen.",
"Du musst nicht perfekt sein, nur dranbleiben."
]
@State private var currentQuote = "Tippe auf den Button!"
var body: some View {
VStack(spacing: 30) {
Image(systemName: "sparkles")
.font(.system(size: 60))
.foregroundStyle(.orange)
Text(currentQuote)
.font(.title)
.fontWeight(.bold)
.multilineTextAlignment(.center)
Button("Neuer Spruch") {
currentQuote = quotes.randomElement() ?? ""
}
.buttonStyle(.borderedProminent)
.tint(.orange)
}
.padding()
}
}
#Preview {
ContentView()
}Im Canvas kannst du direkt auf den Button tippen. Bei jedem Tipp erscheint ein zufälliger Spruch.
Erwartetes Ergebnis
Symbol, Text „Tippe auf den Button!“ und darunter ein orangefarbener Button „Neuer Spruch“. Ein Tipp zeigt einen zufälligen Spruch aus der Liste.
Was ist neu?
let quotes = [...]ist eine Liste (in Swift: Array) von Sprüchen. Lektion 1.6.@State private var currentQuoteist der aktuelle Spruch.@Statesorgt dafür, dass sich der Bildschirm aktualisiert, wenn er sich ändert. Lektion 2.9.Button("Neuer Spruch") { ... }ist ein Button. Der Code in den geschweiften Klammern läuft beim Tippen. Lektion 2.11.quotes.randomElement()holt ein zufälliges Element aus der Liste.?? ""ist eine Absicherung für den Fall, dass die Liste leer wäre. Klingt kryptisch? Das ist ein Optional, eines der wichtigsten Themen in Swift. Lektion 1.8.
Du siehst: In 30 Zeilen stecken schon fünf Konzepte, die du im Kurs lernen wirst. Deshalb beginnen wir in Stufe 1 bei den Grundlagen.
Schritt 4: Ein bisschen Schliff
Zwei kleine Extras machen die App deutlich schöner. Ergänze den Code an zwei Stellen:
a) Eine sanfte Animation beim Wechsel. Ändere den Inhalt des Buttons:
Button("Neuer Spruch") {
withAnimation {
currentQuote = quotes.randomElement() ?? ""
}
}b) Ein farbiger Hintergrund. Ergänze nach .padding() (dem letzten Modifier des VStack) zwei Zeilen:
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.orange.opacity(0.1)).frame(...) lässt den Inhalt den ganzen Bildschirm ausfüllen, .background(...) färbt ihn zartorange.
Erwartetes Ergebnis
Der ganze Bildschirm ist zartorange, und neue Sprüche werden sanft eingeblendet statt einfach ausgetauscht.
Der komplette Code zum Vergleichen
import SwiftUI
struct ContentView: View {
let quotes = [
"Jeder Profi war einmal Anfänger.",
"Fehler sind Beweise dafür, dass du es versuchst.",
"Kleine Schritte sind auch Schritte.",
"Heute ist ein guter Tag, um etwas Neues zu lernen.",
"Du musst nicht perfekt sein, nur dranbleiben."
]
@State private var currentQuote = "Tippe auf den Button!"
var body: some View {
VStack(spacing: 30) {
Image(systemName: "sparkles")
.font(.system(size: 60))
.foregroundStyle(.orange)
Text(currentQuote)
.font(.title)
.fontWeight(.bold)
.multilineTextAlignment(.center)
Button("Neuer Spruch") {
withAnimation {
currentQuote = quotes.randomElement() ?? ""
}
}
.buttonStyle(.borderedProminent)
.tint(.orange)
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.orange.opacity(0.1))
}
}
#Preview {
ContentView()
}Schritt 5: Im Simulator starten
Wähle oben ein iPhone-Modell und drück ⌘ R. Deine App startet im Simulator.
Drück dort ⇧ ⌘ H, um zum Home-Bildschirm zu wechseln. Zwischen den anderen Apps liegt jetzt deine App „Motivation“. 🎉
Schritt 6 (optional): Auf deinem eigenen iPhone
Wenn du ein iPhone hast, kannst du die App kostenlos darauf installieren. Beim ersten Mal sind ein paar Schritte nötig. Danach geht es mit einem Klick.
- Apple-Account in Xcode hinterlegen (siehe Lektion 0.2, Schritt 5).
- Team auswählen: Klick im Navigator ganz oben auf das blaue Projektsymbol „Motivation“. Wähle im Bereich Signing & Capabilities bei Team dein „Personal Team“ aus.
- iPhone verbinden: per USB-Kabel. Bestätige auf dem iPhone die Frage „Diesem Computer vertrauen?“.
- Entwicklermodus aktivieren: Auf dem iPhone unter Einstellungen → Datenschutz & Sicherheit → Entwicklermodus. Das iPhone startet neu und fragt noch einmal nach Bestätigung. Die Option erscheint oft erst, nachdem du das iPhone mit Xcode verbunden hast.
- iPhone als Ziel wählen: In der Toolbar oben dein iPhone statt des Simulators auswählen.
- Starten mit
⌘ R. - Beim ersten Mal vertrauen: Möglicherweise meldet das iPhone, dass der Entwickler nicht vertrauenswürdig ist. Geh dann auf dem iPhone zu Einstellungen → Allgemein → VPN & Geräteverwaltung, tipp auf deinen Account und vertrau ihm. Danach in Xcode erneut
⌘ R.
Gut zu wissen
Mit dem kostenlosen Account läuft die App nur eine begrenzte Zeit (derzeit etwa eine Woche) auf deinem iPhone. Danach startest du sie einfach noch einmal aus Xcode. Mit dem kostenpflichtigen Developer Program fällt diese Grenze weg.
Die genauen Menünamen können sich zwischen iOS-Versionen leicht ändern. Wenn du eine Option nicht findest, nutz die Suche oben in den iPhone-Einstellungen.
Typische Fehler
Der Button tut nichts
Prüfe, ob vor var currentQuote wirklich @State steht. Ohne @State meldet Xcode sogar einen Fehler:
Fehlermeldung
Cannot assign to property: 'self' is immutable
Cannot find 'quotes' in scope
Entweder ein Tippfehler (z. B. quote statt quotes), oder die Liste steht an der falschen Stelle. Sie muss innerhalb von struct ContentView: View { ... } stehen, aber außerhalb von body.
Expected ',' separator
In der Liste fehlt ein Komma zwischen zwei Sprüchen. Jeder Spruch außer dem letzten braucht ein Komma am Ende.
„Signing for 'Motivation' requires a development team“
Du willst die App auf einem echten iPhone starten, hast aber kein Team ausgewählt. Siehe Schritt 6, Punkt 2.
Alles sieht anders aus als hier
Vergleich deinen Code mit dem kompletten Code oben. Oft ist es eine falsch gesetzte Klammer. Markier den ganzen Code mit ⌘ A und drück ⌃ I. Xcode rückt dann alles korrekt ein, und falsch gesetzte Klammern fallen sofort auf.
FAQ
Anfänger
Was bedeutet das überhaupt?Ich habe nur die Hälfte verstanden. Ist das schlimm? Überhaupt nicht, das ist der Plan. Diese Lektion zeigt dir das Ziel. Ab der nächsten Lektion lernst du jedes Teil einzeln kennen.
Kann ich eigene Sprüche einfügen? Unbedingt! Füg einfach weitere Zeilen in die Liste ein. Achte auf die Anführungszeichen und das Komma am Ende.
Wie ändere ich das App-Symbol auf dem Home-Bildschirm?
Das geht über die Datei Assets → AppIcon. Dafür brauchst du eine Bilddatei. Wir behandeln das in einem der Projekte.
Fortgeschritten
Warum verhält es sich so?Warum steht die Liste mit let und der Spruch mit var?
let heißt: Dieser Wert ändert sich nie. var heißt: Er kann sich ändern. Die Sprüche bleiben gleich, der aktuelle Spruch wechselt. Mehr dazu in Lektion 1.2.
Manchmal kommt derselbe Spruch zweimal hintereinander. Warum?
randomElement() wählt jedes Mal komplett zufällig, also auch den aktuellen Spruch. Wie man das verhindert, ist eine schöne Übung für später. Ein Tipp: filter.
Profi
Was passiert unter der Haube?Warum ist quotes eine Eigenschaft der View und nicht @State?
Weil sich die Liste nie ändert. Konstanten in einer View sind unproblematisch: Sie werden bei jeder Neuberechnung der View mit erzeugt, das ist bei fünf Strings vernachlässigbar. In einer größeren App würde man sie eher in eine eigene Datenquelle auslagern (Stufe 3).
Was macht withAnimation genau?
Es markiert die Zustandsänderung als animiert. SwiftUI vergleicht das alte und das neue Aussehen und interpoliert dazwischen. Beim Text bedeutet das standardmäßig ein Überblenden. Wie man Animationen gezielt steuert, lernst du in den Lektionen 3.23 bis 3.26.
Übungen
Übung 1: Deine Sprüche
Ersetze die fünf Sprüche durch fünf eigene. Ändere die Farbe der App von Orange in deine Lieblingsfarbe (z. B. .blue, .green, .pink). Achte darauf, alle drei Stellen zu ändern.
Übung 2: Anderes Thema
Mach aus der App einen „Was koche ich heute?“-Generator: eine Liste mit Gerichten, ein passendes Symbol (z. B. "fork.knife") und ein Button „Vorschlag“.
Übung 3: Zähler
Zeig unter dem Button an, wie viele Sprüche schon angezeigt wurden, z. B. „3 Sprüche gelesen“.
Tipp: Du brauchst einen zweiten @State-Wert, eine Zahl, die bei jedem Tipp um 1 wächst (+= 1).
Lösung Übung 3Erst selbst probieren!
Ergänze unter @State private var currentQuote ...:
@State private var count = 0Ergänze im Button nach currentQuote = ...:
count += 1Und unter dem Button (aber noch innerhalb des VStack):
Text("\(count) Sprüche gelesen")
.foregroundStyle(.secondary)"\(count)" setzt den Wert der Zahl in den Text ein. Das nennt man String-Interpolation. Lektion 1.3.
Zusammenfassung
- Du hast eine echte App gebaut, mit Text, Symbol, Button, Zufall und Animation.
- Du hast sie im Simulator gestartet, vielleicht sogar auf deinem iPhone.
- Du hast schon Begriffe gesehen, die dich durch den ganzen Kurs begleiten: View, Modifier,
@State, Array, Optional. - Du musst sie noch nicht verstehen. Genau das ist ab jetzt unsere Aufgabe.
Glückwunsch!
Du bist offiziell App-Entwickler. Ab der nächsten Lektion lernst du, was hinter all dem steckt, und zwar von Grund auf.